2011-02-23 87 views
0

所以我試圖從存儲過程(200k rows +)中將結果從ASP.NET中導入到Excel文件中,但有一些困難。我不認爲csv是一個選項,因爲客戶希望數字格式正確。我已經嘗試了三個第三方Excel庫,但都有這麼多的數據,並且使用了千兆字節的內存。通過c#web服務將大量數據從sql server傳輸到Excel文件

我寫了一些代碼來生成一個Excel XML文件,它運行速度非常快,但文件超過300megs。如果我打開並保存爲本地Excel文件,它會將其降至30megs。目前,我的最佳解決方案是在服務器上壓縮這個xml文件,將其壓縮到7megs,但用戶仍然會解壓縮一個巨大的文件。理想情況下,我想找到一個第三方Excel庫,可以在不殺死服務器的情況下編寫具有200,000多行的本機Excel文件,有什麼想法?

+0

您正在寫什麼版本的Excel? 'xls'或'xlsx'? – 2011-02-23 13:49:49

+0

您是否嘗試過使用Excel原生COM API? [鏈接](http://support.microsoft.com/kb/302084) – 2011-02-23 13:50:13

+0

只要它在Excel 2007中以xls或xlsx打開,文件格式並不重要。還沒有嘗試COM API,因爲我認爲需要在服務器上安裝Excel? (不是一個選項) – nzyme 2011-02-23 13:58:55

回答

0

我最終自己生成了一個xlsx,事實證明這個格式非常簡單

0

這是一個非常快速的POC,我寫了3列255個字符200,000次(600,000個單元格)。最終文件在我的機器上以4.85MB進入。

 string ExportFile = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.xlsx"); 
     string DSN = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES\";", ExportFile); 

     using (System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection(DSN)) 
     { 
      Con.Open(); 
      using (System.Data.OleDb.OleDbCommand Com = new System.Data.OleDb.OleDbCommand()) 
      { 
       Com.Connection = Con; 
       Com.CommandText = "CREATE TABLE [TestSheet] (A1 varChar(255), B1 varChar(255), C1 varChar(255))"; 
       Com.ExecuteNonQuery(); 
       string A1 = new string('A', 255); 
       string B1 = new string('B', 255); 
       string C1 = new string('C', 255); 
       Com.CommandText = string.Format("INSERT INTO [TestSheet] (A1, B1, C1) VALUES ('{0}', '{1}', '{2}')", A1, B1, C1); 
       for (var i = 1; i <= 200000; i++) 
       { 
        Com.ExecuteNonQuery(); 
       } 
      } 
      Con.Close(); 
     } 

在服務器上我不能肯定所有什麼需要,但你可能必須安裝此:

http://www.microsoft.com/downloads/en/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&displaylang=en

+0

感謝這看起來像它有潛力。當我在機器上運行你的代碼時,我只能生成多達8,000行左右的行,再給我一個空白的xls。如果我減少可以產生更多的弦的長度,那麼有什麼想法會發生什麼? – nzyme 2011-02-23 15:06:54

+0

你能給我發送它生成的文件嗎?我的電子郵件地址在我的檔案中。 – 2011-02-23 15:56:59

0

最終Excel是一個平面文件系統和SQL是賺不到兼容性有趣。我希望克里斯哈斯的代碼能爲你工作。這看起來很奇怪,'我不認爲csv是一種選擇,因爲客戶希望數字格式正確。 '如果他們有一個SQL數據庫,他們不引用/查詢,而不是擁有數據庫的excel版本?

+0

公平的問題和一個我問我自己,但他們支付這個,而不是我:) – nzyme 2011-02-23 15:09:15

+0

通常我見證了我曾經工作過的公司,當他們想要操縱數據本身,但我會考慮這是一種特殊的操作,而不是一項共同的任務。唉,商業世界並不總是理解'編碼'世界=) – Coops 2011-02-23 15:19:33

相關問題