मैं ब्लूमबर्ग बीडीएच व्यवहार की प्रतिलिपि बनाना चाहता हूं।एक्सेल एक्सेलडीएनए सी #/ब्लूमबर्ग बीडीएच() व्यवहार (वेब अनुरोध के बाद ऐरे लिखना) की प्रतिलिपि बनाने का प्रयास करें
बीडीएच एक वेब अनुरोध करता है और एक सरणी लिखता है (लेकिन एक सरणी शैली वापस नहीं करता है)। इस वेब अनुरोध के दौरान, फ़ंक्शन "# एन/ए अनुरोध" देता है। जब वेब अनुरोध समाप्त हो गया, तो बीडीएच() फ़ंक्शन वर्कशीट में सरणी परिणाम लिखता है।
उदाहरण के लिए, एक्सेलडीएनए में, मैं वर्कशीट में थ्रेड के साथ लिखने में सफल होता हूं।
परिणाम आप एक डीएनए फ़ाइल में नीचे दिए गए कोड,
= WriteArray का परिणाम का उपयोग करता है, तो (2; 2)
पंक्ति 1>#N/A Requesting Data (0,1)
लाइन हो जाएगा 2>(1,0) (1,1)
अंतिम अंकको प्रतिस्थापित करना है मूल्य के साथऔर सूत्र की प्रतिलिपि बनाएँ। आप टिप्पणी हटाएं //xlActiveCellType.InvokeMember("FormulaR1C1Local ", आप परिणाम के पास हैं, लेकिन आप सही व्यवहार
फ़ाइल नहीं है जब .dna
<DnaLibrary Language="CS" RuntimeVersion="v4.0">
<![CDATA[
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using ExcelDna.Integration;
public static class WriteForXL
{
public static object[,] MakeArray(int rows, int columns)
{
if (rows == 0 && columns == 0)
{
rows = 1;
columns = 1;
}
object[,] result = new string[rows, columns];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
result[i, j] = string.Format("({0},{1})", i, j);
}
}
return result;
}
public static object WriteArray(int rows, int columns)
{
if (ExcelDnaUtil.IsInFunctionWizard())
return "Waiting for click on wizard ok button to calculate.";
object[,] result = MakeArray(rows, columns);
var xlApp = ExcelDnaUtil.Application;
Type xlAppType = xlApp.GetType();
object caller = xlAppType.InvokeMember("ActiveCell", BindingFlags.GetProperty, null, xlApp, null);
object formula = xlAppType.InvokeMember("FormulaR1C1Local", BindingFlags.GetProperty, null, caller, null);
ObjectForThread q = new ObjectForThread() { xlRef = caller, value = result, FormulaR1C1Local = formula };
Thread t = new Thread(WriteFromThread);
t.Start(q);
return "#N/A Requesting Data";
}
private static void WriteFromThread(Object o)
{
ObjectForThread q = (ObjectForThread) o;
Type xlActiveCellType = q.xlRef.GetType();
try
{
for (int i = 0; i < q.value.GetLength(0); i++)
{
for (int j = 0; j < q.value.GetLength(1); j++)
{
if (i == 0 && j == 0)
continue;
Object cellBelow = xlActiveCellType.InvokeMember("Offset", BindingFlags.GetProperty, null, q.xlRef, new object[] { i, j });
xlActiveCellType.InvokeMember("Value", BindingFlags.SetProperty, null, cellBelow, new[] { Type.Missing, q.value[i, j] });
}
}
}
catch(Exception e)
{
}
finally
{
//xlActiveCellType.InvokeMember("Value", BindingFlags.SetProperty, null, q.xlRef, new[] { Type.Missing, q.value[0, 0] });
//xlActiveCellType.InvokeMember("FormulaR1C1Local", BindingFlags.SetProperty, null, q.xlRef, new [] { q.FormulaR1C1Local });
}
}
public class ObjectForThread
{
public object xlRef { get; set; }
public object[,] value { get; set; }
public object FormulaR1C1Local { get; set; }
}
}
]]>
</DnaLibrary>
@To Govert
बीडीएच वित्त उद्योग में एक मानक बन गया है। लोगों को पता नहीं है कि कैसे एक सरणी (यहां तक कि Ctrl + Shift + Enter) में हेरफेर करना है।
बीडीएच वह कार्य है जिसने ब्लूमबर्ग को इतना लोकप्रिय बनाया (रायटर के नुकसान के लिए)।
हालांकि मैं आपकी विधि या आरटीडी का उपयोग करने के बारे में सोचूंगा।
एक्सेल डीएनए में अपने सभी काम के लिए धन्यवाद
पूरा होने पर बीडीएच() सेल (0,0) में क्या होता है, एक मूल्य या सूत्र? – Govert
यदि आप सीएसी 40 इंडेक्स '= बीडीएच (" सीएसी इंडेक्स ";" पीएक्स_LAST ";" 20/05/2010 ";" 20/05/2010 "का इतिहास चाहते हैं;" 20/05/2012 "), आपके पास सेल (0,0) एक मान और सूत्र में = बीडीएच ("सीएसी इंडेक्स"; "पीएक्स_एलएसटी"; "20/05/2010"; "20/05/2012"; "कोल्स = 2; पंक्तियां = 478") '20/तो अपने समारोह में सिर्फ वापस लिखें - 05/2010 \t 3432,52 21/05/2010 \t 3430,74 .... ' बीडीएच छोड़कर जब अपने पत्र में डेटा existeing – Farandole
ठीक डेटा ओवरराइड Excel के सभी मानक का सम्मान सेल (0,0) के लिए एक संशोधित सूत्र, और फ़ंक्शन को उस मान को वापस करने के लिए संशोधित पैरामीटर का पता लगाएं, जिसे आप वहां प्रदर्शित करना चाहते हैं। मुझे लगता है कि यह बीडीएच करता है जब यह अंतिम तर्क के रूप में "cols = 2; पंक्तियों = 478" को देखता है। – Govert