代码之家  ›  专栏  ›  技术社区  ›  Cole Pratt

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

  •  1
  • Cole Pratt  · 技术社区  · 7 月前

    我正在使用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();
    
    1 回复  |  直到 7 月前
        1
  •  0
  •   Wolfie Radu Stefan    7 月前

    您可以选择 '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 ,