Tag: xll

在C#中运行时创build一个Excel工作表函数(UDF)

是否有可能在C#中dynamic创build工作表函数,即不使用方法属性方法? 或者这只是使用XLL支持的东西? 我正在寻找的是从源中检索函数列表(以及参数)并注册这些函数。 这些函数只是作为一个服务器的调用,所以这些函数的内容不是什么大问题。 感谢您的投入!

从Excel加载相关的DLL

我们有一个库(XLL文件),我们通过Excel自动从C#代码通过RegisterXLL方法从networking驱动器加载到Excel。 最近我们切换到VS2010,现在,而不是我们的库单一的xll它需要加载msvcp100.dll和msvcr100.dll(我们看到它在依赖沃克)。 如果PC安装了VS2010就可以,那么这些文件位于C:\ WINDOWS \ system32 \文件夹中,但是对于普通用户来说则不是这样。 我们不能把这两个文件分发给他们。 如果我们把这些文件放到同一个networking文件夹中,它们将不会从那里加载。 有什么办法强制Excel加载我们的库时,同时加载这些文件?

拦截Excel打开文件

有没有办法通过COM插件拦截或覆盖Microsoft Excel的文件打开命令? 我想在Excel尝试打开工作簿之前处理文件,所以Application_WorkbookOpen太晚了。 理想情况下,它也应该在Excel文件被双击时触发。

如何编写一个Excel C加载项函数返回一个string到Excel没有内存泄漏?

我正在使用C ++编写Excel XLL插件,我希望我的函数使用预定义的XLOPER12将string返回给Excel。 正如我所说的,Excel要求函数返回一个指向内存的指针,然后使得浅拷贝消失,而不清除函数中分配的内存。 所以如果我写这样的东西: extern "C" LPXLOPER12 WINAPI strgen() { XLOPER12 res; res.xltype = xltypeString; res.val.str = (XCHAR*)malloc(2*sizeof(XCHAR)); res.val.str[0] = (XCHAR)1; res.val.str[1] = L"X"; return (LPXLOPER12)&xRes; } 但显然这会造成内存泄漏。 有人build议我可以将res声明为静态variables,但我不知道如何初始化它。 所有的build议都欢迎。 最好

尝试使用UDF .xll在HPC网格上并行化Excel

我正在寻找并行Excel计算HPC网格上,我使用Excel 2007,所以我试图通过在XLL的UDFmultithreading,因为它是唯一的方法(至less在2007年)。 我想在C#中编写XLL,因为这个线程暗示我可以使用exceldna 。 但我不明白我应该怎么multithreading。 在multithreading中,我是否必须在C#中重写所有的VBA函数? 我可以创build几个线程,每个线程调用一个VBAmacros?

从Visual Studiodebugging加载Excel插件xll

我创build了一个excel插件的debugging版本,让我们称之为myaddin.xll。 当我打开一个Excel的实例,并添加myaddin.xll它,我得到了预期的结果。 但是当我从Visual Studio环境中debugging时,myaddin.xll试图打开并给出“这个程序不能在DOS模式”错误。 对于我开发的其他Excel插件,我没有这个问题。 这个问题突然出现在这个特殊的插件中。 当某些东西丢失时,“dos模式…”错误通常会发生。 显然外挂没有任何缺失的组件,因为它在Excel中打开。 但是当我尝试从Visual Studio中打开时,某些组件会丢失。 我的问题是如何找出是什么导致错误,并修复它。 当我点击debuggingexcel打开,然后给出一个popup“你的文件myaddin.dll是不同的格式比指定的文件扩展名….”当我点击确定,popup我在电子表格中的垃圾字符。

XLL函数参数签名types

我用这个例子来构build使用C ++的XLL for Excel。 我创build了自己的function,它采取2双args和返回string: __declspec(dllexport) LPXLOPER12 WINAPI PTstate (double P, double T) { static XLOPER12 xResult; xResult.xltype = xltypeStr; debugPrintf("P = %d\n", P); debugPrintf("T = %d\n", T); Calculate(P, T); xResult.val.str = L"\013Calculated"; return(LPXLOPER12) &xResult; } function定义: { L"PTstate", // Function name/ordinal L"UBB", // Func signature type **U – XLOPER12, BB – P and T […]

XLL只适用于特定的Excel工作表,尽pipe完全合格的范围参数

我有一个XLL文件(使用xll.codeplex.com库)与下面的代码: xll_rootfinder(TCHAR* x, TCHAR* y, const double min, const double max) { #pragma XLLEXPORT try { ExcelX(xlcCalculateDocument); be = ExcelX(xlfTextref, OPERX(x), OPERX(true)); nav = ExcelX(xlfTextref, OPERX(y), OPERX(true)); typedef std::pair<double, double> Result; boost::uintmax_t max_iter=50; boost::math::tools::eps_tolerance<double> tol(5); Result r1 = boost::math::tools::toms748_solve(recalc, min, max, tol, max_iter); } 这个函数然后在VBA中重复调用。 参数x和y是范围地址,如“XX”!B42。 工作表名称是dynamic的。 VBA例程激活特定的工作表,然后使用该工作表上的XLL函数进行计算。 如果我手动运行VBA子版,在正确的工作表上启动,一切都将工作(直到它需要切换工作表)。 所以我不相信这是一个C ++的问题。 如果我从其他工作表中启动子工作表,Excel将在第一次XLL调用时立即崩溃: Call Application.Run("ROOTFINDER", PriceAddress, […]

Excel / C – 用数组获取input*

我正在处理一个简单的XLL插件,并试图用普通的double *(不是FP或OPER)来获取input,因为据我所知,Excel应该使用常规的C数据types。 我无法让它工作,经过多次修改,现在它只返回我最后一个单元格中的值。 我究竟做错了什么?\ static AddIn xai_array_try( "?xll_array_try", XLL_DOUBLE XLL_DOUBLE_, "ARRAY.TRY", "Array", "STL", "Test Sum Array." ); double WINAPI xll_array_try(const double *arr) { #pragma XLLEXPORT int i; double sum = 0; int size = 3; for (i = 0; i < size; ++i) { sum += arr[i]; } return sum; } 如果我将它作为一个FP或OPER,我可以然后将它传递给一个函数,将input作为数组?

XLL问题与xlfEvaluate

我有一个用XL20编写的非常简单的函数,使用VS2012就有这个问题。 我曾试着在MSDN和Steve Dalton的书中读过,我看不出我做错了什么。 棘手的一点是,我需要我的函数来读取工作表单元格中的值,而不是调用它的值。 该函数不带参数,并返回一个整数。 我已经将它声明为J#(#表示它可以按照Dalton的build议调用XLMfunction,尽pipe如此,我仍然会遇到同样的问题)。 我没有包括我的function的宣言来节省空间,但它很简单,我不认为这是问题的原因。 这第一个代码块工作正常。 我写的只是为了build立信心。 //This block works correctly. A trial copied from the old Excel 97 documentation XLOPER12 xlInput1, xlOutput2; /* Evaluate the string "2+3" */ xlInput1.xltype = xltypeStr; xlInput1.val.str = L"\0032+3"; //prefix with string length in Octal Excel12(xlfEvaluate, &xlOutput2, 1, (LPXLOPER12) &xlInput1); //works OK, and xlOutput2 contains 5 但是这第二块不起作用。 […]