将 Excel 转换为 CSV 和将 CSV 转换为 Excel 是日常办公和数据处理中的常见操作,尤其在跨平台数据交换和集成的过程中尤为重要。Excel(.xlsx)文件是一种功能强大的电子表格格式,它不仅支持存储大量的数据,还允许用户使用复杂的公式、图表、数据透视表、条件格式化等高级功能,广泛应用于财务分析、数据分析、报告生成等场景。而 CSV(逗号分隔值)文件则是一种简单的文本格式,它通过逗号作为分隔符来分隔数据,每一行代表一条记录,数据不包含任何格式化信息、公式或图表。这篇文章将介绍如何使用 Spire.XLS for JavaScript 在 React 中将 Excel 文档转换为 CSV 格式和将 CSV 文档转换为 Excel 格式。
安装 Spire.XLS for JavaScript
要在 React 应用程序中实现将 Excel 转换为 CSV 和将 CSV 转换为 Excel,首先需要下载 Spire.XLS for JavaScript,或者通过 npm 进行安装:
npm i spire.xls
安装完成后,将 Spire.Xls.Base.js 和 Spire.Xls.Base.wasm 文件复制到项目的 public 文件夹中。
详细的安装和配置步骤,请参考此教程:如何在 React 项目中集成 Spire.XLS for JavaScript
在 React 中将 Excel 转换为 CSV
Spire.XLS for JavaScript 提供了 Worksheet.SaveToFile() 方法,允许开发者将工作簿中的特定工作表保存为独立的 CSV 文件。使用 Spire.XLS for JavaScript 将 Excel 工作表转换为 CSV 的核心步骤如下:
- 使用 wasmModule.Workbook.Create() 方法创建一个 Workbook 对象。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 使用 Workbook.Worksheets.get(index) 方法获取特定的工作表。
- 使用 Worksheet.SaveToFile() 方法将工作表保存为 CSV 格式。
- JavaScript
import React, { useState, useEffect } from 'react';
function App() {
// 保存已加载的WASM模块
const [wasmModule, setWasmModule] = useState(null);
// 在组件挂载时加载WASM模块
useEffect(() => {
const loadWasm = async () => {
try {
// 通过全局窗口对象访问模块和spirexls
const { Module, spirexls } = window;
// 在初始化运行时设置wasmModule状态
Module.onRuntimeInitialized = () => {
setWasmModule(spirexls);
};
} catch (err) {
// 记录加载过程中出现的任何错误
console.error('加载WASM模块失败:', err);
}
};
// 创建一个script元素来加载WASM JavaScript文件
const script = document.createElement('script');
script.src = `${process.env.PUBLIC_URL}/Spire.Xls.Base.js`;
script.onload = loadWasm;
// 将script添加到文档的body中
document.body.appendChild(script);
// 在组件卸载时执行删除script的清理函数
return () => {
document.body.removeChild(script);
};
}, []);
// 执行将Excel工作表转换为CSV的函数
const ExcelToCSV = async () => {
if (wasmModule) {
// 将输入文件加载到虚拟文件系统(VFS)中
const inputFileName = '示例.xlsx';
await wasmModule.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/`);
// 创建一个新的工作簿
const workbook = wasmModule.Workbook.Create();
// 加载现有的Excel文档
workbook.LoadFromFile({ fileName: inputFileName });
// 获取第一个工作表
let sheet = workbook.Worksheets.get(0);
// 指定输出CSV文件路径
const outputFileName = 'ExcelToCSV.csv';
// 将工作表保存为CSV
sheet.SaveToFile({
fileName: outputFileName,
separator: ",",
encoding: wasmModule.Encoding.get_UTF8()
});
// 读取保存的文件并转换为Blob对象
const modifiedFileArray = wasmModule.FS.readFile(outputFileName);
const modifiedFile = new Blob([modifiedFileArray], { type: 'text/csv' });
// 为Blob创建一个URL并启动下载
const url = URL.createObjectURL(modifiedFile);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
// 清理工作簿使用的资源
workbook.Dispose();
}
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>使用JavaScript在React中将Excel工作表转换为CSV</h1>
<button onClick={ExcelToCSV} disabled={!wasmModule}>
转换
</button>
</div>
);
}
export default App;
React 应用程序编译成功后,将在默认网页浏览器中打开,通常是 http://localhost:3000。
点击“转换”就能下载转换的 CSV 文件。
在 React 中将 CSV 转换为 Excel
Spire.XLS for JavaScript 中的 Workbook.LoadFromFile() 方法也可以用于加载 CSV 文件。加载完成后,开发者可以使用 Workbook.SaveToFile() 方法将其保存为 Excel 文件。使用 Spire.XLS for JavaScript 将 CSV 文件转换为 Excel 的核心步骤如下:
- 使用 wasmModule.Workbook.Create() 方法创建一个 Workbook 对象。
- 使用 Workbook.LoadFromFile() 方法加载 CSV 文件。
- 使用 Workbook.Worksheets.get(index) 方法获取特定的工作表。
- 使用 CellRange.IgnoreErrorOptions 属性忽略在将特定单元格范围内的数字保存为文本时可能出现的错误。
- 使用 CellRange.AutoFitColumns() 方法自动调整列宽。
- 使用 Workbook.SaveToFile() 方法将 CSV 文件保存为 Excel 格式。
- JavaScript
import React, { useState, useEffect } from 'react';
function App() {
// 保存已加载的WASM模块
const [wasmModule, setWasmModule] = useState(null);
// 在组件挂载时加载WASM模块
useEffect(() => {
const loadWasm = async () => {
try {
// 通过全局窗口对象访问模块和spirexls
const { Module, spirexls } = window;
// 在初始化运行时设置wasmModule状态
Module.onRuntimeInitialized = () => {
setWasmModule(spirexls);
};
} catch (err) {
// 记录加载过程中出现的任何错误
console.error('加载WASM模块失败:', err);
}
};
// 创建一个script元素来加载WASM JavaScript文件
const script = document.createElement('script');
script.src = `${process.env.PUBLIC_URL}/Spire.Xls.Base.js`;
script.onload = loadWasm;
// 将script添加到文档的body中
document.body.appendChild(script);
// 在组件卸载时执行删除script的清理函数
return () => {
document.body.removeChild(script);
};
}, []);
// 执行将CSV文件转换为Excel的函数
const CSVToExcel = async () => {
if (wasmModule) {
// 将输入文件加载到虚拟文件系统(VFS)中
const inputFileName = 'Sample.csv';
await wasmModule.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/`);
// 创建一个新的工作簿
const workbook = wasmModule.Workbook.Create();
// 加载现有的CSV文件
workbook.LoadFromFile({ fileName: inputFileName, separator: ",", row: 1, column: 1 });
// 获取第一个工作表
let sheet = workbook.Worksheets.get(0);
// 忽略转换过程中将数字保存为文本时可能的错误
sheet.Range.get("A1:E7").IgnoreErrorOptions = wasmModule.IgnoreErrorType.NumberAsText;
// 自动调整工作表中已使用范围的列宽
sheet.AllocatedRange.AutoFitColumns();
// 指定输出Excel文件路径
const outputFileName = 'CSVToExcel.xlsx';
// 保存修改后的工作簿到指定路径
workbook.SaveToFile({ fileName: outputFileName, version: wasmModule.ExcelVersion.Version2010 });
// 读取保存的文件并转换为Blob对象
const modifiedFileArray = wasmModule.FS.readFile(outputFileName);
const modifiedFile = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
// 为Blob创建一个URL并启动下载
const url = URL.createObjectURL(modifiedFile);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
// 清理工作簿使用的资源
workbook.Dispose();
}
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>使用JavaScript在React中将CSV文件转换为Excel</h1>
<button onClick={CSVToExcel} disabled={!wasmModule}>
转换
</button>
</div>
);
}
export default App;
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。