我在读一个2.3M左右的2007版 excel文件时 往数据库里插数据
每次都用上10多分钟
可是我把这个文件中的东西原样复制到新建的2007版的excel中
却几乎是几秒钟的事有高手来指点一下怎么回事吗

解决方案 »

  1.   

    我的问题是手动复制到新建excel中 还是用poi读 速度前后不一样 
      

  2.   

    问题是复制到新的excel还是用poi读的 
    速度怎么就差了那么多 
      

  3.   

    我以前的工作就有一项是利用poi生成excel报表,我们是电商,所以报表也都是很大的。
    首先个人感觉excel有上限,大约是10M左右,超过这个大小基本上就跑不动了
    另外excel分xls和xlsx两种后缀格式的,
    xlsx的要更精简,同样大小xlsx存储的信息为xls的2倍多,但是xlsx的不支持poi写入。
    楼主说的10分钟是不可能的,真那样的话那不是跑10分钟,而且引起高负载导致虚拟机停滞了。
    读excel很快,但是楼主那10多分钟会不会往数据库存的时候浪费太多时间?
    我以前测试过,2G内存,2.4主频单核,xls格式的
    读30列,9000行的数据,大约是6秒左右。
    写入大约是4秒左右
      

  4.   

    这是写数据库的图片 我没有批量导入  是一条一条写的原文件读的慢  数据移到新建的xlsx文件读的就瞬间的是
    想不明白哪里出的问题
      

  5.   

    这是写数据库的图片 我没有批量导入  是一条一条写的原文件读的慢  数据移到新建的xlsx文件读的就瞬间的是
    想不明白哪里出的问题
    顺便说下 移到的新xlsx文件大小和原文件一样的  
    可是速度却差了那么多
    如果只是批量导入的问题 速度怎么会相差那么多
      

  6.   

    自己新建的xlsx,将数据复制过来,读取很快,说明代码没啥问题啊...原始的excel文件有鬼
      

  7.   

    做下测试,看看是读的慢还是插数据库慢.把ncpd.insertByInstance这条语句注掉,看看执行时间是多少
      

  8.   

    至于读取慢可能是你sheet中用了筛选功能或其他,如果是简单纯文本的读入不会很慢
      

  9.   

    试了下发现,我目前的情况是读取速度慢
    但是不知道什么情况会影响poi读 excel的速度
      

  10.   

    读取EXCEL最慢的就是对EXCEL进行解析,你确认下是否后台对EXCEL进行了多次解析,最好是1次解析完将数据都放到内存中,然后再进行后续处理。
      

  11.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
      

  12.   


    我测试了发现读的慢的是xssf流
    读的快的 我只是改了扩展名 文档还是用的hssf流
    只是不知道为什么 2007版的excel比2003版的慢了这么多
      

  13.   

    补充下:
    我的电脑没有安装excel 用的是wps 
    不知道是不是2007版的xssf转换跟环境有关
      

  14.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
      

  15.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
      

  16.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
    现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据
      

  17.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
    现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

    这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
    Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试试。
      

  18.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
    现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

    这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
    Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
    试。

    好像是原文件格式或是开了什么功能的原因;
    我把原文件删的只有几十条数据 还是那么慢;
    后来又新建了一个xssf格式的也是秒读的;
    现在不确定的是原文件到底是什么样的原因
      

  19.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
    现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

    这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
    Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
    试。

    好像是原文件格式或是开了什么功能的原因;
    我把原文件删的只有几十条数据 还是那么慢;
    后来又新建了一个xssf格式的也是秒读的;
    现在不确定的是原文件到底是什么样的原因
    有兴趣研究的我可以把这个excel传过去  探讨探讨
      

  20.   

    我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
    不知道什么原因
    恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
    哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
    现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据

    这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢
    Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试
    试。

    好像是原文件格式或是开了什么功能的原因;
    我把原文件删的只有几十条数据 还是那么慢;
    后来又新建了一个xssf格式的也是秒读的;
    现在不确定的是原文件到底是什么样的原因
    有兴趣研究的我可以把这个excel传过去  探讨探讨
    看看 单元格格式有特殊的吗?这个就不好找了,没遇见过Excel什么设置导致poi解析时的性能问题。你研究出来了 告诉我下哈。