使用 SheetJS 格式化日期
Format date with SheetJS
提前感谢您查看此问题!我正在尝试使用 SheetJS 读取 .xlsx 文件,但在使用通过 Excel 格式化为自定义 "yyyy/mm/dd hh:mm:ss" 的日期列时遇到了一些问题。所有这些日期都显示为大浮点值。
这是在上传时读取 .xlsx 文件的代码:
uploadWorkbook(e) {
let reader = new FileReader();
reader.readAsBinaryString(e.target.files[0]);
reader.onload = (e) => {
let data = e.target.result;
let workbook = XLSX.read(data, {type: 'binary'});
let first_sheet_name = workbook.SheetNames[0];
let worksheet = workbook.Sheets[first_sheet_name];
let jsonObj = XLSX.utils.sheet_to_json(worksheet);
console.log(jsonObj);
}
}
例如,第一个对象的日期值为 43395.29775462963。如果可能的话,我什至可以将所有单元格格式化为字符串。任何帮助将不胜感激!
谢谢大家!
所以,我发现在将 sheet 转换为 JSON 时传递原始选项会将所有单元格输出为字符串。所以它会是:
let jsonObj = XLSX.utils.sheet_to_json(worksheet, {raw: false});
我不太确定当时是否存在这些标志,但目前(2019 年 12 月),您可以添加标志 "cellDates" 以便将其作为日期而不是数字。
const workbook = XLSX.read( data, {
...
cellDates: true,
});
这更好,因为数据类型现在是日期格式的日期,而不是日期格式的字符串。
这是我的方式:
const target = e.target.result;
const wb = XLSX.read(target,{type:'binary',cellText:false,cellDates:true});
const wsname = wb.SheetNames[0];
const ws = wb.Sheets[wsname];
const data = XLSX.utils.sheet_to_json(ws, {header:1,raw:false,dateNF:'yyyy-mm-dd'});
e.target.result 给我未定义的数据。以下解决方案对我有用。看看这个。
onFileUpload($event) {
let reader = new FileReader();
reader.readAsBinaryString($event.target.files[0]);
reader.onload = (e) => {
const target = reader.result;
const wb = XLSX.read(target, { type: 'binary', cellText: false, cellDates: true });
const wsname = wb.SheetNames[0];
const ws = wb.Sheets[wsname];
const data = XLSX.utils.sheet_to_json(ws, { header: 0, raw: false, dateNF: 'yyyy-mm-dd HH:mm:ss' });
console.log(JSON.stringify(data));
}
}
提前感谢您查看此问题!我正在尝试使用 SheetJS 读取 .xlsx 文件,但在使用通过 Excel 格式化为自定义 "yyyy/mm/dd hh:mm:ss" 的日期列时遇到了一些问题。所有这些日期都显示为大浮点值。
这是在上传时读取 .xlsx 文件的代码:
uploadWorkbook(e) {
let reader = new FileReader();
reader.readAsBinaryString(e.target.files[0]);
reader.onload = (e) => {
let data = e.target.result;
let workbook = XLSX.read(data, {type: 'binary'});
let first_sheet_name = workbook.SheetNames[0];
let worksheet = workbook.Sheets[first_sheet_name];
let jsonObj = XLSX.utils.sheet_to_json(worksheet);
console.log(jsonObj);
}
}
例如,第一个对象的日期值为 43395.29775462963。如果可能的话,我什至可以将所有单元格格式化为字符串。任何帮助将不胜感激!
谢谢大家!
所以,我发现在将 sheet 转换为 JSON 时传递原始选项会将所有单元格输出为字符串。所以它会是:
let jsonObj = XLSX.utils.sheet_to_json(worksheet, {raw: false});
我不太确定当时是否存在这些标志,但目前(2019 年 12 月),您可以添加标志 "cellDates" 以便将其作为日期而不是数字。
const workbook = XLSX.read( data, {
...
cellDates: true,
});
这更好,因为数据类型现在是日期格式的日期,而不是日期格式的字符串。
这是我的方式:
const target = e.target.result;
const wb = XLSX.read(target,{type:'binary',cellText:false,cellDates:true});
const wsname = wb.SheetNames[0];
const ws = wb.Sheets[wsname];
const data = XLSX.utils.sheet_to_json(ws, {header:1,raw:false,dateNF:'yyyy-mm-dd'});
e.target.result 给我未定义的数据。以下解决方案对我有用。看看这个。
onFileUpload($event) {
let reader = new FileReader();
reader.readAsBinaryString($event.target.files[0]);
reader.onload = (e) => {
const target = reader.result;
const wb = XLSX.read(target, { type: 'binary', cellText: false, cellDates: true });
const wsname = wb.SheetNames[0];
const ws = wb.Sheets[wsname];
const data = XLSX.utils.sheet_to_json(ws, { header: 0, raw: false, dateNF: 'yyyy-mm-dd HH:mm:ss' });
console.log(JSON.stringify(data));
}
}