UOS 是 UOF 规范中的电子表格格式,文件扩展名为 .uos,支持该规范的办公套件可以直接打开。把 Excel 报表交给这类办公环境时,对方若不支持 .xlsx,就需要先转换为 UOS;反过来收到 UOS 文件,也要转换回 Excel 才能用熟悉的工具继续编辑。转换只更换保存格式,工作簿中的公式、合并区域、数字格式与文字格式都随文件一并保留。Spire.XLS for JavaScript 基于 WebAssembly 在浏览器端完成上述转换,输入输出文件通过虚拟文件系统(VFS)管理,无需后端服务支持。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.XLS for JavaScript。以下示例默认已安装 Spire.XLS 并完成 WebAssembly 模块初始化。
将 Excel 转换为 UOS
把 Excel 工作簿保存为 UOS,是为了让只识别 UOF 格式的办公套件能直接打开报表。转换改变的只是保存格式,工作表名称、合并区域与数字格式保持不变;公式单元格需要在保存前计算一次,才能连同结果一并写入。
将 Excel 转换为 UOS 的写法与结果:
| 写法 | 得到的结果 |
|---|---|
window.spire.FetchFileToVFS |
把字体文件与 Excel 文件载入虚拟文件系统 |
workbook.LoadFromFile({ fileName }) |
载入 Excel 工作簿 |
workbook.CalculateAllValue() |
计算工作簿中的全部公式 |
xlsModule.FileFormat.UOS |
指定目标保存格式为 UOS |
workbook.SaveToFile({ fileName, fileFormat }) |
把工作簿以 UOS 格式写入虚拟文件系统 |
具体操作步骤如下:
- 用
window.spire.FetchFileToVFS把字体文件与 Excel 测试文件载入 VFS。 - 用
new Workbook()新建工作簿,再用workbook.LoadFromFile载入测试文件。 - 用
workbook.CalculateAllValue()计算工作簿中的公式。 - 调用
workbook.SaveToFile,把fileFormat指定为xlsModule.FileFormat.UOS,写出ExcelToUos.uos。 - 用
workbook.Dispose释放 workbook 对象,再从 VFS 读取结果文件并触发下载。
以下为完整的代码示例,演示如何在 React 中把 Excel 工作簿转换为 UOS:
function App() {
const excelToUos = 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 = 'SalesReport.xlsx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载工作簿
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 计算工作簿中的公式,公式单元格才会带上结果值
workbook.CalculateAllValue();
// 保存为 UOS,格式由 fileFormat 指定
const outputFileName = 'ExcelToUos.uos';
workbook.SaveToFile({ fileName: outputFileName, fileFormat: xlsModule.FileFormat.UOS });
// 释放 workbook 对象以释放资源
workbook.Dispose();
// 从 VFS 读取结果文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/octet-stream' });
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 与 UOS 互转</h1>
<button id="excel-to-uos" onClick={excelToUos}>将 Excel 转换为 UOS</button>
</div>
);
}
export default App;
将 Excel 工作簿转换为 UOS 格式后的文件:

将 UOS 转换为 Excel
收到 UOS 文件后,转换回 Excel 是同一过程的反向操作。UOS 与 Excel 保存的是同一份工作簿内容,读取时工作表名称、单元格数据与样式一并还原,公式及其缓存结果也会读回,写出时不需要再计算一遍。转换完成后即可用 Excel 或在线表格工具打开文件,继续编辑或参与后续的汇总与打印。
将 UOS 文件转换为 Excel 的写法与结果:
| 写法 | 得到的结果 |
|---|---|
window.spire.FetchFileToVFS |
把字体文件与 UOS 文件载入虚拟文件系统 |
workbook.LoadFromFile({ fileName }) |
读取 UOS 文件并识别为工作簿 |
xlsModule.FileFormat.Version2010 |
指定保存为 Excel 2010 及以上版本的格式 |
workbook.SaveToFile({ fileName, fileFormat }) |
把工作簿以 Excel 格式写入虚拟文件系统 |
window.dotnetRuntime.Module.FS.readFile |
从 VFS 读回结果文件并触发下载 |
具体操作步骤如下:
- 用
window.spire.FetchFileToVFS把字体文件与 UOS 测试文件载入 VFS。 - 用
new Workbook()新建工作簿,再用workbook.LoadFromFile载入 UOS 文件。 - 调用
workbook.SaveToFile,把fileFormat指定为xlsModule.FileFormat.Version2010,写出UosToExcel.xlsx。 - 用
workbook.Dispose释放 workbook 对象,再从 VFS 读取结果文件并触发下载。
以下为完整的代码示例,演示如何在 React 中把 UOS 文件转换回 Excel:
function App() {
const uosToExcel = 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 = 'SalesReport.uos';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载 UOS 文件
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 保存为 Excel,版本由 fileFormat 指定
const outputFileName = 'UosToExcel.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 与 UOS 互转</h1>
<button id="uos-to-excel" onClick={uosToExcel}>将 UOS 转换为 Excel</button>
</div>
);
}
export default App;
将 UOS 文件转换为 Excel 格式后的工作簿:

常见问题
转换后 UOS 文件中的公式单元格为什么是空的
原因:导出 UOS 时,单元格的公式与数值取自工作簿当前的计算结果。载入工作簿后若没有调用 CalculateAllValue,公式单元格尚未计算,写出时会被当作空单元格处理,公式与数值都无法保留。
解决:在 workbook.LoadFromFile 之后、workbook.SaveToFile 之前调用一次 workbook.CalculateAllValue(),再按 FileFormat.UOS 保存,公式单元格就会同时带上公式与计算结果。
保存时省略 fileFormat,只写 .uos 扩展名能存成 UOS 吗
原因:fileFormat 是 SaveToFile 的可选参数。没有传入时,保存格式由输出文件名的扩展名推断,扩展名能够识别就按该格式写出。
解决:可以省略。把输出文件名写成 ExcelToUos.uos 后直接调用 workbook.SaveToFile({ fileName: outputFileName }),写出的同样是 UOS 文件。显式写出 fileFormat 更稳妥,输出文件名缺少扩展名或扩展名写错时,也不会存成其他格式。
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







