XLS表中的日期未正确解析

时间:2017-07-07 09:36:33

标签: node.js xlsx

我正在尝试使用带有日期的列的“XLSX”节点模块读取XLS文件。在解析文件之后,我发现日期与工作表中日期的日期相差很少。 这就是我的目的。

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中的值是

  

2017年5月7日

但解析后的值是

  

B3:{t:'n',v:42921,w:'42921'}

我想要字符串格式的日期,我希望将单元格格式从“n”更改为“s”

有人能讨好我吗?

3 个答案:

答案 0 :(得分:3)

 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,
 });

答案 1 :(得分:2)

var workbook = XLSX.read(data, {
  type: 'binary',
  cellDates: true,
  cellNF: false,
  cellText: false
});

答案 2 :(得分:1)

所以我昨天开始工作了:

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,您的日期可能会短暂几个小时,您甚至可以通过将偏移量添加到日期来实现。