Refreshing an Excel Pivot table from C#

前端 未结 3 591
旧巷少年郎
旧巷少年郎 2021-01-14 04:57

I am trying to refresh a pivot table in an Excel sheet and get the following exception:

Item method in the PivotTables class failed

Heres t

相关标签:
3条回答
  • 2021-01-14 05:33

    Assuming the indexing starts at zero you will overrun the collection with your loop.

    Try:

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

    If that doesn't work Excel probably starts indexing at 1 not at 0.

    Try:

    for (int i = 1; i <= pivotTablesCount; i++)
    
    0 讨论(0)
  • 2021-01-14 05:36

    This will help you it's working.

    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
            }
        }
    }     
     
    
    0 讨论(0)
  • 2021-01-14 05:39
    private void RefreshSheets(string filePath)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
            Excel.Workbook xlWorkbook = xlWorkbooks.Open(filePath);
    
            foreach (Excel.Worksheet xlworksheet in xlWorkbook.Worksheets)
            {
                Excel.PivotTables pivotTbls = (Excel.PivotTables)xlworksheet.PivotTables(Type.Missing);
                if (pivotTbls.Count > 0)
                {
                    for (int i = 1; i <= pivotTbls.Count; j++)
                    {
                        pivotTbls.Item(i).RefreshTable();
                    }
                }
            }
            xlWorkbook.Save();
            GC.Collect();
            GC.WaitForPendingFinalizers();
            xlWorkbook.Close(0);
            Marshal.ReleaseComObject(xlWorkbook);
            Marshal.ReleaseComObject(xlWorkbooks);
            xlApp.Quit();
            Marshal.ReleaseComObject(xlApp);
        }
    

    Add using Excel = Microsoft.Office.Interop.Excel; in using

    0 讨论(0)
提交回复
热议问题