我正在使用Excel Interop库来获取工作表并替换工作表中的值。我的表格结构如下:
列A-E包含处理列F-L中数据的公式 当我更新工作表时,我清除F-L中的内容并在A-E中保留任何公式。然后,我用新数据填充F-L列。
我需要在A-E列(任何行)中使用我的公式,以扩展到我输入的新数据的全部范围。
例如,如果我将数据从8扩展到20行,则=sum(G1,G8)
应该变为=sum(G1,G20)
。
有没有办法获得表格中的所有现有公式?如何扩展公式的范围?
答案 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。