word、excel文档内容更新技术方案

news2024/11/23 12:42:44

需求背景

惯例先说下背景。
生产、研发业务上往往使用大量word和excel文档来作为资料载体,如操作规程、控制手册、卡片……,这些文档会反复使用到一些设备、工艺等参数数据。参数属性主要是名称、编码、正常范围、报警上下限、单位等,这些参数对应的属性值,是会发生变化的。
文档中使用参数的地方,中文的表达方式多种多样,人来阅读文档没啥问题。但是引用参数的文档,实际没有存在“物理”上的关联关系。当参数属性值调整时,需要更新相应的文档,这时候就出现问题了。因为没有关联关系,没有技术手段自动识别,只能人工一点点改文档,这工作量是相当大,找到需要修改的地方就不容易,并且很容易发生漏改、误改问题,从而导致不一致的问题。

解决方案

软件系统实现

很明显,这是一个模板技术的应用场景。解决该问题,常见的方案是通过软件系统来实现,实现思路如下:
1.对参数进行统一管理,作为管理的基础数据。实现上没什么好说的,常规的应用开发,增删改查,加其他必要的逻辑处理,可通过工作流实现参数的修订与审批,可通过平台实现数据权限控制。
2.对文档进行规范化处理,形成文档模板,通过模板技术,将参数数据填充进模板,生成最终的文档。简单点说,就是把文档中的使用参数的部分,使用约定好的标记来占位,如${HABC1234.name},然后程序替换。HABC1234是参数的唯一性编码,name是参数对应的名称。
3.引入全文搜索技术,使用elastic search,对文档建立索引,实现按参数编码检索该参数被哪些文档文档使用到了(这里实际检索的是文档模板,而不是最终的文档,模板里有参数编码信息,最终文档已经被数据替换了)。

以上基本能解决需求了,在这基础上,还可以做一些小工作,让业务用户使用起来更方便,例如:通过扩展参数属性方式,对参数的基本属性进行组合,如将常用的两个属性,名称和编码组合到一块去,文档中使用时,直接引用这个新属性 H A B C 1234. n a m e A n d C o d e , 而不需要在文档里写 {HABC1234.nameAndCode},而不需要在文档里写 HABC1234.nameAndCode,而不需要在文档里写{HABC1234.name} {HABC1234.code}。
同理,可以进一步设置一些预置的格式化片段,如
编码:HABC1234
名称:风机温度
范围:20-50摄氏度

同样的,也可以对属性进行运算,例如,求合理范围的平均值。

office方案

通过软件系统解决有诸多优点,比如使用简单、管理规范、可扩展性高。但不得不说,软件系统也有一些缺点,比如成本高,交付周期比较长。上面提到,软件系统是常见方案,但放到特定的背景下未必是最优方案。这里说一种轻量级的解决方案,即通过office自身功能来实现。

开始的思路,依然是采用模板,使用office自带的脚本语言 vba来实现占位符的替换。在word中,占位符如何生成,找了下域对象,发现对应的对象。看来下标签,也不是干这事用的。经过长时间的搜索,发现word的一个生僻功能-链接,可以比较好的解决数据引用、关联和更新功能。说实话,这个功能以前从没用过,并且在word的菜单里找了半天,居然没有菜单与之对应。

实现思路如下:
1.使用excel作为参数的数据存储,相当于软件系统中的“数据库”。
2.引用到参数的文档,通过office自身功能,链接到excel的单元格。
3.参数数据更新后,通过office文档的更新链接功能来实现文档同步更新。

下面来说说具体链接怎么用。

先做一个存储参数数据的excel表,命名为“工艺参数清单.xls”,输入示例数据如下:
在这里插入图片描述
选中其中A1单元格,复制。
然后新建一个word文档,命名为“操作规程说明.docx”,打开,在word工具栏中选择“选择性粘贴”

在这里插入图片描述

在弹出窗口中将默认选中的“粘贴”,变更为“粘贴链接”,选择“无格式文本”,确定,效果如下:
在这里插入图片描述

这时候,excel单元格内容已经输出到word文档中了,并且关联了源数据,默认设置是自动更新,当excel里内容变化后,excel和word都处于打开状态,word文档会自动更新。不过当word文档处于关闭状态,这个更新还是需要一个触发,打开word文档后,会自动检测是否有链接,如有,则弹出对话框选择,选择是即可完成更新。
在这里插入图片描述

按照上述操作,在word文档中,已经建立了到excel单元格中数据的关联,这个连接实际保存在word文档中,也就是单向链接,excel中不知道被哪些文档引用过,但word中知道自己引用的数据源是哪个。

在链接上右键点击,可出现菜单“更新链接”,以及“链接的工作表对象”,前者作用是看名字即可,后者可继续展开二级菜单,选择编辑链接 或 打开链接 ,会自动打开对应的excel表。选择“链接…”,则会显示本文档使用的所有链接清单。

在这里插入图片描述

从上图可以看出,链接的实现机制是关联了磁盘上的excel文件,并且使用了绝对路径,单元格的引用遵循了sheet名+行号+列号的方式。

以上操作,也适用于excel类型的文件,链接到另外一个excel文件的单元格,操作上略有差异,比如选择性粘贴的时候,弹出的对话框中粘贴链接在左下角,如下图:

在这里插入图片描述

粘贴后,可看到该链接的形式如下:
在这里插入图片描述

查看所有链接,在工具栏里找到了对应功能按钮来打开对话框。

在这里插入图片描述

通过以上方式,实际已经实现了维护参数基础数据,并保持文档自动更新的目的。
但是,仅仅做这些其实还不够,需要一些额外的工作来弥补这种轻量级实现方式的一些不足。

首先,关联是引用了绝对路径,因此要求作为数据源的excel文件,磁盘位置和文件名均需要保持不变。特别是多人协作的时候,需要每个人的磁盘存放位置也一致,比如都在C盘或D盘建一个根目录来统一存放,这点需要从管理上来规范。

其次,关联是单向的,如果是参数文件修改了,其实并不知道哪些文档引用了这些参数,总不能把文档全部手工打开一遍,来完成更新吧?文档数量如果是几千份,是不是就疯掉了?这时候,就需要使用vba脚本,写个循环,遍历所有文档,调用更新链接操作,这个脚本我没有实际写,但关键的技术问题做了个验证。

Sub updateField()
    Dim aField As Field
    Dim aStory As Range
    ''' Update all fields in the document
    For Each aStory In ActiveDocument.StoryRanges
    For Each aField In aStory.Fields
    aField.Update
    MsgBox (aField.Code)
    Next aField
    Next aStory

End Sub

以上测试代码能正常完成数据更新,结合目录文件遍历就能实现一个完整的脚本了。从这里也可以看出,链接,本质上是word中域的概念,跟目录、页码等是一回事。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL---DDL

目录 一、数据库的相关概念 二、MySQL数据库 1. 关系型数据库(RDBMS) 2. 数据数据库 3. MySQL客户端连接的两种方式 方式一:使用MySQL提供的客户端命令行工具 方式二:使用系统自带的命令行工具执行指令 三、SQL SQL的…

Callable接口_JUC的常见类_多线程环境使用ArrayList

目录 1.Callable接口 相关面试题 2.ReentrantLock 相关面试题 3.信号量Semaphore 4.CountDownLatch 5.多线程环境使用ArrayList 热加载 1.Callable接口 Callable是一个接口,把线程封装了一个"返回值",方便程序员借助多线程的方式计算结果. 类似于Runnable,…

五个了解自己天赋优势的分析工具(三)DISC性格测评

DISC性格测评 DISC系统源于1928年,马斯顿在他的著作《正常人的情绪》(The Emotion of Normal People)中公布了他所发现及发展的性格理论。 该书首次尝试将心理学从纯粹的临床应用向外延伸应用到一般人身上。人有四种基本的性向因子,即Dominance -支配&…

Duet 安装教程

Duet 安装教程1. Duet 概述2. Duet 安装教程2.1 PC 端下载安装Duet2.2 iPad 下载安装 Duet3. 将iPad作为Windows电脑副屏的几种方法结束语1. Duet 概述 Duet 是一款能将iPad或iPhone 变成 Mac 或者 PC 的显示屏的软件; 通过线材连接两台不同的设备,Duet…

抖音聊天”上线,字节最后的社交梦?

转眼间时间来到2023年,距离中国接入国际互联网(即中国互联网起点)已过40年。回顾中国的互联网江湖,先有BAT三足鼎立,后有TMD后浪居上。所谓BAT,即互联网时代领头羊百度、阿里巴巴和腾讯,而TMD则…

【Java入门】常量和变量

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java入门 💬个人格言:不断的翻越一座又一…

HTTP/HTTPS协议介绍

数据来源 HTTP 01 什么是HTTP 超文本传输协议(HyperTextTransferProtocol缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTP( Hyper Text Transfer Protocol超京本传输协议) 是一个基于请求与响应 无状态的,应用层…

mysql快速生成100W条测试数据(7)虚拟网站、IP地址并存入mysql数据库

这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测试数据(1):游戏人物数据 mysql快速生成100W条测试数据(2)公司员工信息 mysql快速生成100W条测…

《Unity Shader 入门精要》第2章 渲染流水线

第2章 渲染流水线 2.1 什么是渲染流水线 渲染流水线的工作在于由一个三维场景出发,生成一张二维图像。换句话说,计算机需要从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张肉眼可见的图像,而这个过程通常由CPU与G…

静态链接过程分析

前期准备这边使用《程序员的自我修养》中的例子//a.cpp extern int shared;void swap(int* a, int *b);int main(){int a 100;swap(&a, &shared); }//b.cpp int shared 1;void swap(int* a, int* b){*a ^ *b ^ *a ^ *b; }通过gcc -c 命令编译出相对应的.o文件&#x…

五,Spring Bean生命周期

1 Spring Bean的生命周期(概念重点) 对象的生命周期:对象从生到死的过程。 Spring工厂中Bean的生命周期并不像想象的那么简单,Spring对工厂中的Bean的生命周期进行了细致的划分,并允许开发者通过编码或配置的方式定制…

Ubuntu18 sqlyog配置mysql5.7远程连接

mysql 配置远程连接 1. mysql安装和配置 sudo apt-get install mysql-server-5.7 systemctl status mysql service mysql status修改mysql的配置文件: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf以下为mysqld.cnf文件主要内容,这里的skip-grant-ta…

基于51单片机的pm2.5空气质量监测仪仿真设计

51单片机pm2.5监测仪仿真设计( proteus仿真程序报告讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0032 51单片机pm2.5监测仪仿真设计主要功能:讲解演示视频仿真程序设计…

代码整洁提升方案

验-言 公共方法都要做参数的校验,参数校验不通过明确抛出异常或对应响应码: Java Bean验证已经是一个很古老的技术了, 会避免我们很多问题; 在接口中也明确使用验证注解修饰参数和返回值, 作为一种协议要求调用方按…

win11 arm 系统安装安卓子系统

一般的x86电脑如果安装android子系统,运行安卓子系统,由于要将android arm代码转译为x86代码,所以效率不一定高,但是如果电脑是arm架构的,通过安卓子系统运行android的程序执行效率就会 高不少,本文参考,都…

JVM面试题

Java内存区域 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader…

Es6的Promise

Promise是异步编程的一种解决方案。简单来说Promise就是一个用来存储数据的对象,它有着一套特殊的存取数据的方式。可以解决异步回调函数/回调地狱问题。创建Promise1.创建Promise时需要一个 回调函数 作为参数这个回调函数会在Promise时 自动调用2.调用回调函数时&…

基于matlab的指纹图像处理、脊线增强、脊线分割、脊线细化、细节点检测和细节点验证

需求分析对于指纹的特征提取包含几个步骤,脊线增强、脊线分割、脊线细化、细节点检测和细节点验证,本次大作业需要针对已经增强的指纹图片进行后续几个步骤,通过多种形态学算法进行分割、细化、细化后处理,找到其中的端点和分叉点…

elasticsearch基础2——es配置文件、jvm配置文件详解

文章目录一、配置文件详解1.1 elasticsearch.yml文件1.1. 1 基础参数1.1.1.1 自定义数据/日志目录1.1.1.2 锁定物理内存1.1.1.3 跨域设置1.1.1.4 其他参数1.1.2 集群类1.1.3 分片类1.1.4 IP绑定类1.1.5 端口类1.1.6 交互类1.1.5 Xpcak安全认证1.1.5.1 xpack内置用户1.1.5.2 xpa…

LabVIEW使用VI脚本向VI添加对象

LabVIEW使用VI脚本向VI添加对象可使用VI脚本向前面板和程序框图添加对象。该教程以向程序框图添加对象为例。按照下列步骤,通过VI脚本向VI添加对象。创建VI前,需先了解VI脚本的基本内容。必须启用VI脚本,才能显示VI脚本选板,使用相…