使用Excel Interop扩展公式范围

3
我正在使用Excel Interop库来获取表格并替换其中的值。我的表格结构如下:
A-E列包含基于F-L列中的数据工作的公式 当我更新表格时,我清除F-L列的内容并保留A-E列中的任何公式。然后,我用新数据填充F-L列。
我需要A-E列(任何行)中的公式扩展到我输入的新数据的完整范围。
例如,如果我将数据从8行扩展到20行,则=sum(G1,G8)应变为=sum(G1,G20)。是否有一种方法可以获取表格中所有现有的公式?如何扩展公式的范围?
4个回答

6
在向单元格输入数据时,要跟踪每个新单元格,然后将公式应用于该范围:
sheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount);

1
看起来你的格式末尾可能缺少一个 )"=SUM(G1,G{0})" - SwDevMan81
这正是我所想的 - 但我希望有一种更简单的方法,因为它们可以有任何公式(尽管它们必须是1到max行)。我将使用这种方法,然后使用正则表达式,我猜? - Bob
@Byron Cobb 很抱歉,我不知道。这些公式没有预定义吗?(A1始终具有=SUM(),B1始终具有=RAND()等) - SeeSharp
@SeeSharp - 不是的,用户定义公式,我们只是更新数据和他们的公式范围。感谢您的帮助。 - Bob
太棒了 - 正是Arzt所需要的。 - B. Clay Shannon-B. Crow Raven
显示剩余2条评论

0

您可能需要将对象解析为范围...

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

0

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

根据您的公式所在位置,您可能可以通过插入行来实现所需的效果。

例如,如果您在A3中有一个引用范围G1:G8的公式,并且现在想要插入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 进程的往返)。提高性能的一种方法是一次插入多行。


这似乎只是将范围向下移动。我需要修改任何公式的范围,而不仅仅是简单的范围G1:G20。我希望对于每个嵌套或非嵌套的公式,都可以使用sum(G1:G20)或max(G1:G20)或concatenate(G1:G20)等。 - Bob

0

我遇到了类似的问题,但是与IF公式有关。将其设置为Formula属性无效。但是如果设置为FormulaLocal,则相同的内容有效...

谢谢Microsoft :)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接