【问题标题】:Octave: Unable to pass optional arguments into VBA function (when adding excel sheets via COM server)Octave:无法将可选参数传递给 VBA 函数(通过 COM 服务器添加 excel 表时)
【发布时间】:2021-02-23 04:39:21
【问题描述】:

我正在尝试将工作表添加到 Excel 文件中。

应该相当简单;但是,下面的最小工作示例在尝试使用空括号跳过可选参数时失败。 (这不正确吗?Source 1Source 2

clc
clear

% if COM error occurs, excel process remains open.
% use task manager to end process, else 'a.xlsx' file remains "in use".

srvr = actxserver('excel.application');
wbks = srvr.workbooks;

pth  = fullfile(pwd, 'a.xlsx');

if ~exist(pth, 'file')

  wbk = wbks.add;
  wbk.activate;
  wbk.saveAs( pth );
  wbk.close;

end

wbk = wbks.open( pth, 0, false );
wbk.activate;

wshts    = wbk.worksheets;

shts     = wbk.sheets;

wsht     = wshts.item(1);
wsht.activate;

sht      = shts.item(1);

wsht.select(true);
sht.select(true);

%{
https://docs.microsoft.com/en-us/office/vba/api/excel.sheets.add
https://docs.microsoft.com/en-us/office/vba/api/excel.worksheets.add
%}

shts.add(sht);     % functions
shts.add(wsht);    % functions

shts.add([],sht);  % fails
shts.add([],wsht); % fails


shts.count

wbk.save;

srvr.quit;

这是错误:

error: com_invoke: property/method invocation on the COM object failed with error `0x800a03ec' - Z
error: called from
    trash at line 46 column 1

请注意,add 在跳过第一个输入之前一直有效。方括号是跳过输入的错误方法吗?

Original source.

我也在Octave forum发布了这个。

【问题讨论】:

  • 这不是关于“复杂化”本身:p,我只是知道如果该类是“旧式”,那么“点访问”语法实际上是一种实现最重要的是(因为它不是旧样式类中的“自然”访问样式),并且当像这样执行多个访问时,有时实现可能会出现错误。可能值得尝试“普通”界面,即调用此处指定的“调用”命令:octave.sourceforge.io/windows/package_doc/…
  • 至于错误是否是由于默认参数引起的,以及这是否是正确的语法:我无法亲自测试,因为我不在windows上,但是包的源代码似乎建议a)是的,您收到错误的原因与被调用的内容有关,大概是默认参数(参见windows-1.6.0/rc/__COM__.cc:887)和b)理论上当传递给 com 接口时,一个空矩阵被转换为一个“空”对象(参见 windows-1.6.0/rc/__COM__.cc:806)。传递空输入会触发默认参数似乎是合理的,但是......
  • 点语法只是调用来自windows 包的com_invoke 命令,但我对使用完整编写的命令有类似的想法,我可以确认我测试过它并且它提供了相同的结果. invoke 也提供相同的输出。
  • 八度论坛确定了可能的罪魁祸首。将我推荐给错误报告论坛。 windows 包创建者通知。将错误报告更改为功能请求。提交的更改。将出现在下一个八度更新中。感谢您的帮助。如果您发布 - 这是一个错误,请报告它,答案是您的:j

标签: excel octave activex


【解决方案1】:

根据问题下的cmets,
这是一个错误,由 OP 和 has been reportedfixed in the development branch 提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 2021-05-20
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2022-12-10
    • 1970-01-01
    相关资源
    最近更新 更多