如果我没有记错的话,Excel行是有所限定的,你上亿的数据有必要导到Excel里吗?那样打开Excel估计也要10分钟.

解决方案 »

  1.   

    用NPOI,会分sheet,现在300M,在15-20秒的样子
      

  2.   

    还有一点,我们现在用的业务数据每天都先load到内存里,70G左右.所有Export Excel的流程是,先从内存拿到数据,然后导出.
      

  3.   

    http://blog.csdn.net/mathieuxiao/article/details/6972772
    我以前做个一个将DataTable导出到excel的例子,可以自动分sheet,看看能不能对你有所帮助
      

  4.   

    这个星球上没有1000W行数据的excel文件
      

  5.   

    是客户要求在导出的文件中能做计算(Excel通用的加减等。。)
    如果知道规则,能不能用程序计算一下。这样导出csv或者txt就行了。
    另外:excel每个sheet最多65535条记录
      

  6.   

    csv直接使用excel打开不就好了吗 excel导出确实很慢的
      

  7.   

    必须 要分页啊 
    可以利用 POI导出到Excel,  
      

  8.   

    这个 供参考 
    Dataset内多个Datatable导出到excel
    http://jasondct.blog.163.com/blog/static/81820673201111481221348/
      

  9.   

    sheet的记录数有限制呀...这个有点麻烦
      

  10.   

    excel2007+这是必须的。
    然后分多个文件。好像excel2007 行数也是有限制的把
    另外,一个用户产生 上亿级别的数据 
    假设结果是5000w,如果每条数据占用10个字节的话,那一个用户产生的数据也将近500M,
    即使文件系统写 500m的单文件 也要 好几秒甚至更多....NPIO 听说过,没用过
    可以尝试自己 开发Excel读取的组件既然是 大应用的话。
      

  11.   


    这个,和你的具体实现方式有关。如果你是基于Office PIA(Interop COM),或者种种基于Office PIA的变相的方法,那么,excel2007+这是必须的,这是毫无疑问的。但是如果你是基于NPOI这样的库,或者基于Open XML SDK,那么excel2007这个是完全不需要的。
      

  12.   

    Excel 2007, 一个sheet限制是在百万,所以是分sheet做.
    所以现在想到的方法是: 数据分段,假如5000W,分5次导出到5个Excel,这样应该能解决内存不够用的问题, right?CSV用过,速度确实会快点,但是客户的需求只能用Excel(目前只想到Excel能支持导出来的文件让user继续做各种计算[规则不定])
      

  13.   

    导出CSV会丢失格式等很多信息,尝试过,速度会快,但行不通
      

  14.   

    500M处理还是easy的,30左右能搞定,关键是还不只这个数字
      

  15.   


    500M处理还是easy的,30秒左右能搞定,关键是还不只这个数字
      

  16.   

    不知道为什么要搞这么大的数据,
      还用excel 来装!
    那 些数据库用来干什么的?  excel 是给人看的,不是装数据库的, (人能看多少?)如果,要做好点,
      不能 做一个小软件, 你要那一段数据,就从数据库中读取, 显示。
      

  17.   

    你说的都对,数据源也是Oracle,这些疑问我们都提过,客户的要求BT,我们也没办法,显示的话没问题,前台分页,
    就是导出Excel是要全部数据.
      

  18.   

    其实我倒是有个思路,就是你导出到sqlite,这个很快吧,然后把这个sqlite下载到client电脑上,通过一个application,在client端把sqlite填充到excel,这样一来就把转换的事情放到client的cpu上了,不知是否可行
      

  19.   


    前面提到过,数据每天都会全部先load到内存里,所以此时跟数据库已经无关.
      

  20.   

    再次导出到sqlite给他下载目的是解放server的cpu,和内存不内存无关
      

  21.   


    这个有点饶诶,我们是会把数据load到内存,然后做export的时候导出到sqlite,再提供下载?这样下载出来能直接到Excel么? sqlite没用过,请赐教....晚上看下这个东西,先谢谢了
      

  22.   

    那个sqlite思路,前提是客户能接受此文件还要再到客户的机器上二次生成。我觉得你优先应该试一下NPOI,因为NPOI不基于Office PIA,不是通过Excel App来生成Excel文件,而是直接通过文件流来生成Excel文件,估计性能会很好。另外:生成Excel文件而又不依赖Excel App的类库不止NPOI这一个选择,你可以再调研一下。
      

  23.   

    肯定要分多个SHEET了~~~需求太BT,打开也要好长时间~~~
      

  24.   

    NPOI这种,不要神话了,你以为Microsoft是2,无非就是Package操作,大数量其实已经不在乎你用什么技术,关键是方向是否正确补充一下前面说的sqlite方法,你让用户下载sqlite后需要配合一个应用程序,在他机器上转化excel,解放server的cpu,好像lz没能理解我的意思...
      

  25.   

    他BT需求就是要给出BT解决方案,不要做YESMAN
      

  26.   

    每天 1000w+ 数据 ... 生成Excel ?Excel 一个Sheet 才 65536,这个Excel得多大啊。客户能用得了么?还是应该剖析客户需求,修改设计呀。
      

  27.   

    多谢,现在用的就是NPOI,还在继续研究中
      

  28.   

    LS N 楼 NPIO不是不支持 2007版的吗?
    而2003版本   最多只有6w多行
    所以 我才说 Excel 2007  是必须的。
    不然,用2003 就算 有多个 Sheet,那你要存多少个 Sheet 啊...
    几千个?
    好像 不支持 吧?
    然后 还是 要分文件,那还不如 用 2007省事。
      

  29.   

    我觉得LZ是在扯淡..第一03最多65535 07是65535*2这么多行..我们就算10W一个sheet 你这最少要100多少个sheet,不知道xls本身支持不支持就算支持了.这尼玛上千万的数据 客户导出到xls就算很快.他能打开不?  就好比一个500M的txt  你用记事本能打开不?另外这么多sheet 客户能一个一个去点?反正我不会.另外这几千万你select下都得好久吧..所以我觉得虽然客户是这样要求的.但是无论是从技术或者实际中,这样的行为尽量"避免".我觉得你是没懂客户要的是什么... 很可能 他们只要一个sum 一个avg 或者一个count 或者一个其他的...
      

  30.   

    涉及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行单位时间没区别,还省内存
      

  31.   

    我觉得也是,应该正确理解用户的意图
    弄明白用户这样要求的目的到底是什么,有没有其他的解决途径
    比如用户就是怕数据丢失,想手动保存下数据到excel中,那么完全可以用数据库备份等方案解决这个问题
    而不是真的每天弄1亿数据的excel给用户
    即使真的做到了,很快用户就会发现没有地方放这些文件
    然后需要你们提供一个100T的硬盘来放文件
      

  32.   

    可以肯定的一点是,一亿数据放到excel里,绝对不是用来看的
    真的要看,一亿数据,每秒看100条,还要看100万秒,一天都看不完,下一天的数据又来了
      

  33.   


    记事本当然比xls省事,不过 你试试弄一个1000W行的table 然后保存html 用IE打开...看看死机不死机.
      

  34.   

    一亿的数据,要放到excel里做计算,用户是得多么不信任你们软件的计算功能啊