javascript使用node.js读取xls、xlsx文件(动态解析字节码)

用于解析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,则解析所有工作表。如果设置为字符串数组,则只解析数组中指定名称的工作表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值