使用SuperDoc创建、编辑和操作DOCX文件 - 一个具有自定义渲染管道的现代文档编辑器。当需要以编程方式处理文档时使用。
SuperDoc Skill.SuperDoc是提供全格式化控制的程序文档操作的现代 DOCX 编辑器.是一项面向实际任务的技能,主要用于Instroduct: v1.17.0 at/usr/local/lib/node modules/superdoc QQQ快速启动。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
SuperDoc 是一款现代化的 DOCX 编辑器,支持以编程方式操作文档,并提供完整的格式控制能力。
已安装版本:v1.17.0,位于 /usr/local/lib/node_modules/superdoc
const { Document, Paragraph, TextRun } = require('superdoc');
const doc = new Document({
sections: [{
children: [
new Paragraph({
children: [
new TextRun({ text: "Hello World", bold: true })
]
})
]
}]
});
// 保存为文件
const fs = require('fs');
const Packer = require('superdoc').Packer;
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync('output.docx', buffer);
});
const { Document } = require('superdoc');
const fs = require('fs');
// 加载已有 DOCX 文件
const buffer = fs.readFileSync('input.docx');
const doc = await Document.load(buffer);
// 查找并替换文本
doc.sections[0].children.forEach(para => {
para.children.forEach(run => {
if (run.text) {
run.text = run.text.replace(/Company A/g, 'Company B');
}
});
});
// 保存修改后的文档
const output = await Packer.toBuffer(doc);
fs.writeFileSync('output.docx', output);
const { Document, Paragraph, TextRun } = require('superdoc');
const fs = require('fs');
// 加载模板
const template = fs.readFileSync('template.docx');
// 生成个性化文档
const clients = require('./clients.json');
for (const client of clients) {
const doc = await Document.load(template);
// 替换占位符
doc.sections[0].children.forEach(para => {
para.children.forEach(run => {
if (run.text) {
run.text = run.text
.replace('{{NAME}}', client.name)
.replace('{{EMAIL}}', client.email);
}
});
});
const output = await Packer.toBuffer(doc);
fs.writeFileSync(`output/${client.id}.docx`, output);
}
Document、Paragraph、TextRun、PackerPacker.toBuffer() 或 Packer.toBlob() 导出Document.load(buffer)doc.sections[i].children(获取段落)run.text 或格式属性Packer.toBuffer(doc)常见问题:
fs.readFileSync() 前检查路径是否正确Document.load() 包裹在 try-catch 中处理异常SuperDoc 默认依赖浏览器 API。在 CLI 或无头环境中需额外配置:
初始化设置(一次性):
npm install --global superdoc jsdom
模拟浏览器 API:
const { JSDOM } = require('jsdom');
const dom = new JSDOM('');
global.window = dom.window;
global.document = window.document;
global.localStorage = {
getItem: () => null,
setItem: () => {},
removeItem: () => {}
};
// 此时可安全引入 SuperDoc
const { Document } = require('superdoc');
替代方案:使用 browser 工具
如需复杂渲染或依赖 UI 的功能,可使用 OpenClaw 的 browser 工具,在真实浏览器环境中运行 SuperDoc。
安装:
npm install @superdoc-dev/react
基础用法:
import { SuperDocEditor } from '@superdoc-dev/react';
import { useState } from 'react';
function App() {
const [doc, setDoc] = useState(null);
return (
{
// 处理保存逻辑
const blob = new Blob([buffer], {
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
});
// 下载或上传该 Blob
}}
/>
);
}
关键 Props:
document:Document 实例或 nullonChange:文档内容变更时的回调函数onSave:用户触发保存时,传入 buffer 的回调函数toolbar:自定义工具栏配置(可选)如需查阅完整 API 参考、高级格式控制、修订跟踪(tracked changes)及自定义渲染等功能:
references/superdoc-reference.md“localStorage is not defined”
→ 添加 localStorage 模拟实现(详见“无头 Node.js 使用方式”章节)
“Cannot read property 'children' of undefined”
→ 文档结构可能为空;请检查 doc.sections.length > 0
大文件处理缓慢或崩溃
→ 建议分批处理;对大于 10MB 的文件考虑使用流式(streaming)方式
格式未被保留
→ 请确保仅修改对象属性,而非直接替换整个对象
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.6万人学习
共89课时 | 133.1万人学习
共49课时 | 82.1万人学习