2012-01-24 419 views
0

我需要製作一個將連接數據從ms sql表中取出的excel文件。目前,我正在將數據導出到xml(通過mvc 3頁面),然後通過以下方式將其導入到excel中:http://xignite.web-services-blog.com/2011/03/how-to-import-market-data-into-excel-using-xml/從SQL Server或asp.net/C#(mvc 3)導入數據到excel頁面

我不想簡單地生成帶有數據的Excel文件,因爲我希望用戶能夠在Excel中打開刷新按鈕並隨時獲取新數據。我的問題是,最多可以有100 000行,而且excel在這種解析xml文件方面非常慢,它會鎖定整個cpu核心幾分鐘。這是不可能的。

有沒有更好的方法來實現這一目標?我可以嘗試從ms sql直接獲取數據,但我不希望用戶能夠讀取整個表格 - 他應該只能讀取「他的」行。這就是爲什麼目前我使用xml--我可以在鏈接中包含他的登錄信息,然後只返回他有權訪問的行。如果我允許他訪問ms sql,我必須爲每個客戶端創建單獨的登錄和視圖,這將是一個自動化的痛苦...此外,我不確定會有多快?

對不清楚的描述 - 我不完全確定這種將數據導入到excel的方式被稱爲,並且無法真正找到它。

回答

0

如果您已經在使用Web服務器生成XML文件,請考慮從數據庫中即時生成CSV文件。用戶然後可以從該CSV文件導入數據。這會工作如下:

  1. 用戶打開他的電子表格,然後點擊刷新
  2. 用戶的Excel連接到一個URL,比如http://intranet/report.csv?username=Bob
  3. Web服務器連接到SQL服務器並執行查詢。
  4. Web服務器創建一個MemoryStream ms對象。
  5. Web服務器使用DataReaderSqlDataReader讀取查詢結果並以CSV格式(逗號分隔值)將其寫入ms
  6. Web服務器以Content-disposition: attachment; filename=report.csv標題做出響應,並使用Response.BinaryWrite()向用戶發送CSV。
  7. 用戶的Excel收到report.csv並使用它刷新用戶電子表格的內容。
相關問題