2017-04-18 7 views
0

그렇다면 ExcelPackage에 CSVStream을로드하려고합니다 (EPPlus를 사용하고 있습니다).EPPlus 배열 크기가 지원되는 범위를 초과했습니다. System.OutOfMemoryException

내가 선택한 옵션에 상관없이 항상 221482 라인에서 실패합니다.

주어진 오류가 제목 :(

public ExcelPackage ExcelPackageFromCsvStream(Stream csvStream) 
    { 
     var excelPackage = new ExcelPackage(); 
     var workSheet = excelPackage.Workbook.Worksheets.Add("Sheet1"); 

     var csvFormat = new ExcelTextFormat 
     { 
      Delimiter = ',', 
      TextQualifier = '"', 
      DataTypes = new[] { eDataTypes.String } 
     }; 

     using (var sr = new StreamReader(csvStream)) 
     { 
      int i = 1; 
      foreach (var line in sr.ReadLines("\r\n")) 
      { 
       workSheet.Cells["A" + i].LoadFromText(line, csvFormat); 
       i++; 
      } 
     } 

     return excelPackage; 
    } 

답변

0

여러 ExcelPackages를 작성하여이를 해결하고 또한 내가 읽은의 하나입니다 ... 나는 64에서 실행, 그리고 난 내의 app.config에있다 일괄 처리 된 스트림 (예 : 한 번에 200k 회선)

public List<ExcelPackage> ExcelPackagesFromCsvStream(Stream csvStream, int batchSize) 
    { 
     var excelPackages = new List<ExcelPackage>(); 
     int currentPackage = -1; // so that first package will have the index 0 

     var csvFormat = new ExcelTextFormat 
     { 
      Delimiter = ',', 
      TextQualifier = '"', 
      DataTypes = new[] {eDataTypes.String} 
     }; 


     using (var sr = new StreamReader(csvStream)) 
     { 
      int index = 1; 

      foreach (var line in sr.ReadLines("\r\n")) 
      { 
       if ((index - 1) % batchSize == 0) 
       { 
        var excelPackage = new ExcelPackage(); 
        excelPackage.Workbook.Worksheets.Add("Sheet1"); 

        excelPackages.Add(excelPackage); 
        currentPackage++; 
        index = 1; 
       } 

       excelPackages[currentPackage].Workbook.Worksheets.First().Cells["A" + index].LoadFromText(line, csvFormat); 
       index++; 
      } 
     } 

     return excelPackages; 
    }