欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 使用右侧值现象来处理一个word导入登记表的需求

使用右侧值现象来处理一个word导入登记表的需求

2025/9/15 9:41:07 来源:https://blog.csdn.net/qq_37148232/article/details/145634859  浏览:    关键词:使用右侧值现象来处理一个word导入登记表的需求

需求也简单,导word文件用户登记表,有各部门的十几个版本(为什么这么多?不知道)。这里说下谈下我的一些代码做法:
在这里插入图片描述

需求分析:
如果能解决java字段和各项填的值怎么配对的问题,那么就好办了。

经分析,配对问题采用了一种右侧值的思路,即:全部的字段项都是 姓名–>张三 ,也就是左侧是中文key,右侧是value这种型式。这个是确认过的。只要按这个规律,配对是不成问题的。

做法如下:
第一步,模板定义,将每个模板的中文名与java字段名进行对应,这里因为模板和硬编码较多,每个模板我放到xml中定义了。
templateCode:模板code
templateName:模板名称
processor: 执行保存任务的执行器
table index=“2”:word模板里面的第几张表,有的模板有多张说明表。要说明取第几张。


<?xml version="1.0" encoding="UTF-8" ?><!ELEMENT template (table+)><!ATTLIST template templateCode #REQUIRED><!ATTLIST template templateName   #REQUIRED><!ATTLIST template processor   #REQUIRED><!ELEMENT table (cell-single+,cell-collection+)><!ATTLIST table index (1|2|3|4|5) ><!--单个k-v值--><!ELEMENT cell-single EMPTY><!ATTLIST cell-single sort (1|2|3|4|5)  ><!ATTLIST cell-single chinaName #REQUIRED><!ATTLIST cell-single propName #REQUIRED><!ATTLIST cell-single location   (right|under)  ><!--子表集合或其他集合--><!ELEMENT cell-collection (start-header+,end-header+)><!ATTLIST cell-collection subTableCode #REQUIRED><!ATTLIST cell-collection subTableName  #REQUIRED><!ELEMENT start-header EMPTY><!ATTLIST start-header headerName   #REQUIRED><!ATTLIST start-header propName  #REQUIRED><!ELEMENT end-header EMPTY><!ATTLIST end-header headerName  #REQUIRED><?xml version="1.0" en
coding="UTF-8" ?>
<!DOCTYPE template SYSTEM "uniter_import.dtd">
<template templateCode="mingZhu" templateName="民主党派代表人士信息采集表" processor="mingZhuImportUniterProcessor"><table index="2"><cell-single chinaName="姓名" propName="userName"/><cell-single chinaName="性别" propName="sex"/><cell-single chinaName="出生年月" propName="birthday"/><cell-single chinaName="民族" propName="nation"/><cell-single chinaName="籍贯" propName="nativePlace"/><cell-single chinaName="出生地" propName="birthPlace"/><cell-single chinaName="加入党派时间" propName="joinPartyDate"/></table>
</template>

第二步:
解析导入的数据,可使用XWPFDocument 工作来解析docx,TableIterator来解析doc。该工具还可以把那个寸照解析出来,挺好用的。正常的坐标–>值封装成List集合,

@Data
public class TableCellValue {private int row; // 行private int col;  // 列private String cellValue;

第三步,根据xml配置的模板表头,读取到表头的坐标。以姓名为例,假如得到姓名–>(0,0)的坐标。那么姓名的value值必定出现在(张三)–>(1,0),据此可得所有的value值都是(col+1,row),从而解析出姓名=张三,年龄=18 k->v对集合。

第四步,根据姓名=张三对和模板配置的属性对应关系,得到userName–>张三,age–>18。然后构建实体,保存数据。

经实际使用,效果还可以,导了一批2千多用户的存量数据。没出啥问题。但有时会存在一个表头和value相等的BUG。导致读不到正确的表头位置。实际也有人工介入修正的情况。但极少。该功能主要也是做系统上线之初的数据初始化。后面用得较少。也可以接受。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词