2010-11-10 2 views
3

Я пытаюсь обновить сводную таблицу в листе Excel и получает следующее исключение:Освежающей таблицу Excel Pivot из C#

Item method in the PivotTables class failed 

Heres код:

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

Предполагая, что индексирование начинается с нуля, вы переполните коллекцию своим циклом.

Try:

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

Если это не работает, Excel, вероятно, начинает индексировать на 1 не в 0.

Try:

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

начиная с я = 1. Сделал Trick. Я думаю, что индексы в excel начинаются с 1 вместо 0. –

+0

Привет, Ричард, я понимаю, что ваш пост был 5 лет назад, но в настоящее время у меня есть вопрос вокруг области Pivot Tables, и поэтому было интересно, можете ли вы быстро взглянуть? Любая помощь будет оценена, спасибо: http://stackoverflow.com/questions/35623752/detect-pivot-table-in-microsoft-excel-using-interop-c-sharp – Alex

+0

@Alex Конечно, я посмотрю, этот ответ выглядит многообещающим: http://stackoverflow.com/a/35631705/467720 –

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 
     } 
    } 
}  
Смежные вопросы