ET 是 WPS Office 的工作簿格式,文件扩展名为 .et。不同办公软件之间交换工作簿时,格式是否兼容决定了文件能否被直接打开。Spire.XLS for JavaScript 基于 WebAssembly 在浏览器端完成 Excel 与 ET 之间的双向转换,工作簿中的公式、合并区域与数字格式均随转换一并保留,输入输出文件通过虚拟文件系统(VFS)管理,无需后端服务支持。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.XLS for JavaScript。以下示例默认已安装 Spire.XLS 并完成 WebAssembly 模块初始化。
将 Excel 转换为 ET
将 Excel 工作簿保存为 ET,可使工作簿在 WPS 中直接打开。转换改变的只是保存格式:工作簿内容不变,写出时用 fileFormat 参数指明目标格式,单元格中的公式、合并区域与数字格式都会保留。具体操作步骤如下:
- 将字体与测试数据文件载入 VFS。
- 用
workbook.LoadFromFile加载 Excel 工作簿。 - 用
workbook.SaveToFile保存工作簿,把fileFormat指定为xlsModule.FileFormat.ET。 - 用
workbook.Dispose释放 workbook 对象以释放资源。
以下为完整的代码示例,演示如何在 React 中把 Excel 工作簿转换为 ET:
function App() {
const excelToEt = async () => {
// 获取 Spire.XLS WASM 模块
const xlsModule = window.wasmModule?.spirexls;
// 检查模块是否就绪
if (!xlsModule) {
alert('Spire.Xls is not ready yet');
return;
}
// 将字体与测试数据文件载入 VFS
await window.spire.FetchFileToVFS('simsun.ttc', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = 'ProductList.xlsx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载工作簿
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 保存为 ET,格式由 fileFormat 指定
const outputFileName = 'ExcelToEt.et';
workbook.SaveToFile({ fileName: outputFileName, fileFormat: xlsModule.FileFormat.ET });
// 释放 workbook 对象以释放资源
workbook.Dispose();
// 从 VFS 读取结果文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.wps-office.et' });
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>在 React 中把 Excel 与 ET 互转</h1>
<button id="excel-to-et" onClick={excelToEt}>将 Excel 转换为 ET</button>
</div>
);
}
export default App;
运行后,Excel 工作簿转换为 ET 文件的效果:

将 ET 转换为 Excel
将 ET 文件转换为 Excel,是同一过程的反向操作。ET 与 Excel 保存的工作簿内容相同,区别只在文件格式;读入 ET 后按 Excel 的版本写出即可。具体操作步骤如下:
- 将字体与测试数据文件载入 VFS。
- 用
workbook.LoadFromFile加载 ET 文件。 - 用
workbook.SaveToFile保存为 Excel 工作簿,把fileFormat指定为xlsModule.FileFormat.Version2010。 - 用
workbook.Dispose释放 workbook 对象以释放资源。
以下为完整的代码示例,演示如何在 React 中把 ET 文件转换回 Excel:
function App() {
const etToExcel = async () => {
// 获取 Spire.XLS WASM 模块
const xlsModule = window.wasmModule?.spirexls;
// 检查模块是否就绪
if (!xlsModule) {
alert('Spire.Xls is not ready yet');
return;
}
// 将字体与测试数据文件载入 VFS
await window.spire.FetchFileToVFS('simsun.ttc', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = 'ProductList.et';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载工作簿
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 保存为 Excel,同样由 fileFormat 指明版本
const outputFileName = 'EtToExcel.xlsx';
workbook.SaveToFile({ fileName: outputFileName, fileFormat: xlsModule.FileFormat.Version2010 });
// 释放 workbook 对象以释放资源
workbook.Dispose();
// 从 VFS 读取结果文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
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>在 React 中把 Excel 与 ET 互转</h1>
<button id="et-to-excel" onClick={etToExcel}>将 ET 转换为 Excel</button>
</div>
);
}
export default App;
运行后,ET 文件转换为 Excel 工作簿的效果:

常见问题
保存时省略 fileFormat,只写 .et 文件名能存成 ET 吗
原因:fileFormat 是 SaveToFile 的可选参数。没有传它的时候,保存格式由输出文件名的扩展名决定,扩展名认得出来,文件就按那个格式写。
解决:可以省略。把一份 .xlsx 用 workbook.SaveToFile({ fileName: 'ProductList.et' }) 保存,写出的同样是 ET 文件。不过显式写出 fileFormat 更清楚,也不会在输出文件名没有扩展名或扩展名写错时存成别的格式。
转换为 ET 之后,工作簿里的公式会变成固定的值吗
原因:ET 与 Excel 承载的是同一个工作簿对象,转换只是换一个格式,不会去改动单元格的内容。
解决:公式原样保留。在本示例当中,把转出来的 ET 再读回来,金额单元格的 HasFormula 仍是 true,Formula 仍是 =C3*D3,FormulaNumberValue 给出的结果是 58880,合并区域还是五列宽,#,##0.00 的数字格式也留在原处。工作簿里的公式、格式与版面在两次转换之间都不会变。
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







