Excel互操作和公式范围

时间:2011-04-01 10:26:00

标签: c# excel-2010 excel-interop

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

列A-E包含处理列F-L中数据的公式 当我更新工作表时,我清除F-L中的内容并在A-E中保留任何公式。然后,我用新数据填充F-L列。

我需要在A-E列(任何行)中使用我的公式,以扩展到我输入的新数据的全部范围。

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

4 个答案:

答案 0 :(得分:4)

我假设您正在以编程方式将8行输入的数据量扩展到20 - 因此,当您输入此数据时,请记录您输入数据的每个单元格的数量,然后最后,您可以做:

yourWorkSheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount);

我希望我能得到你所要求的东西,如果我错过了一些问题,请告诉我,我会修改。

答案 1 :(得分:0)

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

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

E.g。如果你有一个参考范围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进程的往返)。提高性能的一种方法是一次插入多行。

答案 2 :(得分:0)

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

(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount); 

答案 3 :(得分:0)

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

,则同样有效

感谢微软:)

btw:Formula和FormulaLocal仅适用于A1 reference style。对于R1C1,您应该使用FormulaR1C1和FormulaR1C1Local。

相关问题