zoukankan      html  css  js  c++  java
  • NPOI 超简单的导出导入

     

    首先说说,第一次遇到过匿名导出的那个时候是在我在北京第一家公司,简单的声明一个对象就可以导出,那时候感觉高大上,自己也想研究研究,但是因为头将代码后来加密了根本看不到。好吧,研究了研究放弃了,后来,因为个人原因离职了。

    然后进入了一个外包公司,有个功能需求是导入,导出Excel的需求,当时不想复制粘贴简单操作,也因为受到这家公司动态创建实体的代码上的理解,也不喜欢同事导出时先保存到服务器的逻辑,便用NPOI重写了一份帮助类。

    因为时间太长了,更换了电脑,当时测试的Demo已经没有了,我分拆出来一个吧。

    实现功能:

    注:功能目前只支持单Sheet

    导入:支持List和DataTable格式,支持数据非空验证。

    导出:支持List和DataTable格式,支持Excel格式,支持匿名类List导出及简单样式操作。

    定义Excel和实体类及DataTable的对应列实体,此实体主要是用于帮助定义导入导出时的字段对应关系。

    及导入是非空验证,导出时配置简单样式等。

    下图是主要类结构图:

    ExcelColumn是单元格的列定义的实体类;

    ExCelColumns是列的集合定义列。

    ExcelStream 是防止NPOI释放操作,因为NPOI2开始至今Response到浏览器会出现错误,后来发现是因为内存释放导致的。

    NPOIExelHelper 是导入导出的调用方法。

    clip_image001

    clip_image003

    clip_image004

    clip_image006

    帮助类的代码不贴了,稍后传上去各位自己下载,因当时开始的考虑与后来的考虑不一致导致代码有部分重复,没有做整理,谅解。

    两个导入节点配置,当然你也可以不用配置,那么导入的第一行的单元格直接对应实体类的列或DataTable的表格。

    <?xml version="1.0" encoding="utf-8" ?>

    <root>

    <Inbound>

    <!--默认读取节点-->

    <row height="20" title="入库SN信息" sheetname="sheet1" ignoreerr="false">

    <column key="库房所在地" name="WarehouseName" />

    <column key="采购订单号" name="PurchaseNumber"></column>

    <column key="批次编号" name="BatchNumber" required="true"></column>

    <column key="CODE" name="Code" required="true"></column>

    <column key="序列号" name="SN" required="true"></column>

    <column key="Configid/Bom" name="ConfigId"></column>

    <column key="产品描述" name="ProductDescription"></column>

    <column key="入库数量" name="Amount"></column>

    </row>

    </Inbound>

    <Outbound>

    <row height="50" title="出库SN信息" sheetname="sheet1" ignoreerr="false">

    <column key="库房所在地" name="WarehouseName" />

    <column key="出库单号" name="OutBoundNumber" required="true"></column>

    <column key="合同号" name="ContractNumber"></column>

    <column key="CODE" name="Code" required="true"></column>

    <column key="序列号" name="SN" required="true"></column>

    <column key="Configid/Bom" name="ConfigId"></column>

    <column key="产品描述" name="ProductDescription"></column>

    <column key="出库数量" name="Amount"></column>

    </row>

    </Outbound>

    </root>

    其中ignoreerr是导入是是否忽略错误导入,一般只是否非空验证错误。

    required为此列是否非空验证。

    下面我们就做一个导入导出测试。因为本人不喜欢用DataTable,所以DataTable方式不做Demo。但是实体类里面支持Dt导入导出。

    首先,声明实体类:

    clip_image007

    配置导入导出XML:

    clip_image008

    导入代码:

    clip_image009

    导出代码:

    clip_image011

    clip_image013

    源码地址:下载链接

  • 相关阅读:
    算法笔记_035:寻找最小的k个数(Java)
    (中级篇 NettyNIO编解码开发)第六章-编解码技术
    (入门篇 NettyNIO开发指南)第五章-分隔符和定长解码器使用
    (入门篇 NettyNIO开发指南)第四章-TIP黏包/拆包问题解决之道
    (入门篇 NettyNIO开发指南)第三章-Netty入门应用
    (基础篇 走进javaNIO)第二章-NIO入门
    (基础篇 走进javaNIO)第一章-java的i/o演进之路
    Apache Commons 工具类介绍及简单使用
    SimpleDateFormat使用和线程安全问题
    Calendar使用
  • 原文地址:https://www.cnblogs.com/JW-NET/p/4900092.html
Copyright © 2011-2022 走看看