使用右侧值现象来处理一个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。导致读不到正确的表头位置。实际也有人工介入修正的情况。但极少。该功能主要也是做系统上线之初的数据初始化。后面用得较少。也可以接受。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17946.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言 】C语言 桌游开发数字竞拍&#xff08;源码…

数据结构——红黑树的实现

目录 1 红黑树的概念 1.1 红黑树的规则 1.2 红黑树是如何确保最长路径不超过最短路径的2倍的&#xff1f; 1.3 红黑树的效率 2 红黑树的实现 2.1 红黑树的结构 2.2 红黑树的插入 2.2.1 红黑树插入节点的大概过程 2.2.2 情况1&#xff1a;只变色&#xff0c;不旋转 2.2.3 情况…

Spring Boot中使用Flyway进行数据库迁移

文章目录 概要Spring Boot 集成 FlywayFlyway 其他用法bug错误Flyway版本不兼容数据库存在表了Flyway 的校验和&#xff08;Checksum&#xff09;不匹配 概要 在 Spring Boot 项目开发中&#xff0c;数据库的变更不可避免。手动执行 SQL 脚本不仅容易出错&#xff0c;也难以维…

多态、虚函数、动态绑定、虚指针加虚表是同一件事情。

编译会自动加红色代码 左边拥有右边。由内而外构造、由外到内进行析构。 虚指针跟虚表。当一个类有虚函数的时候&#xff0c;对象里面就会多一个指针。从内存角度思考继承。 静态绑定。现在如果通过指针去调用虚函数&#xff0c;编译器就不会进行静态绑定&#xff0c;而做动态绑…

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL开源项目&#xff08;Chat2DB、SQL Chat 、Wren AI 、Vanna&#xff09; 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代&#xff0c;将自然语言查询转化为结构化查询语言&#xff08;SQL&#xff09;的能力变得日益重要。无论是小型创业…

Qwen2-VL 的重大省级,Qwen 发布新旗舰视觉语言模型 Qwen2.5-VL

Qwen2.5-VL 是 Qwen 的新旗舰视觉语言模型&#xff0c;也是上一代 Qwen2-VL 的重大飞跃。 Qwen2.5-VL主要特点 视觉理解事物&#xff1a;Qwen2.5-VL不仅能够熟练识别花、鸟、鱼、昆虫等常见物体&#xff0c;而且还能够分析图像中的文本、图表、图标、图形和布局。 代理性&…

2. grafana插件安装并接入zabbix

一、在线安装 如果不指定安装位置&#xff0c;则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…

DeepSeek全方位解读:模型介绍,优势及应用场景

DeepSeek全方位解读&#xff1a;领先科技背后的革新力量 前言1.DeepSeek整体介绍2.DeepSeek-R13.DeepSeek-V34.DeepSeek系列模型之间的关系5.Deepseek优势及应用场景6.模型参数与量化精度的关系7.行业部署Deepseek及应用情况 前言 在当今快速发展的科技世界里&#xff0c;人工…

电脑端调用摄像头拍照:从基础到实现

文章目录 1. 了解navigator.mediaDevices.getUserMedia API2. 创建 HTML 结构3. 编写 JavaScript 代码3.1 打开摄像头3.2 拍照 4. 完整代码5. 测试6. 注意事项及部署 在现代 Web 开发中&#xff0c;调用摄像头进行拍照是一个常见的功能&#xff0c;尤其是在需要用户上传头像、进…

windows平台上 oracle简单操作手册

一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…

3. 导入官方dashboard

官方dashboard&#xff1a;https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注&#xff1a;有网络的情况想可以使用ID&#xff0c;无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…

你如何利用SIMD(如SSE/AVX)优化图像处理的性能?

SIMD优化问题 1. SIMD 在图像处理中的优化方式2. 典型应用场景3. SIMD 的常见优化技巧4. 总结 利用 SIMD&#xff08;Single Instruction, Multiple Data&#xff09; 指令集&#xff08;如 SSE/AVX/AVX2/AVX-512&#xff09;优化图像处理的性能&#xff0c;可以极大地提升计算…

高并发场景下,如何用无锁实现高性能LRU缓存?

《百万人高并发场景下&#xff0c;我如何用无锁实现高性能LRU缓存&#xff1f;》 LRU算法核心原理 LRU&#xff08;Least Recently Used&#xff09;算法是缓存系统的核心淘汰策略&#xff0c;其核心逻辑可以用一张流程图描述&#xff1a; &#xff08;图&#xff1a;访问数…

HAL库框架学习总结

概述&#xff1a;HAL库为各种外设基本都配了三套 API&#xff0c;查询&#xff0c;中断和 DMA。 一、HAL库为外设初始化提供了一套框架&#xff0c;这里以串口为例进行说明&#xff0c;调用函数 HAL_UART_Init初始化串口&#xff0c;此函数就会调用 HAL_UART_MspInit&#xff0…

LAWS是典型的人机环境系统

致命性自主武器系统&#xff08;Lethal Autonomous Weapons Systems&#xff0c;LAWS&#xff09;是一种典型的人机环境系统&#xff0c;它通过高度集成的传感器、算法和武器平台&#xff0c;在复杂的战场环境中自主执行任务。LAWS能够自主感知环境、识别目标、做出决策并实施攻…

【16届蓝桥杯寒假刷题营】第1期DAY4

4.可达岛屿的个数 - 蓝桥云课 题目背景 在一个神奇的魔法世界中&#xff0c;有一座古老的迷幻之城。迷幻之城被分成 n 个鸟屿&#xff0c;编号从 1 到 n&#xff0c;共有 m 座桥。迷幻之城的居民们希望能够建立起紧密的联系&#xff0c;每个岛屿上的居民都想知道自己最多能到…

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…

数据结构 04

4. 栈 4.2. 链式栈 4.2.1. 特性 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式存储结构 操作&#xff1a;创建&#xff0c;入栈&#xff0c;出栈&#xff0c;清空&#xff0c;获取 4.2.2. 代码实现 头文件 LinkStack.h #ifndef __LINKSTACK_H__ #define __LINKST…