Quel est le moyen le plus efficace d'énumérer chaque cellule de chaque feuille d'un classeur?Méthode efficace pour énumérer des cellules dans un classeur Excel à l'aide de C#
La méthode ci-dessous semble fonctionner raisonnablement pour un classeur avec ~ 130 000 cellules. Sur ma machine, il a fallu ~ 26 secondes pour ouvrir le fichier et ~ 5 secondes pour énumérer les cellules. Cependant, je ne suis pas un expert Excel et je voulais valider cet extrait de code avec la communauté plus large.
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();
}
Modifier:
Worth indiquant que je veux utiliser PIA et Interop afin d'accéder aux propriétés des classeurs Excel qui ne sont pas exposés par des API qui travaillent directement avec le fichier Excel.
+1 Merci pour le pointeur sur Koogra. Cela va être utile dans mon projet. – dcharles