2010-11-10 45 views
3

我試圖刷新數據透視表中的Excel工作表,並得到下面的異常的Excel數據透視表:刷新從C#

Item method in the PivotTables class failed 

繼承人的代碼:

pivotSheet.Activate(); 
Microsoft.Office.Interop.Excel.PivotTables pivotTables = 
     (Microsoft.Office.Interop.Excel.PivotTables)pivotSheet.PivotTables(missing); 
int pivotTablesCount = pivotTables.Count; 
    if (pivotTablesCount > 0) 
    { 
     for (int i = 0; i <= pivotTablesCount; i++) 
     { 
      pivotTables.Item(i).RefreshTable(); //The Item method throws an exception 
     } 
    } 

任何想法?

回答

8

假設索引從零開始,您將使用循環溢出集合。

嘗試:

for (int i = 0; i < pivotTablesCount; i++) 

如果不行Excel中很可能開始於1索引不爲0

嘗試:

for (int i = 1; i <= pivotTablesCount; i++) 
+2

開始在I = 1確實起作用。我認爲在Excel中的索引從1開始,而不是從0開始。 – 2011-02-18 19:50:52

+0

嗨,理查德,我意識到你的帖子是5年前的,但是我現在有一個關於數據透視表區域的問題,因此想知道你是否可以快速查看?任何幫助將不勝感激,謝謝:http://stackoverflow.com/questions/35623752/detect-pivot-table-in-microsoft-excel-using-interop-c-sharp – Alex 2016-02-25 15:16:41

+0

@Alex當然,我會看看,這個答案看起來很有希望:http://stackoverflow.com/a/35631705/467720 – 2016-02-26 06:23:47

1

這將幫助你它的工作。

Microsoft.Office.Interop.Excel.Application oXL; 
Microsoft.Office.Interop.Excel.Workbook mWorkBook; 
Microsoft.Office.Interop.Excel.Sheets mWorkSheets; 

oXL = new Microsoft.Office.Interop.Excel.Application(); 
oXL.Visible = true; 
oXL.DisplayAlerts = false; 
mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 
//Get all the sheets in the workbook 
mWorkSheets = mWorkBook.Worksheets; 
foreach (Microsoft.Office.Interop.Excel.Worksheet pivotSheet in mWorkSheets) 
{ 
    Microsoft.Office.Interop.Excel.PivotTables pivotTables = pivotSheet.PivotTables(); 
    int pivotTablesCount = pivotTables.Count; 
    if (pivotTablesCount > 0) 
    { 
     for (int i = 1; i <= pivotTablesCount; i++) 
     { 
      pivotTables.Item(i).RefreshTable(); //The Item method throws an exception 
     } 
    } 
}