Octave: 无法通过 COM 功能保存 Excel 文件(COM 错误 0x800a03ec)

问题描述 投票:0回答:2

在 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 服务器功能时获取更详细的错误信息)?

excel com octave
2个回答
3
投票

您正在使用 Unix 风格的路径分隔符(即正斜杠:

/
)。

与unix系统相反,windows路径分隔符正式是反斜杠,即

\
。因此,除非您确定要传递的应用程序可以灵活地编程以便解释两者,否则您应该专门使用反斜杠来确保它在传递给 Windows 应用程序时不会被视为“格式错误”的路径字符串。

换句话说,您应该使用

'C:\Users\kando\Documents\a.xls'
而不是
'C:/Users/kando/Documents/a.xls'
作为路径字符串。

更好的是,您应该使用 Octave 的

fullfile
工具,它会为您检测正确的文件分隔符(通过
filesep
函数),并从提供的部分构建与操作系统兼容的路径字符串,即

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

0
投票

哦,霍莉莫莉。可以用斜杠打开,但只能用除数书写!

© www.soinside.com 2019 - 2024. All rights reserved.