用于解析xls文件或xlsx文件,为了应对可能多种字符集的文件,使用jschardet包可以进行动态解析
/*使用前依次控制台执行执行:
npm install xlsx
npm install iconv-lite
npm install jschardet
*/
const fs= require('fs')
const XLSX = require('xlsx');
const iconv = require('iconv-lite');
const jschardet = require('jschardet')
function redXls(filePath) {
fs.readFile(filePath,(err, data)=>{
//解析Buffer数据(data)的两种方式(选其一即可)
//1.文件字符集为 utf-8
//数据串转为excel工作表
const workBook = XLSX.read(data,{type:'buffer'});
//2.不确定文件字符集
//用来获取文件的字符集
const iDetectedMap = jschardet.detect(data);
const encoding = iDetectedMap.encoding;
//根据字符集解析成字符串 buffer->string
const str = iconv.decode(data, encoding);
//数据串转为excel工作表
const workBook = XLSX.read(str,{type:'string',raw:true});
//读数据的两种方式(选其一即可)
// 1.获取第一个工作表
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];
// 使用xlsx的utils.sheet_to_json等方法将工作表转换为JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet);
//2.循环获取各个工作表数据
const jsonData=Object.keys(workBook.Sheets).map(function (name) {
const sheet = workBook.Sheets[name];
return {
name,
data: XLSX.utils.sheet_to_json(sheet, {
header: 1,
raw: {}.raw !== false,
range: null
})
};
});
})
}
新问题:文件中有时间不能正常被xlsx读取。
解决方案:XLSX.read(str,{type:'string',raw:true});
此外options内属性查到了一些如下
属性 | 类型 | 默认值 | 含义 |
---|---|---|---|
type | 字符串 | 根据 data 的类型自动推断 | 指定 data 的类型。常见的值:有 "binary" 、"base64" 、"array" (对于 Uint8Array)、"buffer" (对于 Node.js 的 Buffer)、"string" (对于文本数据)等。如果你不确定 data 的类型,可以省略此选项,让 SheetJS 自动推断。 |
raw | 布尔值 | false | 当处理单元格数据时,是否返回原始数据(如数字和日期)。如果设置为 true ,则日期将以 Excel 的日期序列号(从 1900 年 1 月 1 日起的天数)形式返回,而不是解析为 JavaScript 的 Date 对象。数字也会以它们的原始形式返回,而不是根据单元格的格式进行格式化。 |
cellDates | 布尔值 | false | 是否将 Excel 中的日期和时间解析为 JavaScript 的 Date 对象。如果设置为 true ,则 Excel 中的日期和时间将被解析并转换为 JavaScript 的 Date 对象。注意,这与 raw 选项是互斥的。 |
cellNF | 布尔值 | false | 是否保留单元格的数字格式(number format)。如果设置为 true ,则每个单元格的 w (文本值)属性将包含根据单元格的数字格式格式化后的字符串。这对于需要保留原始 Excel 文件中数字格式的用户很有用。 |
cellText | 布尔值 | false | 是否生成并填充单元格的 w (文本值)属性。如果设置为 true ,则每个单元格的 w 属性将包含其显示值(如果适用,则根据单元格的数字格式进行格式化)。这有助于在需要时快速获取单元格的文本表示。 |
cellStyles | 布尔值 | false | 是否解析并保留单元格的样式信息。如果设置为 true ,则每个单元格将包含有关其样式的额外信息(如字体、边框、填充等)。请注意,这可能会显著增加解析时间和内存消耗。 |
bookDeps | 布尔值 | false | 是否解析并保留工作簿的依赖信息(如外部链接)。如果设置为 true ,则解析结果将包含有关工作簿依赖的额外信息 |
bookSheets | 布尔值或字符串数组 | true | 指定要解析的工作表。如果设置为 true ,则解析所有工作表。如果设置为字符串数组,则只解析数组中指定名称的工作表。 |