关于poi 读excel 速度的问题

oKaFeiMao12345 2013-10-09 01:48:42
我在读一个2.3M左右的2007版 excel文件时 往数据库里插数据
每次都用上10多分钟
可是我把这个文件中的东西原样复制到新建的2007版的excel中
却几乎是几秒钟的事

有高手来指点一下怎么回事吗
...全文
1311 33 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
oKaFeiMao12345 2013-10-14
  • 打赏
  • 举报
回复
引用 30 楼 oKaFeiMao12345 的回复:
[quote=引用 29 楼 u010926176 的回复:] [quote=引用 27 楼 oKaFeiMao12345 的回复:] [quote=引用 26 楼 u010926176 的回复:] [quote=引用 25 楼 u010926176 的回复:] [quote=引用 22 楼 oKaFeiMao12345 的回复:] [quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote] 哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。[/quote] 现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据 [/quote] 这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢 Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试 试。 [/quote] 好像是原文件格式或是开了什么功能的原因; 我把原文件删的只有几十条数据 还是那么慢; 后来又新建了一个xssf格式的也是秒读的; 现在不确定的是原文件到底是什么样的原因[/quote] 有兴趣研究的我可以把这个excel传过去 探讨探讨
oKaFeiMao12345 2013-10-14
  • 打赏
  • 举报
回复
引用 29 楼 u010926176 的回复:
[quote=引用 27 楼 oKaFeiMao12345 的回复:] [quote=引用 26 楼 u010926176 的回复:] [quote=引用 25 楼 u010926176 的回复:] [quote=引用 22 楼 oKaFeiMao12345 的回复:] [quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote] 哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。[/quote] 现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据 [/quote] 这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢 Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试 试。 [/quote] 好像是原文件格式或是开了什么功能的原因; 我把原文件删的只有几十条数据 还是那么慢; 后来又新建了一个xssf格式的也是秒读的; 现在不确定的是原文件到底是什么样的原因
GP0071 2013-10-14
  • 打赏
  • 举报
回复
引用 31 楼 oKaFeiMao12345 的回复:
[quote=引用 30 楼 oKaFeiMao12345 的回复:] [quote=引用 29 楼 u010926176 的回复:] [quote=引用 27 楼 oKaFeiMao12345 的回复:] [quote=引用 26 楼 u010926176 的回复:] [quote=引用 25 楼 u010926176 的回复:] [quote=引用 22 楼 oKaFeiMao12345 的回复:] [quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote] 哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。[/quote] 现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据 [/quote] 这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢 Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试 试。 [/quote] 好像是原文件格式或是开了什么功能的原因; 我把原文件删的只有几十条数据 还是那么慢; 后来又新建了一个xssf格式的也是秒读的; 现在不确定的是原文件到底是什么样的原因[/quote] 有兴趣研究的我可以把这个excel传过去 探讨探讨[/quote] 看看 单元格格式有特殊的吗?这个就不好找了,没遇见过Excel什么设置导致poi解析时的性能问题。你研究出来了 告诉我下哈。
阿木木_ 2013-10-14
  • 打赏
  • 举报
回复
引用 8 楼 AA5279AA 的回复:
我以前的工作就有一项是利用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秒左右
好厉害啊 ,膜拜!
oKaFeiMao12345 2013-10-13
  • 打赏
  • 举报
回复
补充下: 我的电脑没有安装excel 用的是wps 不知道是不是2007版的xssf转换跟环境有关
oKaFeiMao12345 2013-10-13
  • 打赏
  • 举报
回复
我测试了发现读的慢的是xssf流 读的快的 我只是改了扩展名 文档还是用的hssf流 只是不知道为什么 2007版的excel比2003版的慢了这么多
GP0071 2013-10-13
  • 打赏
  • 举报
回复
引用 25 楼 u010926176 的回复:
[quote=引用 22 楼 oKaFeiMao12345 的回复:] [quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote] 哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。
GP0071 2013-10-13
  • 打赏
  • 举报
回复
引用 22 楼 oKaFeiMao12345 的回复:
[quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。
GP0071 2013-10-13
  • 打赏
  • 举报
回复
引用 27 楼 oKaFeiMao12345 的回复:
[quote=引用 26 楼 u010926176 的回复:] [quote=引用 25 楼 u010926176 的回复:] [quote=引用 22 楼 oKaFeiMao12345 的回复:] [quote=引用 21 楼 u010926176 的回复:] 这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因[/quote] 恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote] 哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。[/quote] 现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据 [/quote] 这样朋友,先排查下是否是excel数据量导致慢,还是程序处理慢 Excel中录入1条记录,导入记录时间。如果1条数据导入很快,那就是你的数据量太大 导致导入时过慢。你先试试。
oKaFeiMao12345 2013-10-13
  • 打赏
  • 举报
回复
oKaFeiMao12345 2013-10-13
  • 打赏
  • 举报
回复
引用 26 楼 u010926176 的回复:
[quote=引用 25 楼 u010926176 的回复:]
[quote=引用 22 楼 oKaFeiMao12345 的回复:]
[quote=引用 21 楼 u010926176 的回复:]
这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。

我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上
不知道什么原因[/quote]
恩,如果瓶颈在这的话,那就是poi在解析EXCEL时非常的耗时,但是不应该这么长时间啊。[/quote]
哦,对了 你看看 你EXCEL中 没有多余的空行什么的吧。[/quote]
现在的情况是poi一次性把excel读入内存 从50000kb一直读到170000kb 最多到300000kb 然后才会往数据库插数据
oKaFeiMao12345 2013-10-12
  • 打赏
  • 举报
回复
引用 18 楼 zyb134506 的回复:
至于读取慢可能是你sheet中用了筛选功能或其他,如果是简单纯文本的读入不会很慢
试了下发现,我目前的情况是读取速度慢 但是不知道什么情况会影响poi读 excel的速度
oKaFeiMao12345 2013-10-12
  • 打赏
  • 举报
回复
引用 21 楼 u010926176 的回复:
这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
我测试了下 主要时间还是浪费在了new XSSFWorkbook(in)上 不知道什么原因
GP0071 2013-10-12
  • 打赏
  • 举报
回复
这种性能问题,建议找一下瓶颈在哪。在程序中增加时间戳,来查找瓶颈,然后再具体分析及优化。
GP0071 2013-10-12
  • 打赏
  • 举报
回复
读取EXCEL最慢的就是对EXCEL进行解析,你确认下是否后台对EXCEL进行了多次解析,最好是1次解析完将数据都放到内存中,然后再进行后续处理。
  • 打赏
  • 举报
回复
自己新建的xlsx,将数据复制过来,读取很快,说明代码没啥问题啊...原始的excel文件有鬼
快乐的2 2013-10-10
  • 打赏
  • 举报
回复
至于读取慢可能是你sheet中用了筛选功能或其他,如果是简单纯文本的读入不会很慢
快乐的2 2013-10-10
  • 打赏
  • 举报
回复
做下测试,看看是读的慢还是插数据库慢.把ncpd.insertByInstance这条语句注掉,看看执行时间是多少
yktd26 2013-10-10
  • 打赏
  • 举报
回复
引用 楼主 oKaFeiMao12345 的回复:
我在读一个2.3M左右的2007版 excel文件时 往数据库里插数据 每次都用上10多分钟 可是我把这个文件中的东西原样复制到新建的2007版的excel中 却几乎是几秒钟的事 有高手来指点一下怎么回事吗
这恐怕是你插入数据库效率低啊
失落夏天 2013-10-09
  • 打赏
  • 举报
回复
我以前的工作就有一项是利用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秒左右
加载更多回复(13)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧