报表一旦定稿,里面的公式就从帮手变成了隐患:引用别的表、引用别的文件、引用某个已经被删掉的行,任何一处变动都会让整列数字集体变成 #REF!。存档或者交给外部同事时,稳妥的做法是把公式换成它当下算出来的结果——数还是那些数,却不再依赖任何别的东西。反过来看,明细表可能还要继续用公式维护,不能一并清掉。所以真正要拿捏的是范围:清整个工作簿,还是只清其中一块区域。Spire.XLS for JavaScript 的 ClearContent 只清单元格内容、保留格式,把取出的结果写回去,金额的千分位、日期的显示样式都原样留着。Spire.XLS for JavaScript 基于 WebAssembly 在浏览器端直接完成这些操作,通过虚拟文件系统(VFS)管理输入输出文件,无需后端服务支持。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.XLS for JavaScript。以下示例默认已安装 Spire.XLS 并完成 WebAssembly 模块初始化。
删除整个工作簿中的公式
报表要归档、要外发,或者要交给不需要看到算法的人时,公式就是隐患:跨表引用、外部链接、后来被删掉的行,任何一处变动都可能让数字集体失效。把公式换成它当下算出的结果,文件便成了一份不依赖别处、也不会再变的快照——数字、格式、合计都在,只是每一格都固定了下来。整本交付是最常见的情形,因而第一种做法就是把工作簿里每一张工作表都过一遍。具体操作步骤如下:
- 将字体与测试数据文件载入 VFS。
- 用
workbook.LoadFromFile加载工作簿。 - 按
workbook.Worksheets.Count遍历每一张工作表。 - 用
sheet.Range.Cells逐个走过该工作表的单元格,这里走的是工作表的已使用区域。 - 用
cell.HasFormula判断这一格是不是公式。 - 是公式的话,先用
cell.FormulaValue取出它当前算出的结果。 - 用
cell.Clear(xlsModule.ExcelClearOptions.ClearContent)清掉公式——只清内容,格式留在原处。 - 用
cell.Value2把上一步取出的结果写回这一格。 - 用
workbook.SaveToFile保存工作簿。
以下为完整的代码示例,演示如何在 React 中删除整个工作簿中的公式并保留计算值:
function App() {
const removeAllFormulas = 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 = 'RemoveFormulas.xlsx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载工作簿
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 逐张工作表、逐个单元格地找公式
for (let i = 0; i < workbook.Worksheets.Count; i++) {
const sheet = workbook.Worksheets.get(i);
for (const cell of sheet.Range.Cells) {
// 只有公式单元格需要处理:先取出它当前算出的结果,清掉内容,再把结果写回去
if (cell.HasFormula) {
const value = cell.FormulaValue;
cell.Clear(xlsModule.ExcelClearOptions.ClearContent);
cell.Value2 = value;
}
}
}
// 保存工作簿
const outputFileName = 'RemoveAllFormulas.xlsx';
workbook.SaveToFile({ fileName: outputFileName });
// 释放 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>在 Excel 中删除公式并保留计算值</h1>
<button id="remove-all-formulas" onClick={removeAllFormulas}>删除整个工作簿中的公式</button>
</div>
);
}
export default App;
运行后,删除整个工作簿中的公式并保留计算值的效果:

只删除指定区域中的公式
同一张工作表里,有的格子将来不再改动,固化成值最省心;有的格子必须跟着别处联动,公式就得留着。把处理范围收到一段区域,这两种需求便能共存于同一张表,区域之外的公式一律不受影响。具体操作步骤如下:
- 将字体与测试数据文件载入 VFS。
- 用
workbook.LoadFromFile加载工作簿。 - 用
workbook.Worksheets.get(0)取出第一个工作表。 - 用
sheet.Range.get('D3:D10')圈出要处理的那一段区域。 - 用
range.Cells遍历区域内的单元格,区域之外的格子不会进入循环。 - 用
cell.HasFormula判断这一格是不是公式。 - 是公式的话,先用
cell.FormulaValue取出它当前算出的结果。 - 用
cell.Clear(xlsModule.ExcelClearOptions.ClearContent)清掉公式。 - 用
cell.Value2把结果写回这一格。 - 用
workbook.SaveToFile保存工作簿。
以下为完整的代码示例,演示如何在 React 中只删除指定区域中的公式:
function App() {
const removeFormulasInRange = 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 = 'RemoveFormulas.xlsx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}data/`);
// 加载工作簿
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: inputFileName });
// 取第一个工作表,把范围缩到金额那一列
const sheet = workbook.Worksheets.get(0);
const range = sheet.Range.get('D3:D10');
for (const cell of range.Cells) {
if (cell.HasFormula) {
const value = cell.FormulaValue;
cell.Clear(xlsModule.ExcelClearOptions.ClearContent);
cell.Value2 = value;
}
}
// 保存工作簿
const outputFileName = 'RemoveFormulasInRange.xlsx';
workbook.SaveToFile({ fileName: outputFileName });
// 释放 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>在 Excel 中删除公式并保留计算值</h1>
<button id="remove-formulas-in-range" onClick={removeFormulasInRange}>只删除指定区域中的公式</button>
</div>
);
}
export default App;
运行后,只删除指定区域中的公式的效果:

常见问题
清除公式后,单元格的数字格式和底色会一起没掉吗
原因:清单元格用的是 Clear,清掉什么由传进去的 ExcelClearOptions 决定。传 ClearAll 或 ClearFormat 会连格式一起清掉,传 ClearContent 才只清内容。
解决:传 ClearContent。数字格式、字体、底色都留在原处,写回去的值仍旧按原来的样子显示——金额还是带千分位和两位小数,日期还是 2026-03-31 而不是日期序列号 46112。
为什么用 cell.Value 读不到公式算出来的结果
原因:单元格还带着公式时,cell.Value 返回的是公式本身,不是它的结果。
解决:取结果用 FormulaValue,只需要数字时用 FormulaNumberValue。公式被清掉换成值之后,Value 才返回那个数字。
// 仍是公式的单元格:Value 是公式文本,结果在 FormulaValue / FormulaNumberValue 里
const formula = cell.Value; // "=B5*C5"
const result = cell.FormulaNumberValue; // 97280
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







