背景
在前端开发过程中,我们经常需要读取 Excel 文件中的数据,例如数据导入、数据导出等操作。传统的方式是使用 Excel 应用程序自带的 API 进行读取,但这种方式需要安装 Microsoft Office 等软件,而且在 Linux 等非 Windows 系统中也无法使用。因此,我们可以使用 Node.js 的一些库来读取 Excel 文件中的数据。常用的库有 xlsx
和 exceljs
等。
问题及解决方式
问题1:如何读取 Excel 文件?
使用 xlsx
库可以方便地读取 Excel 文件中的数据。下面是一个简单的示例代码:
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); const ws = wb.Sheets[wb.SheetNames[0]]; const data = XLSX.utils.sheet_to_json(ws); console.log(data);
其中,require('xlsx')
导入 xlsx
库,XLSX.readFile('file.xlsx')
读取 Excel 文件,wb.Sheets[wb.SheetNames[0]]
获取第一个 Sheet,XLSX.utils.sheet_to_json(ws)
将 Sheet 转换为 JSON 对象。
如果使用 exceljs
库,代码如下:
// javascriptcn.com 代码示例 const Excel = require('exceljs'); const workbook = new Excel.Workbook(); workbook.xlsx.readFile('file.xlsx') .then(function() { const worksheet = workbook.getWorksheet(1); const data = []; worksheet.eachRow(function(row, rowNumber) { data.push(row.values); }); console.log(data); });
其中,require('exceljs')
导入 exceljs
库,workbook.xlsx.readFile('file.xlsx')
读取 Excel 文件,workbook.getWorksheet(1)
获取第一个 Sheet,worksheet.eachRow()
遍历每一行,获取每一行的数据并加入数组中。
问题2:如何读取指定的 Sheet?
使用 xlsx
库,可以通过 Sheet 名称或索引来读取指定的 Sheet。
通过 Sheet 名称读取:
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); const ws = wb.Sheets['Sheet2']; const data = XLSX.utils.sheet_to_json(ws); console.log(data);
通过 Sheet 索引读取:
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); const ws = wb.Sheets[1]; const data = XLSX.utils.sheet_to_json(ws); console.log(data);
使用 exceljs
库,可以通过 Sheet 名称来读取指定的 Sheet。
// javascriptcn.com 代码示例 const Excel = require('exceljs'); const workbook = new Excel.Workbook(); workbook.xlsx.readFile('file.xlsx') .then(function() { const worksheet = workbook.getWorksheet('Sheet2'); const data = []; worksheet.eachRow(function(row, rowNumber) { data.push(row.values); }); console.log(data); });
问题3:如何读取指定的单元格?
使用 xlsx
库,可以通过 ws["A1"].v
获取 A1 单元格的值。
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); const ws = wb.Sheets['Sheet1']; const cellValue = ws["A1"].v; console.log(cellValue);
使用 exceljs
库,可以通过 worksheet.getCell('A1').value
获取 A1 单元格的值。
const Excel = require('exceljs'); const workbook = new Excel.Workbook(); workbook.xlsx.readFile('file.xlsx') .then(function() { const worksheet = workbook.getWorksheet('Sheet1'); const cellValue = worksheet.getCell('A1').value; console.log(cellValue); });
问题4:如何读取多个 Sheet 或多个单元格?
使用 xlsx
库,可以通过遍历每个 Sheet 或单元格来获取数据。
遍历多个 Sheet:
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); for (const sheetName of wb.SheetNames) { const ws = wb.Sheets[sheetName]; const data = XLSX.utils.sheet_to_json(ws); console.log(`Sheet ${sheetName}: `, data); }
遍历多个单元格:
const XLSX = require('xlsx'); const wb = XLSX.readFile('file.xlsx'); const cellRefs = ['A1', 'B1', 'A2', 'B2']; for (const cellRef of cellRefs) { const cell = wb.Sheets['Sheet1'][cellRef]; console.log(`${cellRef}: ${cell.v}`); }
使用 exceljs
库,也可以通过遍历多个 Sheet 或单元格来获取数据。
遍历多个 Sheet:
// javascriptcn.com 代码示例 const Excel = require('exceljs'); const workbook = new Excel.Workbook(); workbook.xlsx.readFile('file.xlsx') .then(function() { for (let i = 1; i <= workbook.worksheets.length; i++) { const worksheet = workbook.getWorksheet(i); const data = []; worksheet.eachRow(function(row, rowNumber) { data.push(row.values); }); console.log(`Sheet ${i}: `, data); } });
遍历多个单元格:
// javascriptcn.com 代码示例 const Excel = require('exceljs'); const workbook = new Excel.Workbook(); workbook.xlsx.readFile('file.xlsx') .then(function() { const cellRefs = ['A1', 'B1', 'A2', 'B2']; for (const cellRef of cellRefs) { const cell = workbook.getWorksheet('Sheet1').getCell(cellRef); console.log(`${cellRef}: ${cell.value}`); } });
总结
通过 xlsx
和 exceljs
库,我们可以方便地读取 Excel 文件中的数据。本文介绍了常见的问题及解决方式,希望对大家有所帮助。同时,我们也应该注意 Excel 文件的格式及数据的完整性、准确性等问题,避免读取出错或数据失真的情况发生。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653466417d4982a6eb8c1713