在 Web 应用中处理 Excel 文件时,查找和替换数据是常见的需求。Spire.XLS for JavaScript 基于 WebAssembly 在浏览器端直接完成 Excel 操作,通过虚拟文件系统(VFS)管理输入输出文件,无需后端服务支持。它提供了 FindAllString() 和 FindAllNumber() 等查找方法,支持在整个工作表或指定的单元格区域中查找目标数据,并快速将其替换为新的内容,同时还可以通过高亮颜色标记替换后的单元格。
通过 Spire.XLS for JavaScript,您既可以批量替换整个工作表中的文本,也可以将查找范围限定在特定的单元格区域内,在需要精确更新部分数据时更加灵活高效。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.XLS for JavaScript。以下示例默认已安装 Spire.XLS 并完成 WebAssembly 模块初始化。
在 Excel 中查找和替换工作表中的数据
使用 Spire.XLS for JavaScript,您可以在整个工作表中查找包含指定文本的单元格,并将其替换为新的内容。FindAllString() 方法会返回所有匹配的单元格区域,您可以通过设置 range.Text 属性来替换文本,并通过 range.Style.Color 属性为替换后的单元格设置高亮颜色,从而清晰地标记被修改的位置。具体操作步骤如下:
- 创建
Workbook对象并加载已有的 Excel 文件。 - 通过
workbook.Worksheets.get()获取要操作的工作表。 - 使用
worksheet.FindAllString()查找工作表中包含指定文本的所有单元格区域。 - 遍历查找结果,通过设置
range.Text替换文本,并通过range.Style.Color设置高亮颜色。 - 使用
SaveToFile()保存工作簿为 Excel 文件。
下面是一个完整的代码示例,展示了在 React 中查找并替换整个工作表中的数据:
function App() {
const findAndReplace = async () => {
// 获取 Spire.XLS WASM 模块
const xlsModule = window.wasmModule?.spirexls;
// 检查模块是否就绪
if (!xlsModule) {
alert('Spire.Xls is not ready yet');
return;
}
let excelFileName = 'Sample.xlsx';
await window.spire.FetchFileToVFS(excelFileName, '', `${process.env.PUBLIC_URL}static/data/`);
// 创建新工作簿并加载已有的 Excel 文件
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: excelFileName });
// 获取第一个工作表
let worksheet = workbook.Worksheets.get(0);
// 查找工作表中包含 "总计" 文本的所有单元格
let ranges = worksheet.FindAllString("总计", false, false);
// 遍历查找结果,替换文本并设置高亮颜色
for (let range of ranges) {
range.Text = "总支出";
range.Style.Color = xlsModule.Color.get_Yellow();
}
// 保存工作簿
const outputFileName = 'FindAndReplaceData.xlsx';
workbook.SaveToFile({ fileName: outputFileName, version: xlsModule.ExcelVersion.Version2010 });
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 onClick={findAndReplace}>
生成
</button>
</div>
);
}
export default App;
在 Excel 中查找并替换工作表数据

在 Excel 中查找和替换特定单元格区域中的数据
当只需要更新部分数据时,您可以将查找范围限定在特定的单元格区域内。使用 sheet.Range.get() 方法指定目标区域后,range.FindAllString() 会在该区域内查找包含指定文本的单元格,从而确保区域外的数据不受影响。具体操作步骤如下:
- 创建
Workbook对象并加载已有的 Excel 文件。 - 通过
workbook.Worksheets.get()获取要操作的工作表。 - 使用
sheet.Range.get()指定要查找的单元格区域。 - 使用
range.FindAllString()在指定区域内查找包含目标文本的单元格,遍历结果并替换文本、设置高亮颜色。 - 使用
SaveToFile()保存工作簿为 Excel 文件。
下面是一个完整的代码示例,展示了在 React 中查找并替换特定单元格区域中的数据:
function App() {
const findAndReplaceInRange = async () => {
// 获取 Spire.XLS WASM 模块
const xlsModule = window.wasmModule?.spirexls;
// 检查模块是否就绪
if (!xlsModule) {
alert('Spire.Xls is not ready yet');
return;
}
// 示例文件加载到虚拟文件系统(VFS)
let excelFileName = 'FindCellsSample.xlsx';
await window.spire.FetchFileToVFS(excelFileName, '', `${process.env.PUBLIC_URL}static/data/`);
// 创建新工作簿并加载已有的 Excel 文件
const workbook = new xlsModule.Workbook();
workbook.LoadFromFile({ fileName: excelFileName });
// 获取第一个工作表
let worksheet = workbook.Worksheets.get(0);
// 指定要查找的单元格区域
let range = worksheet.Range.get({
row: 1,
column: 1,
lastRow: 12,
lastColumn: 2,
});
// 在指定区域内查找包含 "总计" 文本的单元格
let ranges = range.FindAllString("总计", false, false);
// 遍历查找结果,替换文本并设置高亮颜色
for (let r of ranges) {
r.Text = "总支出";
r.Style.Color = xlsModule.Color.get_Yellow();
}
// 保存工作簿
const outputFileName = 'FindAndReplaceInRange.xlsx';
workbook.SaveToFile({ fileName: outputFileName, version: xlsModule.ExcelVersion.Version2010 });
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>在指定区域查找并替换数据</h1>
<button onClick={findAndReplaceInRange}>
生成
</button>
</div>
);
}
export default App;
在 Excel 中查找并替换特定单元格区域中的数据

常见问题
如何控制查找是否区分大小写或匹配整个单词
原因:FindAllString() 方法的后两个布尔参数分别用于控制查找是否区分大小写以及是否要求匹配整个单词。如果参数设置不当,可能会找到过多或过少的匹配结果。
解决:根据实际需求调整 FindAllString() 的参数:
// 不区分大小写,不要求整个单词匹配
let ranges = worksheet.FindAllString("Area", false, false);
// 区分大小写,要求整个单词匹配
let ranges = worksheet.FindAllString("Total", true, true);
如何在指定区域中查找并替换数字
原因:查找和替换不仅适用于文本,也适用于数字。如果只使用 FindAllString() 处理文本,将无法匹配数值型的单元格。
解决:使用 range.FindAllNumber() 方法在指定区域内查找数字,然后通过设置 Text 属性替换数值:
let numberRanges = range.FindAllNumber(100, true);
for (let r of numberRanges) {
r.Text = "200";
r.Style.Color = xlsModule.Color.get_Yellow();
}
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







