`
surelei
  • 浏览: 66357 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

excel导入导出

阅读更多
基于POI做了一个excel导入导出的小工具类。
主要功能是通过在一个实体类中配置注解,来映射excel文件的每一列,然后通过调用一个API来执行导入或导出的操作。
注解的例子如下(测试代码里有):

@ExcelMapping
public class ExcelDataSample {
    @CellMapping(name = "A", type = CellType.INT)
    private int id;
    @CellMapping(name = "B", type = CellType.LONG)
    private long length;
    @CellMapping(name = "C", type = CellType.STRING)
    private String code;
    @CellMapping(name = "D")
    private String name;//默认为STRING,所以可以不配置type
    @CellMapping(name = "E", type = CellType.DOUBLE)
    private double price;
    @CellMapping(name = "F", type = CellType.DATE)
    private Date date;
    ..............


附件是所有代码,包括测试代码,只测试了excel2003和2007,其他版本未测试。
代码通过MAVEN构建,所以附件不包括依赖的JAR文件,但是附带了pom文件。
pom文件中由于我使用了自己的maven服务器,所以请先将distributionManagement节点删除。
另外测试类ExcelUtilTest中测试用的文件路径写的是绝对路径,如果要运行测试代码,请修改该路径(path)。

写着玩的,功能比较简单,不支持公式、图片等高级应用,只是对春数据进行导入导出的操作,欢迎交流。

==================================================
可能有些同学不用maven的,我补张依赖jar文件的图。
==================================================
忘了说明了:基于JDK1.6
  • 大小: 31 KB
3
1
分享到:
评论
5 楼 surelei 2012-07-19  
kakaloto 写道
比如200m的excel,然后jvm1。5G,几个线程并发一下,各么转换为java对象的时候就暴掉了。。。有没有读一行处理一行的方法。。。。


我个人认为,其实真实业务处理时excel文件本身如果超大,比如上G了,就要拆分。如果是并发处理量高的,我会将excel处理的功能做成单独的服务,采用异步处理的方式,这样可以通过控制并发线程数量来限制住最大资源的使用量(比如内存)。

对于你说的逐行读取的方法,貌似POI是不行的,不知道有没有其他开源组件支持逐行读取。
如果你是windows平台,倒是有个不错的好方法,将excel文件配置成ODBC的数据源,通过sql读取,很方便,不过linux下就不能这么玩了。
4 楼 kakaloto 2012-07-18  
比如200m的excel,然后jvm1。5G,几个线程并发一下,各么转换为java对象的时候就暴掉了。。。有没有读一行处理一行的方法。。。。
3 楼 surelei 2012-07-18  
kakaloto 写道
不错-问问风小石,对于巨大的excel导入 有什么好办法不让内存暴掉伐?


不知道你说的巨大是多大?1G的excel么(如果有那么大的excel的话)?不知道你JVM配置的内存多大?
2 楼 kakaloto 2012-07-17  
不错-问问风小石,对于巨大的excel导入 有什么好办法不让内存暴掉伐?
1 楼 JetMah 2012-05-23  
这个思路非常好!!!

相关推荐

Global site tag (gtag.js) - Google Analytics