求教:大数据量导出 Excel 如果我没有记错的话,Excel行是有所限定的,你上亿的数据有必要导到Excel里吗?那样打开Excel估计也要10分钟. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用NPOI,会分sheet,现在300M,在15-20秒的样子 还有一点,我们现在用的业务数据每天都先load到内存里,70G左右.所有Export Excel的流程是,先从内存拿到数据,然后导出. http://blog.csdn.net/mathieuxiao/article/details/6972772我以前做个一个将DataTable导出到excel的例子,可以自动分sheet,看看能不能对你有所帮助 这个星球上没有1000W行数据的excel文件 是客户要求在导出的文件中能做计算(Excel通用的加减等。。)如果知道规则,能不能用程序计算一下。这样导出csv或者txt就行了。另外:excel每个sheet最多65535条记录 csv直接使用excel打开不就好了吗 excel导出确实很慢的 必须 要分页啊 可以利用 POI导出到Excel, 这个 供参考 Dataset内多个Datatable导出到excelhttp://jasondct.blog.163.com/blog/static/81820673201111481221348/ sheet的记录数有限制呀...这个有点麻烦 excel2007+这是必须的。然后分多个文件。好像excel2007 行数也是有限制的把另外,一个用户产生 上亿级别的数据 假设结果是5000w,如果每条数据占用10个字节的话,那一个用户产生的数据也将近500M,即使文件系统写 500m的单文件 也要 好几秒甚至更多....NPIO 听说过,没用过可以尝试自己 开发Excel读取的组件既然是 大应用的话。 这个,和你的具体实现方式有关。如果你是基于Office PIA(Interop COM),或者种种基于Office PIA的变相的方法,那么,excel2007+这是必须的,这是毫无疑问的。但是如果你是基于NPOI这样的库,或者基于Open XML SDK,那么excel2007这个是完全不需要的。 Excel 2007, 一个sheet限制是在百万,所以是分sheet做.所以现在想到的方法是: 数据分段,假如5000W,分5次导出到5个Excel,这样应该能解决内存不够用的问题, right?CSV用过,速度确实会快点,但是客户的需求只能用Excel(目前只想到Excel能支持导出来的文件让user继续做各种计算[规则不定]) 导出CSV会丢失格式等很多信息,尝试过,速度会快,但行不通 500M处理还是easy的,30左右能搞定,关键是还不只这个数字 500M处理还是easy的,30秒左右能搞定,关键是还不只这个数字 不知道为什么要搞这么大的数据, 还用excel 来装!那 些数据库用来干什么的? excel 是给人看的,不是装数据库的, (人能看多少?)如果,要做好点, 不能 做一个小软件, 你要那一段数据,就从数据库中读取, 显示。 你说的都对,数据源也是Oracle,这些疑问我们都提过,客户的要求BT,我们也没办法,显示的话没问题,前台分页,就是导出Excel是要全部数据. 其实我倒是有个思路,就是你导出到sqlite,这个很快吧,然后把这个sqlite下载到client电脑上,通过一个application,在client端把sqlite填充到excel,这样一来就把转换的事情放到client的cpu上了,不知是否可行 前面提到过,数据每天都会全部先load到内存里,所以此时跟数据库已经无关. 再次导出到sqlite给他下载目的是解放server的cpu,和内存不内存无关 这个有点饶诶,我们是会把数据load到内存,然后做export的时候导出到sqlite,再提供下载?这样下载出来能直接到Excel么? sqlite没用过,请赐教....晚上看下这个东西,先谢谢了 那个sqlite思路,前提是客户能接受此文件还要再到客户的机器上二次生成。我觉得你优先应该试一下NPOI,因为NPOI不基于Office PIA,不是通过Excel App来生成Excel文件,而是直接通过文件流来生成Excel文件,估计性能会很好。另外:生成Excel文件而又不依赖Excel App的类库不止NPOI这一个选择,你可以再调研一下。 肯定要分多个SHEET了~~~需求太BT,打开也要好长时间~~~ NPOI这种,不要神话了,你以为Microsoft是2,无非就是Package操作,大数量其实已经不在乎你用什么技术,关键是方向是否正确补充一下前面说的sqlite方法,你让用户下载sqlite后需要配合一个应用程序,在他机器上转化excel,解放server的cpu,好像lz没能理解我的意思... 他BT需求就是要给出BT解决方案,不要做YESMAN 每天 1000w+ 数据 ... 生成Excel ?Excel 一个Sheet 才 65536,这个Excel得多大啊。客户能用得了么?还是应该剖析客户需求,修改设计呀。 多谢,现在用的就是NPOI,还在继续研究中 LS N 楼 NPIO不是不支持 2007版的吗?而2003版本 最多只有6w多行所以 我才说 Excel 2007 是必须的。不然,用2003 就算 有多个 Sheet,那你要存多少个 Sheet 啊...几千个?好像 不支持 吧?然后 还是 要分文件,那还不如 用 2007省事。 我觉得LZ是在扯淡..第一03最多65535 07是65535*2这么多行..我们就算10W一个sheet 你这最少要100多少个sheet,不知道xls本身支持不支持就算支持了.这尼玛上千万的数据 客户导出到xls就算很快.他能打开不? 就好比一个500M的txt 你用记事本能打开不?另外这么多sheet 客户能一个一个去点?反正我不会.另外这几千万你select下都得好久吧..所以我觉得虽然客户是这样要求的.但是无论是从技术或者实际中,这样的行为尽量"避免".我觉得你是没懂客户要的是什么... 很可能 他们只要一个sum 一个avg 或者一个count 或者一个其他的... 涉及io开线程多了也没用啊= = 如果是操作excel造成的造成的,你干脆就存成文本,命名成xls文件得了比如这样:<table><tr><td>a</td><td>a</td><td>a</td></tr><tr><td>a</td><td>a</td><td>a</td></tr></table>用流方式写文件,无论写1行还是1000W行单位时间没区别,还省内存 我觉得也是,应该正确理解用户的意图弄明白用户这样要求的目的到底是什么,有没有其他的解决途径比如用户就是怕数据丢失,想手动保存下数据到excel中,那么完全可以用数据库备份等方案解决这个问题而不是真的每天弄1亿数据的excel给用户即使真的做到了,很快用户就会发现没有地方放这些文件然后需要你们提供一个100T的硬盘来放文件 可以肯定的一点是,一亿数据放到excel里,绝对不是用来看的真的要看,一亿数据,每秒看100条,还要看100万秒,一天都看不完,下一天的数据又来了 记事本当然比xls省事,不过 你试试弄一个1000W行的table 然后保存html 用IE打开...看看死机不死机. 一亿的数据,要放到excel里做计算,用户是得多么不信任你们软件的计算功能啊 怎么把一个主键对应的数据放到一个以主键为列头的新表中 winform程序发布后web安装时的问题 关于NetworkStream.Read异常的问题 散分讨论:C#实现文本到数据库的导入问题 如何调用远端的com+组件 iframe问题 在 .NET 中使用 Socket,如果连接远端需要通过代理服务器,怎么办? 好网址 gridcontrol绑定数据源问题 为什么需要async关键字? asp.net 为什么把JS文件的扩展名写成ASHX 继承实体后无法序列化
我以前做个一个将DataTable导出到excel的例子,可以自动分sheet,看看能不能对你有所帮助
如果知道规则,能不能用程序计算一下。这样导出csv或者txt就行了。
另外:excel每个sheet最多65535条记录
可以利用 POI导出到Excel,
Dataset内多个Datatable导出到excel
http://jasondct.blog.163.com/blog/static/81820673201111481221348/
然后分多个文件。好像excel2007 行数也是有限制的把
另外,一个用户产生 上亿级别的数据
假设结果是5000w,如果每条数据占用10个字节的话,那一个用户产生的数据也将近500M,
即使文件系统写 500m的单文件 也要 好几秒甚至更多....NPIO 听说过,没用过
可以尝试自己 开发Excel读取的组件既然是 大应用的话。
这个,和你的具体实现方式有关。如果你是基于Office PIA(Interop COM),或者种种基于Office PIA的变相的方法,那么,excel2007+这是必须的,这是毫无疑问的。但是如果你是基于NPOI这样的库,或者基于Open XML SDK,那么excel2007这个是完全不需要的。
所以现在想到的方法是: 数据分段,假如5000W,分5次导出到5个Excel,这样应该能解决内存不够用的问题, right?CSV用过,速度确实会快点,但是客户的需求只能用Excel(目前只想到Excel能支持导出来的文件让user继续做各种计算[规则不定])
500M处理还是easy的,30秒左右能搞定,关键是还不只这个数字
还用excel 来装!
那 些数据库用来干什么的? excel 是给人看的,不是装数据库的, (人能看多少?)如果,要做好点,
不能 做一个小软件, 你要那一段数据,就从数据库中读取, 显示。
就是导出Excel是要全部数据.
前面提到过,数据每天都会全部先load到内存里,所以此时跟数据库已经无关.
这个有点饶诶,我们是会把数据load到内存,然后做export的时候导出到sqlite,再提供下载?这样下载出来能直接到Excel么? sqlite没用过,请赐教....晚上看下这个东西,先谢谢了
而2003版本 最多只有6w多行
所以 我才说 Excel 2007 是必须的。
不然,用2003 就算 有多个 Sheet,那你要存多少个 Sheet 啊...
几千个?
好像 不支持 吧?
然后 还是 要分文件,那还不如 用 2007省事。
比如这样:<table>
<tr><td>a</td><td>a</td><td>a</td></tr>
<tr><td>a</td><td>a</td><td>a</td></tr>
</table>用流方式写文件,无论写1行还是1000W行单位时间没区别,还省内存
弄明白用户这样要求的目的到底是什么,有没有其他的解决途径
比如用户就是怕数据丢失,想手动保存下数据到excel中,那么完全可以用数据库备份等方案解决这个问题
而不是真的每天弄1亿数据的excel给用户
即使真的做到了,很快用户就会发现没有地方放这些文件
然后需要你们提供一个100T的硬盘来放文件
真的要看,一亿数据,每秒看100条,还要看100万秒,一天都看不完,下一天的数据又来了
记事本当然比xls省事,不过 你试试弄一个1000W行的table 然后保存html 用IE打开...看看死机不死机.