主要应用技术:poi + betwixt + reflect
一、实际应用过程
1.创建与目标表结构一样,表名为‘{目标表名}_import’的临时表;
2.创建用于存储导入问题数据的表:t_import_error (只需创建一张);
Name Code Data Type Length Precision Mandatory Primary Identifier Displayed Domain 问题id op_id VA36 36 TRUE TRUE TRUE <None> 问题表名 op_name VA50 50 TRUE FALSE TRUE <None> 所在行号 row_no I TRUE FALSE TRUE <None> 问题说明 memo TXT TRUE FALSE TRUE <None> 创建人id create_id VA36 36 TRUE FALSE TRUE <None> 创建人名 create_name VA50 50 TRUE FALSE TRUE <None> 创建时间 create_time VA17 17 TRUE FALSE TRUE <None>
3.创建WEB-INF/excel/{目标表名}_import.xml 配置文件
<?xml version="1.0" encoding="GBK"?> <importExcel> <name>台帐明细导入</name> <!--initSQL 对excel数据进行库表操作之前执行的初始化语句,多条语句用";"分隔 , ${userId} 标识当前登录用户id, 本语句为清除上次导入发现的问题数据--> <initSQL>delete from t_import_error where create_id='${userId}'</initSQL> <!--beforeSaveSQL excel数据由_import临时表转入正式表之前执行的语句,多条语句用";"分隔,${userId} 标识当前登录用户id,可执行删除重复数据等--> <beforeSaveSQL>delete from t_account_detail</beforeSaveSQL> <!--afterSaveSQL excel数据由_import临时表转入正式表之后执行的语句,多条语句用";"分隔,${userId} 标识当前登录用户id--> <afterSaveSQL>delete from t_account_detail_import where create_id='${userId}'</afterSaveSQL> <!-- excelColumn excel显式列名定义 --> <excelColumn> <entry> <!-- key excel列名 --> <key>事项名称</key> <value> <!--column 数据库字段名--> <column>op_name</column> <!--dataType 数据类型 目前支持 varchar、int、float 三种类型--> <dataType>varchar</dataType> <!--length 数据库字段长度, 0表示不限制--> <length>255</length> <!--required 是否必填 true、false --> <required>true</required> <!--transfer 是否进行数据内容转换 true(需配置<className>、<method>、<param>节点)、false --> <transfer>false</transfer> </value> </entry> <entry> <key>台帐分类</key> <value> <column>type_id</column> <dataType>varchar</dataType> <length>100</length> <required>true</required> <transfer>true</transfer> <!--className 负责数据转换的类--> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <!--method 负责数据转换的方法名, 如果要设置字段默认值统一使用 getConst方法并由param设置默认值--> <method>getAccoutTypeIdByName</method> <!--param 负责数据转换的方法对应的参数, 多个参数用","分隔 如<param>${self},varchar:nodeId,int:3,float:15.2</param>,${self}表示读取自身excel表格内容--> <param>${self}</param> </value> </entry> <entry> <key>开始日期</key> <value> <column>begin_date</column> <dataType>date</dataType> <length>8</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>filterDate</method> <param>${self}</param> </value> </entry> <entry> <key>结束日期</key> <value> <column>end_date</column> <dataType>date</dataType> <length>8</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>filterDate</method> <param>${self}</param> </value> </entry> <entry> <key>数据值</key> <value> <column>detail_value</column> <dataType>float</dataType> <length>15</length> <required>true</required> <transfer>false</transfer> </value> </entry> <entry> <key>描述</key> <value> <column>describe</column> <dataType>varchar</dataType> <length>0</length> <required>false</required> <transfer>false</transfer> </value> </entry> </excelColumn> <!-- systemColumn 系统隐式列名定义 --> <systemColumn> <entry> <key>台帐id</key> <value> <column>op_id</column> <dataType>varchar</dataType> <length>36</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>getUUID</method> <param></param> </value> </entry> <entry> <key>创建人id</key> <value> <column>create_id</column> <dataType>varchar</dataType> <length>36</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>getUserId</method> <param></param> </value> </entry> <entry> <key>创建人名</key> <value> <column>create_name</column> <dataType>varchar</dataType> <length>50</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>getUserName</method> <param></param> </value> </entry> <entry> <key>创建时间</key> <value> <column>create_time</column> <dataType>varchar</dataType> <length>17</length> <required>true</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>getNowInput</method> <param></param> </value> </entry> <entry> <key>修改人id</key> <value> <column>modify_id</column> <dataType>varchar</dataType> <length>36</length> <required>false</required> <transfer>true</transfer> <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className> <method>getConst</method> <param>varchar:admin</param> </value> </entry> </systemColumn> </importExcel>
4.页面传参即可使用
<input type="hidden" name="tableTarget" value="t_account_detail"/>
<input type="file" name="excel"/>