Node.js读取Excel时间值:如何将数值转为12:30格式?
解决Excel时间值读取为数值的问题
Excel里的时间其实是按一天的比例存储的小数(比如12:30对应0.520833...,代表一天已经过了52.0833%),所以直接读取会得到数值。要转成12:30这种格式,有两种简单方法:
方法一:读取时启用cellDates选项
在readFile里加上cellDates: true配置,时间单元格会直接返回Date对象,之后你可以自行格式化这个Date:
const XLSX = require('xlsx'); // 读取时开启cellDates选项 const workbook = XLSX.readFile('file.xlsx', { cellDates: true }); var allPages = []; workbook.SheetNames.forEach(function(sheetName) { var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); allPages.push(XL_row_object); }); // 格式化Date对象为HH:mm格式 const formatTime = (date) => { const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${hours}:${minutes}`; }; console.log(formatTime(allPages[0][1].time));
方法二:用SSF工具直接转换数值
xlsx库自带SSF(Spreadsheet Format)工具,可以直接把Excel的时间数值转成指定格式的字符串:
const XLSX = require('xlsx'); const workbook = XLSX.readFile('file.xlsx'); var allPages = []; workbook.SheetNames.forEach(function(sheetName) { var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); allPages.push(XL_row_object); }); // 使用SSF.format将数值转成HH:mm格式 const timeValue = allPages[0][1].time; const formattedTime = XLSX.SSF.format('hh:mm', timeValue); console.log(formattedTime); // 输出12:30
两种方法都能解决问题:如果需要后续对时间做计算,用方法一的Date对象更方便;如果只是需要字符串格式,方法二更直接。
内容的提问来源于stack exchange,提问作者Pro Medya
相关产品推荐
相关产品推荐

