Tag: xll

在Excel中以编程方式制作图表

我有一个XLL包装Excel的C API的帮助下做的XLL。 我希望能够使用XLL中某些对象中存储的数据在Excel中编程生成图表。 这是可能的,如果是的话,最好的办法是什么? 我相信一个办法就是通过COM,但是要尽可能地避免它。 目前在Windows 7和VS2010上使用Excel 2007。 编辑:一般什么API不擅长暴露,支持程序化图表? 任何人都可以指向我的一些文件? 编辑2:由于我没有得到任何点击,我会尝试给我一点点更多的细节,我想要做的事情。 我想从Excel调用一个公式像= PlotCurve(“CurvreHandle”),我想获得存储在内存和XLL(非托pipe代码)拥有的曲线对象,从中获取一些数据,并显示在某个图表的某处在PlotCurve所在的工作表上。 从目前为止我所能够看到的,XLW封装的C API不支持第二部分的问题,所以我需要去COM(我不知道如何与已经运行的C API)或一些.net互操作,我也不知道该怎么做。 如果有人做过这样的事,或者知道安全稳定的做法,我很乐意听到。 谢谢

为什么我的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 […]

XLL和vba函数名称冲突导致永久#NAME? 错误

在Excel 2003 SP2中 XLL定义了xll_function如果我叫它,它工作正常。 定义了一个名字相同的VBA函数:它优先于XLL的xll_function。 VBA函数被删除,#NAME? 出现并永远停留。 在另一个excel版本或安全模式下保存工作簿是无济于事的。 即使VBAfunction已经消失,Excel仍然记得看VBA。 任何build议在做什么来解决这个问题?

如何从XLL UDF返回一个数组

我试图写一个Excel的数组构造函数作为使用C API的工作表函数。 目标: =array_cons(1, 2, 3) => {1, 2, 3} 但是,我没有正确初始化XLOPER12。 在Excel中,我的函数当前返回#NUM 。 我正在采取参数列表,并通过macros将其打包到vargs数组中,然后尝试返回提供的数组部分。 #include <windows.h> #include <xlcall.h> #include <framewrk.h> #include <boost/preprocessor.hpp> #define VARG_COUNT 250 #define VARG_FORMAT(Z, A, B) B##A, #define VARG_DEF_LIST(N) BOOST_PP_REPEAT(N, VARG_FORMAT, LPXLOPER12 varg) \ LPXLOPER12 varg##N #define VARG_ARRAY(N) { BOOST_PP_REPEAT(N, VARG_FORMAT, varg) varg##N } #define GET_VARGS VARG_ARRAY(VARG_COUNT) __declspec(dllexport) LPXLOPER12 WINAPI array_cons(VARG_DEF_LIST(VARG_COUNT)) { […]

Excel DNA – 我可以避免一起做一个regasm吗?

我正在尝试评估Excel DNA以在我的Excel插件中使用它。 我使用C#函数(.NET 4.0),并希望从Excel中调用这些函数。 我感兴趣的原因是,我的插件的用户是非pipe理员,因此将是一个突破,如果我可以find一个解决scheme,不要在我的.NET DLL的重做,让我的插件工作。 我明白,如果它像一个工作表函数(与简单的返回types和参数),如下所示: private string Add (int a, double b)我可以轻松地包装暴露他们使用excel dna。 另外,我明白,我也可以使用VBA中的Application.Run来调用这些简单的函数。 但是,如果我有一个复杂的types参与API,并希望从VBA使用这个,那么我是否需要regasm该汇编和types? 示例如下所示: private MyType AddLogic (myType1 A, myType2 B) 或者在Excel DNA中有任何方法,我也可以在VBA中使用这种types的函数,而不需要regasm或regsvr32? 感谢玛尼

从VBA调用一个xll UDF

我想从VBA中调用我的一个用户自定义函数。 我的用户定义函数在C ++中声明: XLOPER12*WINAPI HelloWorld()noexcept{ THROWS(); static XLOPER12 res=[](){ static std::array<wchar_t,13>str={ 11,'H','e','l','l','o',' ','W','o','r','l','d','\0'}; XLOPER12 tmp; tmp.xltype=xltypeStr; tmp.val.str=str.data(); return tmp;}(); return &res;} 这是一个真正的函数的简化版本,可以返回一个string或者一个双精度数组。 当然这里我只返回一个string,但是这限制了我的UDF的返回types到LPXLOPER12 。 我可以成功注册我的函数与xlfRegister指定一个pxTypeText "U$" 。 然后我可以从Excel中调用我的UDF: =HelloWorld() 它的工作原理! 如果我尝试从VBA调用我的function,如下所示: Sub macro_test() Dim hw As Variant hw = Application.Run("D:\Path\MyAddIn.xll!HelloWorld") End Sub 我从Application.run得到一个错误信息: 运行时错误“1004”:应用程序定义或对象定义的错误 如果我尝试从VBA调用我的function,如下所示: Private Declare PtrSafe Function HelloWorld Lib "C:\Path\MyAddIn.xll" () As Variant […]

为Windows 7/64位创buildXLL Excel加载项(在Windows XP / 32上交叉编译)

我不是一个熟练的Windows程序员,但是我创build并维护了多年来32位Windows XP / Excel的XLL加载项。 我现在想创build一个Windows 7/64位版本,并遇到麻烦 – 我甚至不能让Generic.xll的例子工作。 这是我所做的最简单的版本 – 抱歉,这是漫长而迂腐的。 在我的Windows XP / 32计算机上,安装了Visual Studio 2010 Professional: 下载并安装了Microsoft Excel 2013 SDK。 开始菜单 – “打开Visual Studio x64交叉工具命令提示符(2010)” SET TYPE = RELEASE SET PLATFORM = x64 //我认为这是预设的 cd C:\ 2013 Office System Developer Resources \ Excel2013XLLSDK \ SAMPLES \ FRAMEWRK nmake //没有错误 cd C:\ 2013 Office […]

为所有的Excel版本构build一个加载项和UDF

一个数据提供者想要开发一个Excel加载项,这些都是要求: 1)它可以安装在桌面上。 它在function区中添加了一个菜单和button,还提供了一些特定的function(获取实时数据,如彭博function)。 2)插件应该在Excel 2007,2010,2013和2016中工作。 问题是应该使用哪种技术来创build这个加载项。 这是我的一些想法: 1)Excel的JavaScript API不适用,因为它不适用于Excel 2007,2010。 2)VSTO。 有谁知道VSTO插件是否适用于Excel 2013和2016? ; 是否有可能build立一个适用于所有Excel 2007,2010,2013和2016的VSTO加载项? 3)Excel的C API。 看来C的Excel for Excel是用来构buildXLL的。 有谁知道如果Excel的C API可以build立菜单和button?

在xll中通过xlcFormatNumber设置Excel数字格式

我试图设置一个单元格的数字格式,但对xlcFormatNumber的调用失败,离开单元格的数字格式为“常规”。 我可以使用xlSet成功设置单元格的值。 XLOPER xRet; XLOPER xRef; //try to set the format of cell A1 xRef.xltype = xltypeSRef; xRef.val.sref.count = 1; xRef.val.sref.ref.rwFirst = 0; xRef.val.sref.ref.rwLast = 0; xRef.val.sref.ref.colFirst = 0; xRef.val.sref.ref.colLast = 0; XLOPER xFormat; xFormat.xltype = xltypeStr; xFormat.val.str = "\4#.00"; //I've tried various formats Excel4( xlcFormatNumber, &xRet, 2, (LPXLOPER)&xRef, (LPXLOPER)&xFormat); 我还没有设法find任何有关这个命令的使用文件。 任何帮助在这里将不胜感激。

从Excel-DNA构build的Excel .XLL文件中解压内容

我不知道你是否知道excel-dna项目,这是一个帮助将.net程序集和语言集成到excel插件中的项目。 我的问题是,我想从一个xll文件(excel-dna能够打包xll内的资源)解压缩DLL。 我已经下载了excel-dna源代码,并且已经在源代码中写下了这个基础: string xlllib = @"C:\pathtomyxllfile\myaddin.xll"; string xlloutput = @"C:\pathtomyxllfile\myaddin.dll"; var hModule = ResourceHelper.LoadLibrary(xlllib); var content = ResourceHelper.LoadResourceBytes(hModule, "ASSEMBLY_LZMA", "MYASSEMBLYNAME"); using (BinaryWriter binWriter = new BinaryWriter(File.Open(xlloutput, FileMode.Create))) { binWriter.Write(content); } 但它不起作用。 任何人有一个想法,从xll解压DLL? 提前致谢,