2008-08-18 3 views
5

.Net에서 Excel 통합 문서에 액세스해야합니다. 나는 그것을 수행하는 여러 가지 방법에 대해 모두 알고있다. (나는 그들을 blog post에 작성했다.) 네이티브 .Net 구성 요소를 사용하는 것이 가장 빠르다는 것을 알고있다. 그러나 문제는 구성 요소 중 어느 것이 승리하는 것입니까? 벤치마킹 한 사람이 있습니까? 나는 Syncfusion XlsIO를 사용해 왔지만 몇 가지 주요 작업 (예 : 수천 개의 명명 된 범위가 포함 된 통합 문서의 행 삭제)에는 매우 느립니다.누구나 .Net Excel IO 구성 요소 벤치 마크가 있습니까?

답변

5

적절한 벤치 마크를 수행하지는 않았지만 몇 가지 다른 구성 요소를 사용해 본 결과 SpreadsheetGear은 이전에 사용하던 XlsIO보다 훨씬 빠르다는 것을 알게되었습니다. 나는 이것에 대한 나의 발견의 일부를 썼다. post

1

원래 질문에 도움을 줄 수는 없지만 OleDbConnection을 사용하여 Excel 파일에 액세스 할 수 있으므로 데이터베이스로 취급 할 수 있습니까? 그런 다음 워크 시트를 DataTable로 읽고 응용 프로그램에서 데이터에 필요한 모든 변경을 수행 한 다음 OleDbConnection을 사용하여 파일에 다시 저장할 수 있습니다.

+0

폴, 감사합니다. 나는 그 사실을 알고 있었다. (아마도 나는 그것을 블로그 포스트에 포함시켜야한다.) 그러나이 경우에는 실제로 필요한 데이터가 아닙니다. 셀 스타일 및 서식 등 Sam –

0

그렇다. 나는 경험 많은 사람이 아니기 때문에 Syncfusion (그들은 벤치 마크를 공개하지 말 것을 요청한다)에 그들 둘 다를 공표하지 않을 것이다. 테스터 그래서 내 테스트는 아마 약간 결함이 있지만 대부분 당신이 실제로 벤치 마크 무엇이기 때문에 큰 차이를 누가이기 때문에 얼마나.

필자는 "성능"예제 중 하나를 EPPlus에 추가하여 비교했습니다. XLSIO는 행/열 비율 (몇 가지 시도)에 따라 단순한 삽입으로 약 15 % 빨라졌으며 메모리 사용은 매우 유사했습니다. 모든 행을 추가 한 후 매 10 번째 행을 삭제 한 다음 2 행을 새로 추가 한 루틴을 추가했을 때 - XLSIO는 그 상황에서 상당히 느려졌습니다.

일반적인 벤치 마크는 거의 쓸모가 없습니다. 당신이 사용하는 특정 시나리오에서 서로를 상대해야합니다.

나는 EPPlus를 몇 년 동안 사용해 왔지만 그 성능은 좋았지 만, 나는 그걸 외치지 않았다.

더 많은 가치있는 점은 기능, 지원 (Syncfusion이 내 경험에 비추어 볼 때 좋음), 문서화, 소스 코드에 대한 액세스가 중요하다면, 그리고 중요한 점은 API가 사용자에게 얼마나 의미가 있는지, 구문이 상당히 다를 수 있습니다. 예. 명명 된 스타일

XLSIO

headerStyle.BeginUpdate(); 
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33)); 
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33); 
headerStyle.Font.Bold = true; 
headerStyle.Borders[ExcelBordersIndex.EdgeLeft] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeTop] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; 
headerStyle.EndUpdate(); 

EPPlus

ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle"); 
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception 
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33)); 
headerStyle.Style.Font.Bold = true; 
headerStyle.Style.Border.Left.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Right.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Top.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; 
관련 문제