如何使用 Gembox 在 C# 中将 Excel 函数转换为实际值
How to convert an Excel Function to an actual value in C# using Gembox
我们有一个自动提要,由我们的 ERP 系统使用 C# 和 GemBox 填充,生成一个 Excel 包含定价的文件。
我们有一个汇总定价的公式,但我们发现其他网络系统无法看到实际值,因为函数为 0 且仅在打开 Excel 文件时计算。我知道您可以复制并粘贴为值来获取函数的实际值,但这需要在代码中进行。我们是否需要在后端临时 table 来实现此目的?
如何将代码中的Excel函数转换为实际值?
https://www.gemboxsoftware.com/spreadsheet/examples/excel-cell-formula/206
如果文件曾经被打开过,那么单元格肯定应该有一个基于其上次计算的值,您可以从 ADO 中读取该值。如果文件从未被打开过(即以编程方式创建并插入函数到单元格中),那么这可能是问题的根本原因。
我不熟悉 GemBox,但从文档来看这似乎是受支持的。
GemBox.Spreadsheet支持单Excel单元格计算、Worksheet计算、全文件计算:
https://www.gemboxsoftware.com/spreadsheet/examples/excel-formula-calculation/901
using System;
using GemBox.Spreadsheet;
class Sample
{
[STAThread]
static void Main(string[] args)
{
// If using Professional version, put your serial key below.
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
ExcelFile ef = new ExcelFile();
ExcelWorksheet ws = ef.Worksheets.Add("Formula Calculation");
// Some formatting.
ExcelRow row = ws.Rows[0];
row.Style.Font.Weight = ExcelFont.BoldWeight;
ExcelColumn col = ws.Columns[0];
col.SetWidth(250, LengthUnit.Pixel);
col.Style.HorizontalAlignment = HorizontalAlignmentStyle.Left;
col = ws.Columns[1];
col.SetWidth(250, LengthUnit.Pixel);
col.Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
// Use first row for column headers.
ws.Cells["A1"].Value = "Formula";
ws.Cells["B1"].Value = "Calculated value";
// Enter some Excel formulas as text in first column.
ws.Cells["A2"].Value = "=1 + 1";
ws.Cells["A3"].Value = "=3 * (2 - 8)";
ws.Cells["A4"].Value = "=3 + ABS(B3)";
ws.Cells["A5"].Value = "=B4 > 15";
ws.Cells["A6"].Value = "=IF(B5, \"Hello world\", \"World hello\")";
ws.Cells["A7"].Value = "=B6 & \" example\"";
ws.Cells["A8"].Value = "=CODE(RIGHT(B7))";
ws.Cells["A9"].Value = "=POWER(B8, 3) * 0.45%";
ws.Cells["A10"].Value = "=SIGN(B9)";
ws.Cells["A11"].Value = "=SUM(B2:B10)";
// Set text from first column as second row cell's formula.
int rowIndex = 1;
while (ws.Cells[rowIndex, 0].ValueType != CellValueType.Null)
ws.Cells[rowIndex, 1].Formula = ws.Cells[rowIndex++, 0].StringValue;
// GemBox.Spreadsheet supports single Excel cell calculation, ...
ws.Cells["B2"].Calculate();
// ... Excel worksheet calculation,
ws.Calculate();
// ... and whole Excel file calculation.
ws.Parent.Calculate();
ef.Save("Formula Calculation.xlsx");
}
}
我们有一个自动提要,由我们的 ERP 系统使用 C# 和 GemBox 填充,生成一个 Excel 包含定价的文件。
我们有一个汇总定价的公式,但我们发现其他网络系统无法看到实际值,因为函数为 0 且仅在打开 Excel 文件时计算。我知道您可以复制并粘贴为值来获取函数的实际值,但这需要在代码中进行。我们是否需要在后端临时 table 来实现此目的?
如何将代码中的Excel函数转换为实际值?
https://www.gemboxsoftware.com/spreadsheet/examples/excel-cell-formula/206
如果文件曾经被打开过,那么单元格肯定应该有一个基于其上次计算的值,您可以从 ADO 中读取该值。如果文件从未被打开过(即以编程方式创建并插入函数到单元格中),那么这可能是问题的根本原因。
我不熟悉 GemBox,但从文档来看这似乎是受支持的。
GemBox.Spreadsheet支持单Excel单元格计算、Worksheet计算、全文件计算:
https://www.gemboxsoftware.com/spreadsheet/examples/excel-formula-calculation/901
using System;
using GemBox.Spreadsheet;
class Sample
{
[STAThread]
static void Main(string[] args)
{
// If using Professional version, put your serial key below.
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
ExcelFile ef = new ExcelFile();
ExcelWorksheet ws = ef.Worksheets.Add("Formula Calculation");
// Some formatting.
ExcelRow row = ws.Rows[0];
row.Style.Font.Weight = ExcelFont.BoldWeight;
ExcelColumn col = ws.Columns[0];
col.SetWidth(250, LengthUnit.Pixel);
col.Style.HorizontalAlignment = HorizontalAlignmentStyle.Left;
col = ws.Columns[1];
col.SetWidth(250, LengthUnit.Pixel);
col.Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
// Use first row for column headers.
ws.Cells["A1"].Value = "Formula";
ws.Cells["B1"].Value = "Calculated value";
// Enter some Excel formulas as text in first column.
ws.Cells["A2"].Value = "=1 + 1";
ws.Cells["A3"].Value = "=3 * (2 - 8)";
ws.Cells["A4"].Value = "=3 + ABS(B3)";
ws.Cells["A5"].Value = "=B4 > 15";
ws.Cells["A6"].Value = "=IF(B5, \"Hello world\", \"World hello\")";
ws.Cells["A7"].Value = "=B6 & \" example\"";
ws.Cells["A8"].Value = "=CODE(RIGHT(B7))";
ws.Cells["A9"].Value = "=POWER(B8, 3) * 0.45%";
ws.Cells["A10"].Value = "=SIGN(B9)";
ws.Cells["A11"].Value = "=SUM(B2:B10)";
// Set text from first column as second row cell's formula.
int rowIndex = 1;
while (ws.Cells[rowIndex, 0].ValueType != CellValueType.Null)
ws.Cells[rowIndex, 1].Formula = ws.Cells[rowIndex++, 0].StringValue;
// GemBox.Spreadsheet supports single Excel cell calculation, ...
ws.Cells["B2"].Calculate();
// ... Excel worksheet calculation,
ws.Calculate();
// ... and whole Excel file calculation.
ws.Parent.Calculate();
ef.Save("Formula Calculation.xlsx");
}
}