当前位置: 首页 > article >正文

【WPS】【WORDWORD】【JavaScript】实现微软WORD自动更正的效果

1.效果展示

2.核心代码展示

function readTableData(filePath) {
    let tableData = {};
    let doc = Application.Documents.Open(filePath); // 打开文档
    let table = doc.Tables(1); // 获取第一个表格

    // 遍历表格,存储编号和描述的映射
    for (let i = 1; i <= table.Rows.Count; i++) {
        let number = table.Cell(i, 1).Range.Text.trim(); // 获取编号
        let description = table.Cell(i, 2).Range.Text.trim(); // 获取描述
        tableData[number] = description; // 存储映射
    }

    doc.Close(false); // 关闭文档,不保存更改
    return tableData;
}

function replaceNumbersWithDescriptions1(filePath, tableData) {
    let doc = Application.Documents.Open(filePath); // 打开文档
    let content = doc.Content.Text; // 获取文档内容

    // 遍历表格数据,替换所有匹配的编号
    for (let number in tableData) {
        let cleanNumber = number.replace(/[^\u4e00-\u9fa50-9a-zA-Z]/g, ""); // 清理编号
        let description = tableData[number];
        content = content.replace(new RegExp(cleanNumber, "g"), description); // 替换编号为描述
    }

    doc.Content.Text = content; // 写回文档
    //doc.Save(); // 保存文档
   // doc.Close(); // 关闭文档
}

function replaceNumbersWithDescriptions2(tableData) {
    let doc = Application.ActiveDocument; // 
    let content = doc.Content.Text; // 获取文档内容

    // 遍历表格数据,替换所有匹配的编号
    for (let number in tableData) {
        let cleanNumber = number.replace(/[^\u4e00-\u9fa50-9a-zA-Z]/g, ""); // 清理编号
        let description = tableData[number];
        content = content.replace(new RegExp(cleanNumber, "g"), description); // 替换编号为描述
    }

    doc.Content.Text = content; // 写回文档
    //doc.Save(); // 保存文档
   // doc.Close(); // 关闭文档
}
function main() {
    let tableData = readTableData("C:\\Users\\Administrator\\Desktop\\新建文件夹\\1.docx"); // 读取1.docx
    //版本一:无需打开2.docm
    //replaceNumbersWithDescriptions1("C:\\Users\\Administrator\\Desktop\\新建文件夹\\2.docm", tableData); // 替换2.docm中的编号
    //版本一:需打开2.docm
    replaceNumbersWithDescriptions2("C:\\Users\\Administrator\\Desktop\\新建文件夹\\2.docm", tableData); // 替换2.docm中的编号
}

 3.核心代码讲解

以下是对代码的逐行解释:

1. function readTableData(filePath) {

  • 定义一个名为 readTableData 的函数,该函数接受一个参数 filePath,表示要读取的文档路径。

2. let tableData = {};

  • 创建一个空对象 tableData,用于存储从表格中读取的编号和描述的映射关系。

3. let doc = Application.Documents.Open(filePath);

  • 使用 Application.Documents.Open 方法打开指定路径的文档,并将返回的文档对象赋值给变量 doc

4. let table = doc.Tables(1);

  • 获取文档中的第一个表格,并将其赋值给变量 table

5. for (let i = 1; i <= table.Rows.Count; i++) {

  • 开始一个循环,从表格的第一行遍历到最后一行。

6. let number = table.Cell(i, 1).Range.Text.trim();

  • 获取当前行第一列(即编号列)的文本内容,并使用 trim() 方法去除首尾空白字符,然后将其赋值给变量 number

7. let description = table.Cell(i, 2).Range.Text.trim();

  • 获取当前行第二列(即描述列)的文本内容,并使用 trim() 方法去除首尾空白字符,然后将其赋值给变量 description

8. tableData[number] = description;

  • 将编号和描述的映射关系存储到 tableData 对象中,其中 number 作为键,description 作为值。

9. }

  • 结束循环。

10. doc.Close(false);

  • 关闭文档,false 参数表示不保存对文档的更改。

11. return tableData;

  • 返回 tableData 对象,其中包含了从表格中读取的编号和描述的映射关系。

12. function replaceNumbersWithDescriptions1(filePath, tableData) {

  • 定义一个名为 replaceNumbersWithDescriptions1 的函数,该函数接受两个参数:filePath 表示要处理的文档路径,tableData 是包含编号和描述映射关系的对象。

13. let doc = Application.Documents.Open(filePath);

  • 打开指定路径的文档,并将返回的文档对象赋值给变量 doc

14. let content = doc.Content.Text;

  • 获取文档的全部文本内容,并将其赋值给变量 content

15. for (let number in tableData) {

  • 开始一个循环,遍历 tableData 对象中的所有键(即编号)。

16. let cleanNumber = number.replace(/[^\u4e00-\u9fa50-9a-zA-Z]/g, "");

  • 使用正则表达式去除编号中的非中文字符、数字和字母,并将清理后的编号赋值给变量 cleanNumber

17. let description = tableData[number];

  • 获取当前编号对应的描述,并将其赋值给变量 description

18. content = content.replace(new RegExp(cleanNumber, "g"), description);

  • 使用正则表达式在文档内容中查找所有匹配的编号,并将其替换为对应的描述。

19. }

  • 结束循环。

20. doc.Content.Text = content;

  • 将替换后的文本内容写回文档。

21. //doc.Save();

  • 注释掉的代码,表示保存文档。如果需要保存文档,可以取消注释。

22. // doc.Close();

  • 注释掉的代码,表示关闭文档。如果需要关闭文档,可以取消注释。

23. function replaceNumbersWithDescriptions2(tableData) {

  • 定义一个名为 replaceNumbersWithDescriptions2 的函数,该函数接受一个参数 tableData,表示包含编号和描述映射关系的对象。

24. let doc = Application.ActiveDocument;

  • 获取当前活动的文档对象,并将其赋值给变量 doc

25. let content = doc.Content.Text;

  • 获取当前文档的全部文本内容,并将其赋值给变量 content

26. for (let number in tableData) {

  • 开始一个循环,遍历 tableData 对象中的所有键(即编号)。

27. let cleanNumber = number.replace(/[^\u4e00-\u9fa50-9a-zA-Z]/g, "");

  • 使用正则表达式去除编号中的非中文字符、数字和字母,并将清理后的编号赋值给变量 cleanNumber

28. let description = tableData[number];

  • 获取当前编号对应的描述,并将其赋值给变量 description

29. content = content.replace(new RegExp(cleanNumber, "g"), description);

  • 使用正则表达式在文档内容中查找所有匹配的编号,并将其替换为对应的描述。

30. }

  • 结束循环。

31. doc.Content.Text = content;

  • 将替换后的文本内容写回文档。

32. //doc.Save();

  • 注释掉的代码,表示保存文档。如果需要保存文档,可以取消注释。

33. // doc.Close();

  • 注释掉的代码,表示关闭文档。如果需要关闭文档,可以取消注释。

34. function main() {

  • 定义一个名为 main 的函数,作为程序的入口点。

35. let tableData = readTableData("C:\\Users\\Administrator\\Desktop\\新建文件夹\\1.docx");

  • 调用 readTableData 函数,读取指定路径的文档,并将返回的编号和描述映射关系赋值给 tableData

36. //replaceNumbersWithDescriptions1("C:\\Users\\Administrator\\Desktop\\新建文件夹\\2.docm", tableData);

  • 注释掉的代码,表示调用 replaceNumbersWithDescriptions1 函数,替换指定路径文档中的编号为描述。如果需要使用此版本,可以取消注释。

37. replaceNumbersWithDescriptions2(tableData);

  • 调用 replaceNumbersWithDescriptions2 函数,替换当前活动文档中的编号为描述。

38. }

  • 结束 main 函数。

4.总结:

  • readTableData 函数用于从指定文档中读取表格数据,并返回编号和描述的映射关系。

  • replaceNumbersWithDescriptions1 函数用于替换指定文档中的编号为描述。

  • replaceNumbersWithDescriptions2 函数用于替换当前活动文档中的编号为描述。

  • main 函数是程序的入口,调用上述函数来完成整个替换过程。


http://www.kler.cn/a/502775.html

相关文章:

  • 如何独立SDK模块到源码目录?
  • 51c大模型~合集104
  • 计算机组成原理(1)
  • LKT4304新一代算法移植加密芯片,守护物联网设备和云服务安全
  • windows中,git bash 使用conda命令
  • c#版本、.net版本、visual studio版本之间的对应关系
  • Blazor开发复杂信息管理系统的优势
  • 【Linux】编辑器之神vim使用教程
  • 电力场景红外测温图像均压环下的避雷器识别分割数据集labelme格式2436张1类别
  • 8Hive SQL底层执行原理
  • 如何提高自动化测试覆盖率和效率
  • .NET framework、Core和Standard都是什么?
  • Linux IPC:管道与FIFO汇总整理
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • css盒子水平垂直居中
  • 下载的stable diffudion 模型如何转换到diffusers可用的格式
  • SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!
  • 软考信安21~网络设备安全
  • Android Room 构建问题:There are multiple good constructors
  • 备战春招—高频芯片设计面试题
  • DuckDB:星号(*)表达式完整指南
  • HIVE技术
  • 【AscendC】tiling方案设计不当引起的一个时隐时现的bug
  • CNN中模型的参数量与FLOPs计算
  • Spring MVC数据绑定POJO类型
  • 【动态规划-矩阵】6.最大正方形