Sheet JS json_to_sheet записывает даты в ISO 8601 в виде строк - PullRequest
1 голос
/ 28 февраля 2020

Я использую библиотеку Sheet JS для экспорта данных в моей базе данных материалов angular, чтобы преуспеть. Все работает нормально, за исключением дат, которые не форматируются и не определяются как даты в Excel.

У меня есть JSON данные, подобные этим:

{
    "id": 21658,
    "lector_nombre": "Hot Test            ",
    "plataforma_codigo": "F10",
    "plataforma_descripcion": "BLOQUE",
    "created_at": "2020-02-27T16:53:32.7",
    "fecha_ult_revision": "2020-02-25T00:00:00",
    "pasos_ahora": 0,
    "pasos_ciclo": 1000,
    "pasos_ptes": 1000,
    "ubicacion_1": "",
    "ubicacion_2": "",
    "estado": true,
    "fecha_sig_revision": "2021-02-25T00:00:00",
    "codigo_mantenimiento": null
  }

У меня есть несколько дат и Datetime в формате ISO 8601, как вы можете видеть.

Проблема в том, что даты экспортируются как строки в файл Excel, поэтому они не отформатированы и пользователь не может работать с ними как с правильными датами:

enter image description here

Это код, которым я управляю процессом экспорта:

import { Injectable } from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';

@Injectable({
  providedIn: 'root'
})
export class ExportxlsService {
  fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
  fileExtension = '.xlsx';
  constructor() {}

  public exportExcel(jsonData: any[], fileName: string): void {
    console.log(JSON.stringify(jsonData, null, 2));
    const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(jsonData, { cellDates: true, dateNF: 'YYYYMMDD HH:mm:ss' });
    const wb: XLSX.WorkBook = { Sheets: { data: ws }, SheetNames: ['data'] };
    const excelBuffer: any = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
    this.saveExcelFile(excelBuffer, fileName);
  }

  private saveExcelFile(buffer: any, fileName: string): void {
    const data: Blob = new Blob([buffer], { type: this.fileType });
    FileSaver.saveAs(data, fileName + this.fileExtension);
  }
}
...