我正在使用Excel互操作庫獲取工作表並替換工作表中的值。我的表結構如下:Excel互操作和公式範圍
列A-E包含處理列中數據的公式F-L 當我更新工作表時,我清除F-L中的內容並在A-E中保留任何公式。然後我用新數據填寫F-L列。
我需要我的公式列A-E(任何行)來擴展到我輸入的新數據的全部範圍。
例如=sum(G1,G8)
應該變成=sum(G1,G20)
如果我將數據從8擴展到20行。有沒有辦法在工作表中找到所有當前的公式?如何擴展公式的範圍?
我正在使用Excel互操作庫獲取工作表並替換工作表中的值。我的表結構如下:Excel互操作和公式範圍
列A-E包含處理列中數據的公式F-L 當我更新工作表時,我清除F-L中的內容並在A-E中保留任何公式。然後我用新數據填寫F-L列。
我需要我的公式列A-E(任何行)來擴展到我輸入的新數據的全部範圍。
例如=sum(G1,G8)
應該變成=sum(G1,G20)
如果我將數據從8擴展到20行。有沒有辦法在工作表中找到所有當前的公式?如何擴展公式的範圍?
我假設你將從8行輸入的數據量擴展到20個編程 - 所以,當你輸入這個數據的時候,你要輸入每個單元格的數量,然後在最後,你可以這樣做:
yourWorkSheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount);
我希望我有你問的是什麼,讓我知道如果我錯過了一些點,我會修改。
有關操作Excel對象模式的信息,我建議首先查找VBA解決方案,然後將其轉換爲C#(這很簡單)。網絡上有更多的VBA資源可供使用,有時甚至可以通過錄制VBA宏來幫助自己。
根據你公式的確切位置,你可以通過插入行來實現你想要的。
E.g.如果您有一個公式,例如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。我希望有總和(G1:G20)或最大(G1:G20)或連接(G1:G20)等等。 – Bob 2011-04-01 11:58:26
您可能需要解析的對象範圍...
(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount);
我也有類似的問題,但與IF公式。將其設置爲「公式」屬性不起作用。但是,如果設置爲FormulaLocal同一作品...
感謝微軟:)
BTW:公式和FormulaLocal將只能用於A1 reference style。對於R1C1,您應該使用FormulaR1C1和FormulaR1C1Local。
看起來你可能會在格式末尾丟失一個')'。 '「= SUM(G1,G {0})」' – SwDevMan81 2011-04-01 10:58:40
@ SwDevMan81不錯的地方。修訂。 – SeeSharp 2011-04-01 11:01:11
這就是我的想法 - 但我希望有一個更簡單的方法,因爲他們真的可以有任何公式(儘管他們必須從1行到最大)。我會使用這種方法,然後我猜是正則表達式? – Bob 2011-04-01 11:06:29