From 7eec85dcfc4d7ced8c41777d6a8c6df8a45ac618 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 14 Jun 2022 16:33:39 +0800 Subject: [PATCH] fix: exclude date1904 fix from csv quick import --- .../templateParsers/ExcelTemplateAdapter.js | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/packages/nc-gui/components/import/templateParsers/ExcelTemplateAdapter.js b/packages/nc-gui/components/import/templateParsers/ExcelTemplateAdapter.js index b1964ae5a6..9202e4ab31 100644 --- a/packages/nc-gui/components/import/templateParsers/ExcelTemplateAdapter.js +++ b/packages/nc-gui/components/import/templateParsers/ExcelTemplateAdapter.js @@ -46,25 +46,27 @@ export default class ExcelTemplateAdapter extends TemplateGenerator { this.data[tn] = [] const ws = this.wb.Sheets[sheet] const range = XLSX.utils.decode_range(ws['!ref']) - const originalRows = XLSX.utils.sheet_to_json(ws, { header: 1, blankrows: false, cellDates: true, defval: null }) - - // fix precision bug & timezone offset issues introduced by xlsx - const basedate = new Date(1899, 11, 30, 0, 0, 0) - // number of milliseconds since base date - const dnthresh = basedate.getTime() + (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000 - // number of milliseconds in a day - const day_ms = 24 * 60 * 60 * 1000 - // handle date1904 property - const fixImportedDate = (date) => { - const parsed = XLSX.SSF.parse_date_code((date.getTime() - dnthresh) / day_ms, { - date1904: this.wb.Workbook.WBProps.date1904 - }) - return new Date(parsed.y, parsed.m, parsed.d, parsed.H, parsed.M, parsed.S) + const rows = XLSX.utils.sheet_to_json(ws, { header: 1, blankrows: false, cellDates: true, defval: null }) + + if (this.name.slice(-3) !== 'csv') { + // fix precision bug & timezone offset issues introduced by xlsx + const basedate = new Date(1899, 11, 30, 0, 0, 0) + // number of milliseconds since base date + const dnthresh = basedate.getTime() + (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000 + // number of milliseconds in a day + const day_ms = 24 * 60 * 60 * 1000 + // handle date1904 property + const fixImportedDate = (date) => { + const parsed = XLSX.SSF.parse_date_code((date.getTime() - dnthresh) / day_ms, { + date1904: this.wb.Workbook.WBProps.date1904 + }) + return new Date(parsed.y, parsed.m, parsed.d, parsed.H, parsed.M, parsed.S) + } + // fix imported date + rows = rows.map(r => r.map((v) => { + return v instanceof Date ? fixImportedDate(v) : v + })) } - // fix imported date - const rows = originalRows.map(r => r.map((v) => { - return v instanceof Date ? fixImportedDate(v) : v - })) const columnNameRowExist = +rows[0].every(v => v === null || typeof v === 'string')