3

我正在使用 Excel 互操作库来获取工作表并替换工作表中的值。我的工作表结构如下:

AE 列包含处理 FL 列中数据的公式 当我更新工作表时,我会清除 FL 中的内容并将任何公式留在 AE 中。然后我用新数据填充列 FL。

我需要 AE 列(任何行)中的公式扩展到我输入的新数据的全部范围。

例如,如果我将数据从 8 行扩展到 20 行,=sum(G1,G8)应该变成=sum(G1,G20)这样。有没有办法获得工作表中所有现有的公式?如何扩展公式的范围?

4

4 回答 4

6

在向单元格输入数据时,跟踪每个新单元格,然后将公式应用于该范围:

sheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount);
于 2011-04-01T10:53:25.103 回答
0

我有类似的问题,但使用 IF 公式。将其设置为公式属性不起作用。但是,如果设置为 FormulaLocal 则同样有效...

感谢微软 :)

顺便说一句:Formula 和 FormulaLocal 仅适用于 A1参考样式。对于 R1C1,您应该使用 FormulaR1C1 和 FormulaR1C1Local。

于 2012-09-11T05:58:54.997 回答
0

您可能必须将对象解析为 Range ...

(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount); 
于 2011-09-16T14:55:07.177 回答
0

有关操作 Excel 对象模式的信息,我建议首先寻找 VBA 解决方案,然后将其转换为 C#(这很简单)。网络上有更多可用的 VBA 资源,有时您甚至可以通过录制 VBA 宏来帮助自己。

根据您的公式的确切位置,您可以通过插入行来实现您想要的。

例如,如果您在引用范围 G1:G8 的 A3 中有一个公式,并且您现在想要插入 20 行数据而不是 8 行,您可以在编写您的之前将第 8 行向下移动 20-8 = 12 次,如下所示数据。

Dim rng As Range
Dim nIndex As Long
Set rng = Rows("8:8")
For nIndex = 1 To 20 - 8
    rng.Insert Shift:=xlDown
Next nIndex

执行此操作时,A3 中的公式将自动修改以包含插入的行。

请注意,通过 Interop 执行此操作对于大量行(从您的应用程序到插入的每一行的 Excel 进程的往返)并不是特别有效。提高性能的一种方法是一次插入多行。

于 2011-04-01T11:41:30.767 回答