代码之家  ›  专栏  ›  技术社区  ›  Tig7r

如何使用Gembox将Excel函数转换为C中的实际值

  •  0
  • Tig7r  · 技术社区  · 6 年前

    我们有一个自动化的feed,它由我们的ERP系统使用C#和GemBox填充,GemBox生成一个带有定价的Excel文件。

    如何将代码中的Excel函数转换为实际值?

    https://www.gemboxsoftware.com/spreadsheet/examples/excel-cell-formula/206

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Zemens    6 年前

    如果文件已打开,则单元格绝对应具有基于其上次计算的值,您可以从ADO读取该值。如果文件从未打开过(即,使用插入单元格的函数以编程方式创建),则这可能是问题的根本原因。

    我不熟悉GemBox,但从文档来看,它似乎是受支持的。

    电子表格支持单个Excel单元格计算、工作表计算和整个文件计算:

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