XLS sheet 中的日期未正确解析
Date in XLS sheet not parsing correctly
我正在尝试使用 'XLSX' 节点模块读取包含日期列的 XLS 文件。解析文件后,我发现日期与 sheet 中的日期相差很少。
这就是我正在做的。
var workbook = XLSX.readFile(filePath);
var grossPayoutSheet = workbook.Sheets[worksheets[1]];
for (var i in grossPayoutSheet) {
if (i[0] === "!") continue;
var col = (!isNaN(parseInt(i.substring(1)))) ? i.substring(0,1) : i.substring(0,2);
var row = (!isNaN(parseInt(i.substring(1)))) ? parseInt(i.substring(1)) : parseInt(i.substring(2));
var value = grossPayoutSheet[i].v;
if (row === 2) {
var value = grossPayoutSheet[i].v;
headers[col] = value.trim();
continue;
}
if (row !== 1 && !data[row]) {
data[row] = {};
} else if (row !== 1){
data[row][headers[col]] = value;
}
}
单元格 B3 中的值为
05/07/2017
但解析后的值为
B3: { t: 'n', v: 42921, w: '42921' }
我想要字符串格式的日期,我想将单元格格式从 'n' 更改为 's'
谁能用这个取悦我?
所以我昨天开始工作了:
import * as XLSX from 'xlsx'
import * as df from 'dateformat';
// Typescript but easy to convert
const workbook: any = XLSX.read(source, { 'type': type, cellDates: true });
// passing the option 'cellDates': true is important
// ...
// ... until you start reading cells
const cellAddress: any = { c: 5, r: 5 }; // column 5 / row 5 which is a date and formatted like that in xlsx
const cell_ref: string = XLSX.utils.encode_cell(cellAddress);
const cell: any = worksheet[cell_ref];
if (cell) {
let value: any = cell.v;
const parsedDate: Date = new Date(value);
parsedDate.setHours(parsedDate.getHours() + timezoneOffset); // utc-dates
value = df(parsedDate, "dd/mm/yyyy");
}
这只是一个片段,但其中包含了要点:-) 希望这对您有所帮助!顺便说一句,我正在使用 xlsx 文件。
诀窍是传递选项 'cellDates: true',然后从数字值实例化一个日期,它应该会成功。由于 JS 中的 utc-dates,您的日期可能会延迟几个小时,您可以通过将偏移量添加到日期来平衡。
var workbook = XLSX.read(data, {
type: 'binary',
cellDates: true,
cellNF: false,
cellText: false
});
const workbook = excel.readFile(file.path);
const sheet_name_list = workbook.SheetNames;
const json = excel.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]], {
raw: false,
});
我正在尝试使用 'XLSX' 节点模块读取包含日期列的 XLS 文件。解析文件后,我发现日期与 sheet 中的日期相差很少。 这就是我正在做的。
var workbook = XLSX.readFile(filePath);
var grossPayoutSheet = workbook.Sheets[worksheets[1]];
for (var i in grossPayoutSheet) {
if (i[0] === "!") continue;
var col = (!isNaN(parseInt(i.substring(1)))) ? i.substring(0,1) : i.substring(0,2);
var row = (!isNaN(parseInt(i.substring(1)))) ? parseInt(i.substring(1)) : parseInt(i.substring(2));
var value = grossPayoutSheet[i].v;
if (row === 2) {
var value = grossPayoutSheet[i].v;
headers[col] = value.trim();
continue;
}
if (row !== 1 && !data[row]) {
data[row] = {};
} else if (row !== 1){
data[row][headers[col]] = value;
}
}
单元格 B3 中的值为
05/07/2017
但解析后的值为
B3: { t: 'n', v: 42921, w: '42921' }
我想要字符串格式的日期,我想将单元格格式从 'n' 更改为 's'
谁能用这个取悦我?
所以我昨天开始工作了:
import * as XLSX from 'xlsx'
import * as df from 'dateformat';
// Typescript but easy to convert
const workbook: any = XLSX.read(source, { 'type': type, cellDates: true });
// passing the option 'cellDates': true is important
// ...
// ... until you start reading cells
const cellAddress: any = { c: 5, r: 5 }; // column 5 / row 5 which is a date and formatted like that in xlsx
const cell_ref: string = XLSX.utils.encode_cell(cellAddress);
const cell: any = worksheet[cell_ref];
if (cell) {
let value: any = cell.v;
const parsedDate: Date = new Date(value);
parsedDate.setHours(parsedDate.getHours() + timezoneOffset); // utc-dates
value = df(parsedDate, "dd/mm/yyyy");
}
这只是一个片段,但其中包含了要点:-) 希望这对您有所帮助!顺便说一句,我正在使用 xlsx 文件。
诀窍是传递选项 'cellDates: true',然后从数字值实例化一个日期,它应该会成功。由于 JS 中的 utc-dates,您的日期可能会延迟几个小时,您可以通过将偏移量添加到日期来平衡。
var workbook = XLSX.read(data, {
type: 'binary',
cellDates: true,
cellNF: false,
cellText: false
});
const workbook = excel.readFile(file.path);
const sheet_name_list = workbook.SheetNames;
const json = excel.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]], {
raw: false,
});