Tag: excel dna

检查macros样式的Excel UDF中的数组公式

我正在使用Excel-DNA在Excel和NetOffice中创buildUDF以进行与版本无关的自动化调用。 在一个macrostypes的函数中,我可以使用以下命令从单元格中获取公式: ExcelReference cellRef; // of course in reality this is assigned var formula = (string)this.excelCall(XlCall.xlfGetFormula, cellRef); 此外,虽然,我想知道这是否是数组公式的一部分,如果是的话。 使用Excel自动化,我可以使用类似于: Range("A1").HasArray Range("A1").CurrentArray.Address 但是,Microsoft拒绝在UDF调用中使用自动化: https : //support.microsoft.com/en-us/kb/301443 那么,有没有办法通过C API来获取HasArray和CurrentArray属性,或者有没有人知道它是否可以(在UDF声明为macrostypes的上下文中)使用自动化?

我可以在Excel DNA项目中使用Microsoft.Office.Tools.Excel,还是有另一种方法来完成数据绑定表?

我有在Excel插件的VSTO版本中工作的代码 Microsoft.Office.Tools.Excel.ListObject lo = Globals.ThisAddIn.VSTOWorksheet.Controls.AddListObject(r, "lo1"); lo.AutoSetDataBoundColumnHeaders = true; lo.DataSource = dt; //some DataTable 我正在使用这个API,因为它的声明性数据绑定语法。 Excel.Interop API没有方法,如AutoSetDataBoundColumnHeaders .. 如果我能得到Microsoft.Office.Tools.Excel.ListObject导入,我将如何解决在Excel DNA中没有VSTO东西的情况下调用AddListObject的Controls集合? 任何解决scheme将是很好的,即使它涉及废除我的代码,但总的来说,我想知道什么时候使用Excel DNA内的哪个API来完成这个数据绑定的东西。

如何针对UsedRange剪辑ExcelReference?

我正在使用Excel-DNA在Excel中开发一些UDF。 从Excel传递到我的UDF的一个参数是一个范围。 使用特定范围时,UDF可正常工作,如“A1:C50”。 以下是我的函数定义的示例: [ExcelCommand()] public static object CalcSMA(object[,] range, int num_points) { … } 但是,如果传递整个列范围(例如“A:C”),则会出现“内存不足”错误。 我可以通过设置参数属性AllowReference = true来避免错误,并将参数types更改为对象,如下例所示: [ExcelCommand()] public static object CalcSMA([ExcelArgument("Range", AllowReference=true)]object range, int num_points) { ExcelReference xref = (ExcelReference)range; … } 但是现在我想知道UDF实际需要多less行。 我可以尝试迭代工作表中的所有行,但效率非常低。 有没有办法将ExcelReference(xref)剪辑到使用的范围? 我想避免使函数volatile(IsMacroType = true),但会这样做,如果需要的话。

如何引用UDF中的一系列单元格

c#,ExcelDNA,在我的UDF中,我想传递一系列单元格,MyUDF(A1:A2) 我尝试了MyUDF(object param1),如果我inputmyUDF(A1:A2),MyUDF永远不会被调用,我也试过MyUDF(string param1),MyUDF(string [] param1)都不起作用。 什么types的参数应该是? 谢谢

ExcelAsyncUtil.Observe – 在Excel中创build运行时钟

我正在尝试ExcelAsyncUtil.Observe函数。 我做了下面的代码,显示在Excel中运行的时钟。 它工作正常,但我不知道我在做什么。 两个问题: 我应该为observer.OnCompleted()和observer.OnError()添加function吗? 这些电话是做什么的? 我应该做什么在IDisposible类? 为什么呢? 这是我的示例代码: [ExcelFunction] public static object MyExcelTicker() { return ExcelAsyncUtil.Observe("MyExcelTicker", new object[] { }, TickerFunction()); } public static ExcelObservableSource TickerFunction() { ExcelObservableSource source = new ExcelObservableSource(() => new TickerObservable()); return source; } public class TickerObservable : IExcelObservable { public IDisposable Subscribe(IExcelObserver observer) { var timer = new System.Timers.Timer(); […]

打包的Excel插件不能正常工作使用Excel创buildDNA c#

我有一个使用Excel DNA c#创build的AddIn。 一切工作正常。 我打包了所需的.dna文件,我的dna文件如下 <DnaLibrary RuntimeVersion="v4.0" Language="C#"> <ExternalLibrary Path="ExcelAddInClient.dll" Pack="true"/> <ExternalLibrary Path="Newtonsoft.Json.dll" Pack="true"/> <ExternalLibrary Path="System.Net.Http.Formatting.dll" Pack="true"/> <ExternalLibrary Path="AuthenticationDll.dll" Pack="true"/> </DnaLibrary> 当我从发布文件夹中双击包装的文件,它工作正常。但是,如果我将该xll文件复制到其他位置,它不工作。它不显示任何错误,但它不显示所需的输出。 我不是为什么?

ExcelDna和独立的F#安装

我已经在Windows上下载了F#压缩分发(即,没有安装程序),使用ExcelDna时遇到了困难。 当我将FSharp.Core.dll和powerpack复制到ExcelDna文件(xxx.dna和xxx.xll)的目录中,并将代码用于dna文件(见下文)时,它不起作用是没有错误信息)。 <DnaLibrary Name="FSharp Sample" Language="F#"> <![CDATA[ namespace Foo module Bar = open ExcelDna.Integration let sayhello () = "Hello from F#" [<ExcelFunction(Category="FSharp Functions", Description="FSharp function to add numbers")>] let add xy = x + y let rec factorial = function | x when (x > 1.0) -> (floor x) * factorial (x – 1.0) | […]

自动填充使用一半的核心

我在Excel中自动填充一些列(一次一个)。 这些列使用我在ExcelDna中编写的UDF。 使用taskmanager,我注意到只有一半的内核正在使用。 Excel设置设置为“使用此计算机上的所有处理器”。 所以我不明白为什么只有一半的核心在使用。 思考?

我们可以将自定义对象从Excel传递到C#ExcelDNA吗?

我有一个对象: public class Shampoo { public string Name {get;set;} public string Id {get;set;} public string PriceRegion {get;set;} } 我可以通过Excel DNA将此对象传递给C#中的一个方法: C#方法是: public static string PassShampoo(Shampoo shampoo) { //Some Code… } 这是可能的从VBA通过Excel DNA的C#?

为什么我的XLL比我的UDF慢?

我一直试图通过使用XLL来加速macros,但是,对于UDF而言,使用XLL似乎要快得多。 有些代码分析的数据certificate了这一点 XLL时间为子Proc:模块1迭代11.64831秒 UDF时间为子Proc:模块1迭代4.25986秒 它发生在我已经转换的两个UDF上,因子慢了2倍或3倍。 例如,XLL函数是这样的: [ExcelFunction(Description="Joins cell values", Category="Example1")] public static object RangeJoin(object[,] cells) { List<string> list = new List<string>(); foreach (object o in cells){ if ( !(o is ExcelEmpty) ) list.Add(o.ToString()); } return string.Join(" ", list.ToArray()); } UDF函数是 Function RangeJoin(Rng As Range) As String Dim vArr As Variant Dim v As Variant vArr […]