[]
GcExcel 支持在代码中直接计算 Excel 公式,无需将公式写入单元格即可获得公式的计算结果。您可以使用GcExcel 提供的 IWorksheet 接口的 Evaluate2() 方法,将MS EXCEL支持的公式传入,由Evaluate2() 进行计算并返回一个Object对象。
标准公式:返回单个值。
区域公式:返回 IRange 区域对象。
动态数组公式:返回二维 Object 数组。
Evaluate() 方法同样可用于计算公式,但仅兼容 MS Excel 2019 及以前版本,不支持动态数组。推荐优先使用 Evaluate2() 以获得更全面的兼容性。
执行以下代码,用于统计 A2、A3、A4 三个单元格的数值总和,并将结果写入B6。
// 初始化工作薄。
var workbook = new Workbook();
var sheet = workbook.Worksheets[0];
// 设置数据。
sheet.Range["A1"].Value = "Type";
sheet.Range["B1"].Value = "Number";
sheet.Range["A2"].Value = "Football";
sheet.Range["A3"].Value = "Basketball";
sheet.Range["A4"].Value = "rugby";
sheet.Range["B2"].Value = 80;
sheet.Range["B3"].Value = 90;
sheet.Range["B4"].Value = 100;
// 设置表头样式。
var header = sheet.Range["A1:B1"];
header.Font.Bold = true;
header.HorizontalAlignment = HorizontalAlignment.Center;
// 计算球的总数,写入B6。
sheet.Range["A6"].Value = "Total";
var sum = sheet.Evaluate2("=SUM(B2:B4)");
sheet.Range["B6"].Value = sum;
sheet.Columns[0, 1].AutoFit();
// 保存 Excel 文件。
workbook.Save("Evaluate2forSingleValue.xlsx");结果如下图所示:

执行以下代码,通过 Evaluate2() 方法将 B3:C11 区域的内容复制到 E3:F11,此时返回的是 IRange 区域对象。
// 初始化工作薄。
var workbook = new GrapeCity.Documents.Excel.Workbook();
var sheet = workbook.Worksheets[0];
// 设置数据。
sheet.Name = "API Evaluate2";
sheet.Range["B3:C11"].Value = new object[,] {
{ "Product","Number" },
{ "Apple",5},
{ "Grape",6},
{ "Pear",10},
{ "Banana",50},
{ "Coconut",20},
{ "Strawberry",15},
{ "Orange",30},
{ "Pineapple",30} };
ITable table = sheet.Tables.Add(sheet.Range["B3:C11"], true);
// 使用 Evaluate2() 方法,传入区域公式,返回为 IRange 对象。
var rangeres = sheet.Evaluate2("=B3:C11");
sheet.Range["E3:F11"].Value = (rangeres as IRange).Value;
// 保存 Excel 文件。
workbook.Save("Evaluate2forIRange.xlsx");结果如下图所示:

执行以下代码,批量计算 B4:B11 区域每个文本的字符长度,把结果输出到 D4:D11 区域。
// 初始化工作薄。
var workbook = new GrapeCity.Documents.Excel.Workbook();
var sheet = workbook.Worksheets[0];
// 设置数据。
sheet.Range["B3:B11"].Value = new object[,] {
{ "Product" },
{ "Apple"},
{ "Grape"},
{ "Pear"},
{ "Banana"},
{ "Coconut"},
{ "Strawberry"},
{ "Orange"},
{ "Pineapple"} };
ITable table = sheet.Tables.Add(sheet.Range["B3:B11"], true);
ITable table1 = sheet.Tables.Add(sheet.Range["D3:D11"], true);
table.ConvertToRange();
table1.ConvertToRange();
sheet.Range["D3"].Value = "Evaluate2 results:";
sheet.Range["B:D"].AutoFit();
// 使用 Evaluate2() 方法计算B4:B11每个单元格的文本长度.并将结果数组输出到D4:D11。
var evaluateRes = sheet.Evaluate2("=LEN(B4:B11)");
sheet.Range["D4:D11"].Value = evaluateRes;
// 保存 Excel 文件。
workbook.Save("Evaluate2forDynamicArray.xlsx");结果如下图所示:
