Effiziente Methode zum Auflisten von Zellen in einer Excel-Arbeitsmappe mit c #

Was ist die effizienteste Methode, um jede Zelle in jedem Arbeitsblatt einer Arbeitsmappe aufzulisten?

Die folgende Methode scheint für eine Arbeitsmappe mit ~ 130.000 Zellen angemessen zu funktionieren. Auf meinem Computer dauerte es ca. 26 Sekunden, um die Datei zu öffnen, und ca. 5 Sekunden, um die Zellen aufzulisten. Ich bin jedoch kein Excel-Experte und wollte diesen Codeausschnitt mit der breiteren Community validieren.

DateTime timer = DateTime.Now;
Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
try
{
    exampleFile = new FileInfo(Path.Combine(System.Environment.CurrentDirectory, "Large.xlsx"));
    excelApplication.Workbooks.Open(exampleFile.FullName, false, false, missing, missing, missing, true, missing, missing, true, missing, missing, missing, missing, missing);
    Console.WriteLine(string.Format("Took {0} seconds to open file", (DateTime.Now - timer).Seconds.ToString()));

    timer = DateTime.Now;
    foreach(Workbook workbook in excelApplication.Workbooks)
    {
            foreach(Worksheet sheet in workbook.Sheets)
            {
            int i = 0, iRowMax, iColMax;
            string data = String.Empty;

            Object[,] rangeData = (System.Object[,]) sheet.UsedRange.Cells.get_Value(missing);

            if (rangeData != null)
            {
                iRowMax = rangeData.GetUpperBound(0);                       
                iColMax = rangeData.GetUpperBound(1);                                                       

                for (int iRow = 1; iRow < iRowMax; iRow++)
                {
                        for(int iCol = 1; iCol < iColMax; iCol++)
                    {
                        data = rangeData[iRow, iCol] != null ? rangeData[iRow, iCol].ToString() : string.Empty;
                        if (i % 100 == 0)
                        {
                            Console.WriteLine(String.Format("Processed {0} cells.", i));
                        }

                        i++;
                    }                                                                                                   
                }   
            }
        }

        workbook.Close(false, missing, missing);
    }

    Console.WriteLine(string.Format("Took {0} seconds to parse file", (DateTime.Now - timer).Seconds.ToString()));              
    }
    finally
    {
        excelApplication.Workbooks.Close();             
        excelApplication.Quit();                  
    }                   

Bearbeite:

Worth angibt, dass ich PIA und interop verwenden möchte, um auf Eigenschaften von Excel-Arbeitsmappen zuzugreifen, die nicht von APIs verfügbar gemacht werden, die direkt mit der Excel-Datei arbeiten.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage