我正在使用 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();
您可以选择
'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
字符串