2015-06-08 196 views
3

我有大量的.csv文件需要轉換爲.xslx後應用一些格式。緩慢加載.CSV文件使用EPPLUS

包含大約20 000行和7列的文件需要12分鐘進行轉換。 如果文件包含超過100 000個文件,它會運行> 1小時。

這是不幸的是我不能接受。

代碼片段:

 var format = new ExcelTextFormat(); 
     format.Delimiter = ';'; 
     format.Encoding = new UTF7Encoding(); 
     format.Culture = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); 
     format.Culture.DateTimeFormat.ShortDatePattern = "dd.mm.yyyy"; 

     using (ExcelPackage package = new ExcelPackage(new FileInfo(file.Name))){ 
      ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(Path.GetFileNameWithoutExtension(file.Name)); 
      worksheet.Cells["A1"].LoadFromText(new FileInfo(file.FullName), format); 
     } 

我已經驗證它是用來花的時間LoadFromText命令。

有沒有辦法加快速度? 我試過沒有「格式」參數,但加載時間是相同的。

你正在經歷什麼樣的加載時間?

+0

,因爲它是一個簡單的CSV,你嘗試過用一個StreamReader讀它? –

+0

不,我對C#很陌生,不知道我的方式,但我會研究你的建議。謝謝。 – gurbao

回答

6

我在這裏的建議是自己讀取文件,然後使用庫來創建文件。

讀取CSV作爲可能是簡單的代碼:

List<String> lines = new List<String>(); 
using (StreamReader reader = new StreamReader("file.csv")) 
{ 
    String line; 
    while((line = reader.ReadLine()) != null) 
    { 
     lines.add(line); 
    } 
} 

//Now you got all lines of your CSV 

//Create your file with EPPLUS 

foreach(String line in lines) 
{ 
    var values = line.Split(';'); 
    foreach(String value in values) 
    { 
     //use EPPLUS library to fill your file 
    } 
} 
+0

謝謝,這讓我開始了!處理時間有什麼不同! 以前需要18分鐘處理的文件現在在18秒內運行! – gurbao

0

我遇到了一個非常類似的問題與LoadFromCollection。 EPPlus必須考慮其方法中的所有情況,以便一般地加載數據,因此存在很大的開銷。我最終縮小了這個方法的瓶頸,最終只是手動將集合中的數據轉換爲EPPlus中的Excel Cell對象。可能在我的出口中保存了幾分鐘。

對如何讀取CSV數據大量的例子:

C# Read a particular value from CSV file

+0

@Gianni B對不起,沒有義務踏上你的腳趾 - 你打了我一分鐘:) – Ernie

+0

別擔心男人,我們都在這裏幫忙! :) –