2017-04-18 27 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を作成することによって、それを解決しても、私が読んだからです...私は、x64上で実行していると私は私の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; 
    } 
関連する問題