2012-10-30 2 views
0

가능한 중복 사용하여 Excel로 작성 :가장 빠른 방법은 읽기 및 C#을

  1. :
    What is the best/fastest way to export large set of data from C# to excel

나는 다음과 같은 기능을 가진 웹 응용 프로그램을 만드는 오전를 관리자가 미리 정의 된 Excel 템플릿 파일에 일부 데이터를 저장한다고 가정합니다. 그는 관리자 페이지를 방문하여이 Excel을 업로드합니다. 응용 프로그램은이 Excel을 읽고 그에 따라 데이터베이스의 데이터를 업데이트합니다.

  • 데이터베이스에 저장된 데이터는 ViewDetails 페이지를 방문하는 모든 사용자에게 표시되어야합니다. 이제 데이터를 화면에 사용자에게 표시하고 Excel로 다운로드 옵션을 제공해야합니다. 또한 사용자는 데이터를 필터링하고 데이터를 정렬 할 수 있습니다.

  • 행 수가 10000+이고 각 행에 약 10-15 열의 텍스트/숫자 데이터가 있다고 가정합니다.

    내 생각은 Interop.Excel 개체를 사용하여 Excel 템플릿을 읽고 데이터베이스에 데이터를 업로드하는 것입니다. 읽기를 위해 일반적으로 모든 데이터를 DataTable에 가져온 다음 필요에 따라 표시합니다. 내 정렬 및 필터링 목적으로 DataView를 사용할 계획입니다. 그러나 나는이 규모의 데이터로 작업 한 적이 없으며 위의 방법을 사용하여 성능에 대해 확신하지 못합니다.

    제 질문은 제 요구 사항을 실현하는 가장 빠르고 가장 빠른 방법은 무엇입니까? 나는 많은 양의 데이터를 Excel 파일에 쓰는 데 약 2-3 분이 걸릴 것이라고 읽었습니다.

    또한 OpenXML을 보았습니다. "Open XML은 워드 프로세싱 문서, 프리젠 테이션 및 다른 플랫폼의 여러 응용 프로그램에서 자유롭게 구현할 수있는 스프레드 시트의 개방형 표준입니다."

    요구 사항을 더 잘 구현하기 위해 사용할 수 있습니까? 아니면 다른 방법이 있습니까? 최근에 C# 웹 응용 프로그램을 처음 개발하고 Excel 스프레드 시트로 작업하기 시작 했으므로 모르는 분명한 대답이 있으면 나와 함께 알려주십시오. 사전에 감사드립니다.

    답변

    3

    엑셀 파일을로드하고 저장하려면 epplus를 사용하는 것이 좋습니다. 매우 빠르고 다양합니다. 특히 쉽게 그것을됩니다로드 :

    Try 
          Dim existingFile As New FileInfo(path) 
    
          Using ExcelPackage As New ExcelPackage(existingFile) 
           Dim Wsht As ExcelWorksheet = Nothing 
    
           Try 
            Wsht = ExcelPackage.Workbook.Worksheets(1) 
    
           Catch ex As Exception 
    
           End Try 
    
    
           Dim tbl As New DataTable 
           Dim hasHeader = True 
           For i = 1 To Wsht.Dimension.End.Column 
            tbl.Columns.Add() 
    'this is very "dumb" if you need better column names just iterate over the file and get them 
           Next 
    
           Dim startRow = 1 '1 due to the excel quirk 
           For rowNum = startRow To Wsht.Dimension.End.Row 
            Dim wsRow = Wsht.Cells(rowNum, 1, rowNum, Wsht.Dimension.End.Column) 
            Dim row = tbl.NewRow 
            For Each cell In wsRow 
             row(cell.Start.Column - 1) = cell.Text 
            Next 
            tbl.Rows.Add(row) 
           Next 
    'do something with the tbl datatable 
    
    
          End Using 
         Catch ex As Exception 
    
         End Try 
    

    단점 : 만 XLSX 파일은 현재

    을 지원
    1

    개인적으로 저는 여러분이하고 싶은 일을 정확히 수행하는 몇 가지 프로젝트가 있습니다. Excel 파일은 xml 형식으로되어 있지만 정말 빠르고 털이 빠져 나갈 수 있습니다. 그럼 당신은 또한 com을 사용할 수 있지만 그게 짜증나.

    http://exceldatareader.codeplex.com/

    빠른 데이터 생성 - 고유의 문자열 500,000 세포로 새 통합 문서는 10 초 미만으로 생성 할 수 있습니다.

    0

    여러 옵션을 시도해야합니다. 시간을 측정하여 상황에 가장 적합한 성능을 제공하는 옵션을 확인하십시오. 한 가지 옵션은 귀하가 언급 한 Interop입니다. 다른 하나는 OLE DB connectionJET SQL commands을 사용하고 있습니다. 포맷팅이 엉망이되기 쉽다는 것을 명심하십시오. 예를 들어, 시트 이름은 JET SQL 쿼리를 작성할 때 "테이블 이름"이되므로 각 업로드와 일관되게 유지되어야합니다. 이 StackOverflow tips을 읽어보십시오.

    2

    모든 데이터는 보유하고있는 데이터의 양, 원하는 작업 (예 : 전체 서식이 지정된 Excel 시트 생성) 및 예산에 따라 다릅니다.

    내 의견으로는 Excel Interop은 좋지 않은 생각입니다. 특히 서버에서 오류가 발생하기 쉽습니다. 실제로 Office 응용 프로그램은 서버에서 다중 인스턴스를 실행하지 않고 대화 형으로 작성되기 때문에 서버에서 interop을 실행하지 않습니다.

    성공적으로 사용한 두 가지 방법은 OpenXML (하지만이 방법은 사용하기 어렵습니다)과 상용 Aspose 셀 라이브러리입니다. 후자는 매우 빠르며 사실상 모든 Excel 기능을 지원합니다. http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx에서 자세한 내용을 볼 수 있습니다.

    관련 문제