aardio 文档

Word 受控编辑

fsys.openXml.docx.editor 为已有 DOCX/DOCM/DOTX/DOTM 提供不启动 Office/WPS 的受控编辑。它基于公共 fsys.openXml.editor,只提交明确修改的主文档部件;未修改部件保留原始解压字节,未知内容不会被重建或删除。

它不是完整 Word 编辑器:不计算域、页码或统计属性,不生成修订,不处理版式、图片、页眉页脚、文本框、内容控件、合并/嵌套表格,也不执行宏、外部关系或嵌入对象。

快速使用

import fsys.openXml.docx.editor;

var ed,err = fsys.openXml.docx.editor.open("/input.docx");
if(!ed) return null,err;

var count,err,detail = ed.replaceText("{{客户}}","张三",{expectedCount=1});
if(count===null){ ed.close(); return null,err; }

var written,err = ed.setTableCells(1,[["张三",0],[false,""]],{row=2;column=1});
if(written===null){ ed.close(); return null,err; }

var output,err = ed.save("/output/report.docx",{overwrite=true});
ed.close();
if(!output) return null,err;
return output,{replaced=count;written=written;detail=detail};

编辑会话只读打开源文件;save 总是另存,默认不覆盖。overwrite=true 也不能覆盖源件或指向同一文件的硬链接别名。用完显式调用 close,失败路径也应关闭会话。

预览结构

var paragraphs,err,warnings = ed.listParagraphs();
var tables,err,warnings = ed.listTables();
var table,err,warnings = ed.getTable(1);

文字替换

var count,err,detail = ed.replaceText("旧值","新值",{
    paragraphs=[1,4];
    expectedCount=2;
});

替换是区分大小写的字面匹配:

表格填值

var written,err = ed.setTableCells(1,[
    ["项目", "数值"],
    ["完成", 0],
    ["通过", false]
],{row=1;column=1});

var one,err = ed.setTableCell(1,2,2,"已完成");

受保护边界

打开时拒绝数字签名、文档编辑保护和修订跟踪。扫描到域、扩展内容、结构修订、合并表或复杂块时,编辑器保留原 XML,并在预览中标出 reason;不会为了“尽量修改”而丢弃未知节点。

save 只修改主文档部件,不更新域缓存、页数、字数、缩略图、应用属性或其他部件。需要完整 Word/WPS 对象模型、域更新、修订、页眉页脚、复杂表格或 PDF 导出时,改用 autos.skills.word 的 COM 入口。

Word 技能入口

import autos.skills.word;
var wd = autos.skills.word;

var ed,err = wd.editDocx("/input.docx");
var path,err,report = wd.writeDocx("/output/new.docx",{blocks=[{text="正文"}]},{overwrite=true});

editDocx 直接返回本会话;writeDocx 直接返回 path,err,report,分别转发 fsys.openXml.docx.editor.open 与 fsys.openXml.docx.builder.write。

Markdown 格式