[]
        
(Showing Draft Content)

公式计算

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");

结果如下图所示:

image

示例二:区域公式

执行以下代码,通过 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");

结果如下图所示:

image

示例三:动态数组公式

执行以下代码,批量计算 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");

结果如下图所示:

image