【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
函数是程序的入口,调用上述函数来完成整个替换过程。