C#生成Excel,公式显示为静态文本

col17t5w  于 2022-12-14  发布在  C#
关注(0)|答案(2)|浏览(158)

我编写了一个C#程序,试图创建一个包含如下公式的Excel工作表

using Excel = Microsoft.Office.Interop.Excel;

// the details of the class
Excel.Workbook obook;
Excel.Application oexcel = new Excel.Application();
oexcel.Application.DisplayAlerts = false;
obook = oexcel.Application.Workbooks.Add(Type.Missing);
Excel.Worksheet osheet;
osheet = (Excel.Worksheet)obook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);

// create arrray to store formula
string[,] excelarray3 = new string[sample1.Width * sample1.Height, 1];

int rowct=0;
// some logic here to define the value of rowct (i.e. row count in excel)

// using for loop to assign formula into the array i.e.
for (int i =0; i <= rowct; i++){
 excelarry3[i,0]= "AND( A" + (i+1).ToString() + ">=AA1,A"+ (i+1).ToString() + "<=AB1,B"+ (i+1).ToString() + ">=AB1)";

}

// then assign value to excel
Excel.Range range3 = osheet.Range[osheet.Cells[2, 14], osheet.Cells[rowct + 1, 14]];
range3.Formula = excelarray3;

打开生成的工作表时,分配给第N列单元格的公式显示为文本,而不是公式的计算结果,如下图

所示
我根本没有定义单元格格式,而是将公式分别放在N、Q、T列中,不同的是Q、T列的公式是逐个分配到单元格中,而N列的公式是将字符串数组粘贴到excel区域中。
我很确定公式是工作的公式开始计算后,我选择的单元格,然后按回车键

8ljdwjyq

8ljdwjyq1#

查看Range.Formula成员的文档,我猜为this赋值需要一个以“="开头的字符串。
如果单元格包含公式,Formula属性将公式作为字符串返回,其格式与在编辑栏中显示的格式相同(包括等号)。
在构建公式字符串时尝试添加以下内容:

// using for loop to assign formula into the array i.e.
for (int i =0; i <= rowct; i++){
  excelarry3[i,0]= "=AND( A" + (i+1).ToString() + ">=AA1 ; A"+ (i+1).ToString() + "<=AB1 ; B"+ (i+1).ToString() + ">=AB1)";
}
gfttwv5a

gfttwv5a2#

我在这里找到了一个可行的解决方案:https://stackoverflow.com/a/16819757/10396046
简而言之,当透过.formula属性套用公式时,如果套用的范围是多个储存格,则公式会显示为静态文字。若要避免这种情况,请先在.value属性中套用公式(或公式数组),然后在.formula属性上指派.value属性。
示例:

myRange.value = "=my formula here"
myRange.formula = myRange.value

相关问题