iT邦幫忙

0

提供一個網頁導出幾十萬條數據到excel表格中并下載問題

需求:现在要使用Asp.NET MVC 做一个导出功能,一般有几十w条数据,现在要导出到excel中。
实现思路:
方案1,直接从数据库中查询出来,一次使用datatable存起来,会连接超时,或者数据少一点的话,查询不超时,但会报内存溢出。主要是之前查询的数据量不大时,这样可以直接刷到缓存,然后生成文件使用浏览器自动下载下来。
方案2,直接从数据库中查出来,使用DataReader,一条一条读取出来,在服务器硬盘上创建一个excel文件存储起来,可以成功。现在的问题是,想保存到用户的电脑目录上,想到要提供一个中转页面,给用户下载应该可以,但是这样生成的excel文件,久了就会有很多,还得想办法经常清除才行。

请教的是有没有办法可以直接点击生成,下载的(不在服务器硬盘上创建文件)?

看更多先前的討論...收起先前的討論...
方案2,比較OK, 可供下載完成或失敗立即刪除, 就不用排程清檔了.
@fuzzylee1688 感谢大佬,我也是使用方案2,已解决这个问题。
thwu iT邦新手 5 級 ‧ 2019-04-01 12:21:31 檢舉
好奇問一下
Excel 開啟這麼大量的資料時,不會容易出問題嗎?
excel中的一個sheet可以放1048576條記錄,您指的出問題是哪方面的?@thwu

1 個回答

0
浩瀚星空
iT邦高手 1 級 ‧ 2019-03-29 10:29:56
最佳解答

思考的方向不错,可惜的是,没注意到这样子会有更高的风险。跟更高的连结处理。
不是没有办法,只是你得处理更多东西就是了。

其实你的问题因该只是因为大数据吧。我自已本身也是用你说的第二个方案。(只是我是直接储存为html)
一般我是系统不主动建立。会交给需要的人去建立。但客户只能下建立报表的命令而已。并不会马上建立。
我建立报表是统一用一个排程来处理。并未交给客户立即生成。客户只能下达建立的命令而已。

至于你说的暂存檔问题。由于我是采用客户自行建立的方式。所以平常就会有对应的记录。
所以我有设定一天一次去清除几天前的资料。

以上就是我目前处理的方式。

谢谢大佬的回复。我现在是采用创建后就下载,下载完就立刻删除的方式。

一般不好做到下載完就刪除的動作才對。而且我創建是沒在等的。
客戶可以在一天內左右都能隨時下載不用再重新建立。
我會建議你這樣做。反正放一天的資料也不會很大。

@浩瀚星空 如果重複下載,確實像您的這種方式會比較好些,我們也還不了解真實的客戶需求,只能先上線看看,後續如果有需求,再調整下,感謝大佬。

我要發表回答

立即登入回答