Spreadsheetgear用它的结果替换公式

时间:2018-03-10 08:11:37

标签: c# .net spreadsheetgear

我正在使用spreadsheetgear 2012进行c#.net excel操作。我在一些细胞中有一些excel公式。现在我想用评估的数字替换excel中的公式。有什么特别的方法可以做到这一点吗?尝试搜索电子表格论坛但没有帮助。

1 个答案:

答案 0 :(得分:0)

这可以通过几种不同的方式实现:

  • 将IRange。Value设置为自己的所需范围。 IRange。Formula包含一个单元格的公式和IRange。Value计算出的值。将IRange。Value设置为自身将有效地从单元格中删除公式并仅保留值。这将适用于单个单元格以及多单元格区域(因为IRange。Value可以返回对象[,]数组,也可以从对象[,]数组中设置)。
  • 使用IRange。Copy(...)方法,在所需范围内使用PasteType。值选项,相当于执行选择性粘贴> Microsoft Excel中的值。

以下是这些方法的示例:

using SpreadsheetGear;
...

// Create workbook and some local variables.
IWorkbook workbook = Factory.GetWorkbook();
IWorksheet worksheet = workbook.ActiveWorksheet;
IRange cells = worksheet.Cells;

// EXAMPLE 1 - IRange.Value with single cell
// Set A1 to a formula and output some info about A1's contents.
IRange a1 = cells["A1"];
a1.Formula = "=ROUND(RAND(),2)";
Console.WriteLine($"{a1.Address}: HasFormula={a1.HasFormula}, Formula='{a1.Formula}', Value={a1.Value}");
// OUTPUT: $A$1: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.69
// Set IRange.Value to itself
a1.Value = a1.Value;
Console.WriteLine($"{a1.Address}: HasFormula={a1.HasFormula}, Formula='{a1.Formula}', Value={a1.Value}");
// OUTPUT: $A$1: HasFormula=False, Formula='0.69', Value=0.69


// EXAMPLE 2 - IRange.Value with multiple cells
// Works on multiple cells since IRange.Value will return an object[,]
// array for a range representing multiple cells.
IRange b1b3 = cells["B1:B3"];
b1b3.Formula = "=ROUND(RAND(),2)";
foreach (IRange cell in b1b3)
    Console.WriteLine($"{cell.Address}: HasFormula={cell.HasFormula}, Formula='{cell.Formula}', Value={cell.Value}");
// OUTPUT:
// $B$1: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.81
// $B$2: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.55
// $B$3: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.24

// Set IRange.Value to itself (2D object[,] used)
b1b3.Value = b1b3.Value;
foreach (IRange cell in b1b3)
    Console.WriteLine($"{cell.Address}: HasFormula={cell.HasFormula}, Formula='{cell.Formula}', Value={cell.Value}");
// OUTPUT:
// $B$1: HasFormula=False, Formula='0.81', Value=0.81
// $B$2: HasFormula=False, Formula='0.55', Value=0.55
// $B$3: HasFormula=False, Formula='0.24', Value=0.24


// EXAMPLE 3 - IRange.Copy() with PasteType.Values option
IRange c1c2 = cells["C1:C2"];
c1c2.Formula = "=ROUND(RAND(),2)";
foreach (IRange cell in c1c2)
    Console.WriteLine($"{cell.Address}: HasFormula={cell.HasFormula}, Formula='{cell.Formula}', Value={cell.Value}");
// OUTPUT:
// $C$1: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.04
// $C$2: HasFormula=True, Formula='=ROUND(RAND(),2)', Value=0.14

c1c2.Copy(c1c2, PasteType.Values, PasteOperation.None, false, false);
foreach (IRange cell in c1c2)
    Console.WriteLine($"{cell.Address}: HasFormula={cell.HasFormula}, Formula='{cell.Formula}', Value={cell.Value}");
// OUTPUT:
// $C$1: HasFormula=False, Formula='0.04', Value=0.04
// $C$2: HasFormula=False, Formula='0.14', Value=0.14