Tag: excel dna

如何使用ExcelDNA插入相对单元格的公式?

我正在寻找写一个公式,如“= SUM(A1,B1)”使用ExcelDNA的单元格。 我目前能够以“= SUM(R1C1,R1C2)”的forms输出绝对引用,导致公式输出为“= SUM($ A $ 1,$ B $ 1)”: XlCall.Excel(XlCall.xlcFormula, "=SUM(R1C1,R1C2)"); 当我使用相对引用来尝试这个调用时: XlCall.Excel(XlCall.xlcFormula, "=SUM(A1,B1)"); Excel报告在调用公式时发现了一个问题。 是否有可能将此输出作为相对引用“= SUM(A1,B1)”?

ExcelDNA RTD不会更新新值,除非手动更改

我在…\Dsitrbution\Samples\RTD\使用名为TestRTD.dna的曲奇cookiesexcelDNA解决scheme。 我将GetEurOnd()扩充为: public static object getTestObject(String arg){ return GetTestItem(arg); } GetTestItem()保持不变。 我的XML格式如下: <?xml version="1.0" encoding="utf-8"?> <ISIN> <US05574LFY92> <ID_ISIN>US05574LFY92</ID_ISIN> <A>40</A> <B>100.089004516602</B> <C>11:22:48.000</C> </US05574LFY92> </ISIN> 所以我的公式在excel中看起来像这样: =getTestObject("ISIN/US002799AM62/A") 其中返回40 。 大! 现在,我正在运行代码,使用以下方法来更新xml中的值: using (XmlWriter writer = XmlWriter.Create(recordPath)) { writer.WriteStartDocument(); writer.WriteStartElement("ISIN"); foreach (rtTrace.dataObj d in lines) { writer.WriteStartElement(d.ID_ISIN); writer.WriteElementString("ID_ISIN", d.ID_ISIN); writer.WriteElementString("A", dA); writer.WriteElementString("B", dB); writer.WriteElementString("C", dC); if (!tmp.ContainsKey(d.ID_ISIN)) { […]

包含C ++ / CLI库的ExcelDnaPack.exe

我用ExcelDNA创build一个Excel插件,使用ExcelDnaPack.exe打包成一个单一的xll。 它工作得很好,直到我添加一个C ++ / CLI项目(称为CPPLibrary.dll)创build一个dll的引用当我打包CPPLibrary.dll时,外挂程序在运行时抱怨,它无法find该DLL。 如果我离开CPPLibrary.dll解压,只是复制它在-packed.xll一切工作的目录。 有没有办法将C ++ / CLI项目成功打包到ExcelDNa插件中? 谢谢。

Excel C API相当于Interop Range.Value在C#

试图找出如何读取引用的内容,并获得相同的结果和Interop / COM的Range.Value …即返回的对象[,]包含string,date时间和双打。 我正在使用ExcelDNA(和底层的XlCall.Excel调用C API)和两个… ExcelReference.GetValue()和XlCall.Excel( XlCall.xlfDeref, reference ) 两者都返回等同于Interop / COM的Range.Value2的对象[,] …即返回的对象[,]仅包含string和双精度。 这个问题是date返回为double,我没有办法确定值是否应该是一个double或DateTime 。

将.net控件附加到没有VSTO(但Excel-DNA)的工作表

我正在尝试做一些我不太确定的事情。 我想使用一个.net第三方库,提供良好的Winform图表控件,以replaceExcel工作表中的一些(非常复杂和丑陋的)VBA生成的图表。 我正在使用Excel-DNA(这是很棒的顺便说一句),我设法做了各种各样的事情,比如以同步和asynchronous方式显示Winform窗体(感谢https://github.com/Ron-Ldn / DotNetRefEdit ) 到目前为止,当我激活一个特定的工作表时,我设法让我的非模态窗体显示出来,并且通过设置它的parent和topMost属性,它具有预期的行为。 但放置它是一个真正的痛苦(不同的屏幕尺寸),我想知道是否有办法正确做到这一点 所以这里的问题是:我可以以某种方式附加一个.Net窗体或一个自定义控件到一个工作表,甚至可以把它定位到一个特定的单元格? 它必须是非模态的,只有当我们在特定的表单上时才会显示。 我知道VSTO可以将控件添加到工作表,但我不想使用VSTO。 我也知道,我可以创build自己的ActiveX控件,并将其注册,然后将其放置在Excel中,就像我使用另一个button控件一样,但是根据我所读的内容,这似乎很危险 感谢您的所有想法或build议

如何在C#VSTO for Excel中使用RegisterXLL方法

我已经使用ExcelDNA创build了一个xll插件,以便于用C#编写。 我还有一个VSTO,我希望VSTO能够注册xll文件,以便在用户使用VSTO插件的时候可以使用自定义函数。 这是在Addin启动方法中编写的内容: Application.RegisterXLL(@"SMPXLL.xll"); 这将工作,如果我写的.xll文件的绝对地址。 但是,我希望它是一个相对的地址。 我只是不知道该文件是相对于什么。

ExcelDNA评估公式返回自定义UDF的ExcelErrorName

我正在使用ExcelDNA在C#中编写自定义UDF,但这似乎是Excel和公式评估的一个普遍问题。 我唯一的问题:我做错了什么(可能是错误的UDF定义),或者这是Excel的问题吗? 感谢您的帮助。 ================================================== ======================= UDF 比方说,我定义一个这样的UDF: [ExcelFunction(IsMacroType = true, Name = "MyTest")] public static string MyTest() { return "MyTest"; } 加工 以下公式评估工作正常(结果“MyTest”): var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest()"); 不工作 鉴于此评估不起作用(结果将是“ExcelErrorName”): var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "CONCAT(MyTest(); MyTest())"); 我尝试了几件事,并认识到可以创build任意数量的UDF,并将它们嵌套在一起。 但只要您将任意两个(或更多)自己的UDF作为parameter passing给任何其他函数,Excel将无法评估公式。 我也尝试使用Excel的互操作方法返回相应的COM错误: var app = ExcelDnaUtil.Application as Application; var result = app.Evaluate("CONCAT(MyTest(), MyTest())"); 例子 加工 var evaluation […]

如何在ExcelDNA XLL UDF中处理Excel数组公式

我真的很难理解如何让我的UDF作为数组公式input。 我已经通过各种职位看了答案,但我认为我的理解必须有一个差距。 以ExcelDNA教程 double MultiplyThem(double x,double y)为例进行说明。 如果我select一个单元格范围,并input{= MultiplyThem({1; 2; 3; 4},5)}作为数组公式,我期望看到填充的选定列范围 5 10 15 20 不过,我得到的全是5秒。 此外,如果我的目标范围大于可用值的数量,我期望看到#N / A值,但是我再次看到值5。 我该如何处理数组公式? 我是否需要UDF重载,返回一个double [,],还是有一些内置的Excelfunction,将重复调用我的UDF与适当的数组值。

excel的函数应该是静态的,而COM对象方法不应该:重复“实现”真的有必要吗?

我有这个简单的function public double MYSUM(double x, double y) { return x + y; } 要在excel-dna中使用它,我可以 声明它是static并且在它之前是一个[ExcelFunction(Description = "blah")] ,这将最终导致一个excel函数。 非声明它的static和声明[ComVisible(true)]和[ClassInterface(ClassInterfaceType.AutoDual)]包含它的类将最终导致COM类在VBA中可调用 由于以前的情况是相互独立的static /非static要求,我得出结论,我不能一次编码( 即在一个地方) MYSUM并实现使它成为一个Excel函数以及一个COM对象的方法。 我错了吗 ? (当然,我可以做两个合适的声明,包装一个独特的double underlyingMYSUM(double, double)来完成这个工作,但是我仍然需要在两个地方写VBA和Excel的函数。

关于C# – Excel互操作的一点build议

下午好,费拉斯, 有一点小小的build议可以理解,我正在接近一个问题,我需要编写一个代理程序,它将进入一个特定的文件目录,打开一个Excel工作簿(已经存在),然后将改变两个单元格的值总是相同的单元格)是当前月份(在代理程序运行时)。 不幸的是,这是一个工作项目,所以VSTO是禁止的。 但是ExcelDNA,我以前用过。 我不是在寻找某个人“做我的工作”,但是对于在哪里寻找或者以前的例子,任何build议都会很棒。 我已经捅了我一个窟窿,如果有人能指点我一个好的方向,那就太棒了! 非常感激。