Octave:无法通过 COM 函数保存 excel 文件(COM 错误 0x800a03ec)

Octave: Unable to save excel file via COM function (COM error 0x800a03ec)

在 Octave 中,此代码:

excel.server    = actxserver('excel.application');
excel.workbooks = excel.server.workbooks;
excel.workbook  = excel.workbooks.add;
% excel.workbook.activate;
excel.workbook.SaveAs("a.xls");

导致在以下位置创建文件:C:/Users/kando/Documents/a.xls,而:

excel.server    = actxserver('excel.application');
excel.workbooks = excel.server.workbooks;
excel.workbook  = excel.workbooks.add;
% excel.workbook.activate;
excel.workbook.SaveAs('C:/Users/kando/Documents/a.xls');

导致以下错误:

error: com_invoke: property/method invocation on the COM object failed with error `0x800a03ec' - lZ

因此我在指定绝对或相对路径时无法保存到任何地方。

(我是 运行 来自完全不同目录的代码,但 COM 服务器似乎只在用户的文档文件夹中运行。)

如何指定路径(以及如何在使用 COM 服务器功能时获得更详细的错误信息)?

您正在使用 unix 风格的路径分隔符(即正斜杠:/)。

与 unix 系统相反,形式上 windows 路径分隔符是反斜杠,即 \。因此,除非您确定要将其传递给的应用程序经过灵活编程以解释两者,否则您可能应该专门使用反斜杠以确保它在传递给 [时不会被视为 'malformed' 路径字符串 windows 申请。

换句话说,您应该使用 'C:\Users\kando\Documents\a.xls' 而不是 'C:/Users/kando/Documents/a.xls' 作为您的路径字符串。

更好的是,您应该使用 Octave 的 fullfile 工具,它会为您检测正确的文件分隔符(通过 filesep 函数),并从中构建一个 OS 兼容的路径字符串提供的部分,即

SaveFile = fullfile( 'C:', 'Users', 'kando', 'Documents', 'a.xls' );
excel.workbook.SaveAs( SaveFile );