을 사용하여 셀을 열거하는 효율적인 방법 통합 문서의 모든 시트에서 모든 셀을 열거하는 가장 효율적인 방법은 무엇입니까?Excel 통합 문서에서 C#
아래의 방법은 ~ 130,000 개의 셀이있는 통합 문서의 경우 제대로 작동하는 것으로 보입니다. 내 컴퓨터에서 파일을 열려면 약 26 초가 걸렸고 셀을 열거하는 데는 약 5 초가 걸렸습니다. 그러나 저는 Excel 전문가가 아니며 광범위한 커뮤니티에서이 코드 스 니펫을 검증하려고했습니다.
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();
}
편집 :
내가 Excel 파일로 직접 작업 API 년대에 의해 노출되지 엑셀 통합 문서의 속성에 액세스하기 위해 PIA 및 상호 운용성을 사용하고자한다는 가치.
+1 Koogra에 대한 포인터 주셔서 감사합니다. 그것은 내 프로젝트에서 유용 할 것입니다. – dcharles