在Matlab中使用Excel的用户定义函数时出错

可能重复:
Excel加载错误#NAME?

我认为这是对我之前报告的有关Excel中用户定义函数的问题的后续查询。

当手动使用时,我可以在Excel中使用该函数,但是当我使用xlswrite写入一个使用Matlab的excel文件时,会出现错误#NAME?

手动使用该功能

我附上手动input和通过Matlab使用该function时的屏幕截图。

在Matlab中使用xlswrite

谢谢

编辑:

非常感谢。 我已经将VBA函数存储为Excel插件:

C:\用户\pipe理\应用程序数据\漫游\微软\加载项

这里是我看到有关在自动化中使用Excel加载项时未加载:

http://www.excelforum.com/excel-programming/472145-calling-excel-macro-from-vb-6-app-problem.html

我在这里附上chi_squared()的代码片段:

 Function Chi_Squared(act, exp, Optional df) 

这是我如何写在Matlab中的Excel文件:

Formula_chisqr = {['= chi_squared(''O2:O22'','M2:22'')']};

[status,message] = xlswrite1(ExcelFilename,Formula_chisqr,sheetname,Location_Agg);

我也尝试给出完整的pathbuild议。 但它没有工作。

谢谢

您必须指定UDF定义的工作簿。 即使你的function是你的PERSONAL.XLSB文件。 只有在您使用UDF的同一个文件中定义UDF时,才不必这样做。

例如,

 ='myFunctions.xlsb'!chi_squired(O2:O21,P2:P21) 

如果myFunctions.xlsb未打开,则可能需要指定文件的完整path。

如果您希望能够在不指定文件名的情况下在任何文件中调用UDF,则需要将该文件保存为加载项,然后在Options - Add-ins - Manage Add-ins启用它。


另一个想法是:当你使用XLSWRITE提供扩展名为XLSX的文件名时,如test.xlsx,而不仅仅是test 。 默认情况下,MATLAB以旧格式保存XLS扩展文件。 它看起来像在较新版本的Excel(2007/2010)中打开这样的文件时,兼容模式不允许运行macros或UDF。

当您作为COM服务器打开Excel时,默认情况下不加载UDF的和加载项。 因此,如果您想使用Excel文件的加载项,则需要先加载加载项。

这里是Matlab中的小代码片断,它在打开Excel文件之前加载加载项。

 Excel = actxserver ('Excel.Application'); Excel.Workbooks.Open('C:\YourAddInFolder\AddInNameWithExtension'); Excel.Workbooks.Item('AddInNameWithExtension').RunAutoMacros(1); File='C:\YourFileFolder\FileName'; if ~exist(File,'file') ExcelWorkbook = Excel.Workbooks.Add; ExcelWorkbook.SaveAs(File,1); ExcelWorkbook.Close(false); end Excel.Workbooks.Open(File); 

来源: Mathworks