Word 文档与 OpenXML 之间的相互转换是文档处理中高频出现的需求——将 Word 文档导出为 XML,可以让正文内容脱离二进制包结构,便于跨系统交换、批量提取与归档;将 XML 还原为 Word 文档,则可以直接用已有的结构化数据生成规范文档。Spire.Doc for JavaScript 基于 WebAssembly 在浏览器端直接完成双向转换,通过虚拟文件系统(VFS)管理字体和文件资源,无需后端服务支持。OpenXML 的平面文件分为两种格式:Word 2003 的 WordML 与 Word 2007 及以上的 WordXml(Flat OPC),保存时可按目标 Word 版本选择。
本文介绍三个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.Doc for JavaScript 的方法。以下示例默认已安装 Spire.Doc 并完成 WebAssembly 模块初始化。
将 Word 转换为 OpenXML(WordML)
Word 转 OpenXML 的核心流程分为三个阶段:首先通过 FetchFileToVFS 将字体文件和目标 Word 文档载入 WASM 虚拟文件系统;然后实例化 Document 加载文件,调用 SaveToFile 并指定 FileFormat.WordML,将文档另存为 Word 2003 格式的 XML 平面文件;最后从 VFS 读取生成的 XML 文件,封装为 Blob 后触发浏览器下载。
function App() {
const WordToWordML = async () => {
const docModule = window.wasmModule?.spiredoc;
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将示例文件载入 VFS
let inputFileName = 'WordToWordXML.docx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);
// 创建文档实例
const doc = new docModule.Document();
// 从虚拟文件系统加载文档
doc.LoadFromFile(inputFileName);
// 定义输出文件名,保存为 Word 2003 格式的 OpenXML 文件
const outputFileName = 'WordToWordXML-result.xml';
doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.WordML });
// 释放资源
doc.Dispose();
const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 Word 文档转换为 WordML 文件</h1>
<button onClick={WordToWordML}>开始</button>
</div>
);
}
export default App;
通过 SaveToFile 指定 FileFormat.WordML 后,Word 文档被转换为一份 Word 2003 格式的 XML 平面文件

将 Word 转换为 OpenXML(WordXml)
Word 2007 及以上版本的平面文件格式称为 WordXml(Flat OPC),它把 docx 包内的各个部件——正文、样式、关系等——打包进同一个 XML 文件,根节点为 <pkg:package>,在 Word 中同样可以直接打开。转换流程与 WordML 完全一致,仅保存格式不同。核心流程分为三个阶段:首先通过 FetchFileToVFS 将字体文件和目标 Word 文档载入 WASM 虚拟文件系统;然后实例化 Document 加载文件,调用 SaveToFile 并指定 FileFormat.WordXml,将文档另存为 Word 2007 格式的 XML;最后从 VFS 读取生成的 XML 文件,封装为 Blob 后触发浏览器下载。
function App() {
const WordToWordXml = async () => {
const docModule = window.wasmModule?.spiredoc;
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将示例文件载入 VFS
let inputFileName = 'WordToWordXML.docx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);
// 创建文档实例
const doc = new docModule.Document();
// 从虚拟文件系统加载文档
doc.LoadFromFile(inputFileName);
// 定义输出文件名,保存为 Word 2007 格式的 OpenXML 文件
const outputFileName = 'WordToWordXML-result-2007.xml';
doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.WordXml });
// 释放资源
doc.Dispose();
const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 Word 文档转换为 WordXml 文件</h1>
<button onClick={WordToWordXml}>开始</button>
</div>
);
}
export default App;
通过 SaveToFile 指定 FileFormat.WordXml 后,Word 文档的各个部件被合并为一份 Word 2007 格式的 Flat OPC XML 文件

将 OpenXML 转换为 Word
OpenXML 转 Word 的核心流程分为三个阶段:首先通过 FetchFileToVFS 将字体文件和目标 XML 文件载入 WASM 虚拟文件系统;然后实例化 Document 并通过 LoadFromFile 直接加载 XML 文件——Spire.Doc 会根据文件内容自动识别 WordML 与 WordXml 格式,再调用 SaveToFile 将其保存为 Docx2013 格式的 Word 文档;最后从 VFS 读取生成的 .docx 文件,封装为 Blob 后触发浏览器下载。
function App() {
const XMLToWord = async () => {
const docModule = window.wasmModule?.spiredoc;
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将示例文件载入 VFS
let inputFileName = 'XMLToWord.xml';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);
// 创建文档实例
const doc = new docModule.Document();
// 从虚拟文件系统加载 OpenXML 文件
doc.LoadFromFile(inputFileName);
// 定义输出文件名并保存为 Word 文档
const outputFileName = 'XMLToWord-result.docx';
doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.Docx2013 });
// 释放资源
doc.Dispose();
const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 XML 文件转换为 Word 文档</h1>
<button onClick={XMLToWord}>开始</button>
</div>
);
}
export default App;
通过 LoadFromFile 加载 OpenXML 文件并另存为 Word 文档后,XML 中的段落、列表与表格结构被完整还原

常见问题
生成的 XML 在 Word 中打开时提示格式错误
原因:保存格式与目标 Word 版本不匹配。FileFormat.WordML 对应 Word 2003 的 XML 格式,FileFormat.WordXml 对应 Word 2007 及以上的 Flat OPC 格式,两者的结构不同,用低版本 Word 打开高版本格式的文件会失败。
解决:按目标 Word 版本选择对应的枚举值,并将输出文件命名为 .xml:
// Word 2003 及更早版本
doc.SaveToFile({ fileName: 'out.xml', fileFormat: wasmModule.FileFormat.WordML });
// Word 2007 及以上版本
doc.SaveToFile({ fileName: 'out.xml', fileFormat: wasmModule.FileFormat.WordXml });
加载 XML 时报错或转换后内容为空
原因:OpenXML 转 Word 要求输入文件是完整的 WordprocessingML 平面文件,普通的自定义数据 XML 无法被 LoadFromFile 识别。
解决:确认输入的 XML 由 Word 或 Spire.Doc 导出,WordML 格式的根节点是 <w:wordDocument>,WordXml 格式的根节点是 <pkg:package>:
const doc = new wasmModule.Document();
doc.LoadFromFile('XMLToWord.xml');
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







