使用 MATLAB Actxserver 时避免向 Excel 公式添加“隐式交集”符号

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

我正在使用 MATLAB Actxserver 生成 Excel 电子表格。该代码的一部分用于生成一个公式,用于确定列表中是否有任何值不同。 以下是 MATLAB 代码示例

c = cell(1,4);
c{4} = "=IF(AND(EXACT(A1:C1,A1)),0,1)"; 
writecell(c,'test2.xlsx','UseExcel',true);

但是,当我打开 Excel 文件时,它会将函数替换为

=IF(AND(EXACT(@A1:C1,A1)),0,1)

添加“@”符号会破坏该功能并导致单元格显示“#VALUE!”。如果我删除 Excel 中的“@”符号,该函数将按预期工作。

如何阻止 Excel 自动添加“隐式交集”符号?

我尝试在 MATLAB 中使用查找和替换函数,如下所示,但它没有解决问题。 “@”再次出现。

Excel = actxserver('excel.application');
WB = Excel.Workbooks.Open(oufFile,0,false);
WS = WB.Worksheets.Item(1);
WS.Range('A1:Z100').Replace("@","")
WB.Save();
WB.Close();
Excel.Quit();
matlab excel-formula
1个回答
0
投票

您可以选择

'UseExcel',false
,但随后您会遇到一个不同的问题,即除非您手动编辑单元格以确认其内容,否则公式不会计算。

看起来这主要是设置范围的

Value
Formula
属性时出现的问题,MATLAB 很可能通过 COM 接口使用
'UseExcel',true
在幕后执行此操作。

无论出于何种原因,Excel 都会自动添加 @ 符号来表示“隐式交集”,因为它试图“巧妙地”处理

EXACT
可以返回数组输出的事实。

要解决此问题,您可能必须设置

.Formula2
数据。我将把 COM 接口调用的详细信息留给您,但总的来说,您已经有了类似的东西来获取对打开工作簿的工作表引用(可以在具有不同调用的封闭工作簿上工作):

Excel = actxGetRunningServer('Excel.Application');
Workbook = Excel.Workbooks.Item(1);
Sheet = Workbook.Sheets.Item(1);

然后对于某些单元格

c

Sheet.Range('A1:D1').Formula2 = c;

您还可以编写一些函数来根据左上角单元格和

'A1:D1'
的大小为您生成
c

字符串
© www.soinside.com 2019 - 2024. All rights reserved.