在 Angular 中上传/导入 excel sheet 时,日期以数字格式显示
Date is appearing in number format while upload / import excel sheet in Angular
我正在尝试使用 angular 实现上传 excel sheet,但是当 sheet 显示在浏览器中时,日期更改为数字格式。对于前。 12-12-2020 改为 44177.00011574074。我需要 dd-mm-yyyy 格式。请指导我在打字稿代码中需要做的更改。
app.component.html
<button button mat-raised-button class="btn-primary" color="primary" style="margin: 1%;"
(click)="triggerFileSelector($event)" style="margin: 1%;">
Choose File
</button>
<!-- Code to display table -->
<section class="section">
<table class="material-table">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tr *ngFor="let rowData of tableData">
<td value="Delete" (click)="deleteRow(rowData)">X</td>
<td *ngFor="let schema of tableSchema"
[ngStyle]="{'background-color': (rowData[schema.field].value) ? 'white' : '#ff9999' }">
<span #el contenteditable (blur)="rowData[schema.field].value = el.innerText">
{{ rowData[schema.field].value }}
</span>
</td>
</tr>
</table>
</section>
app.component.ts
triggerFileSelector(e: any): void {
e.preventDefault()
this.fileInput.nativeElement.click()
}
handleFileInput(files: FileList): void {
this.workbookFile = files.item(0)
this.workbookFileName = this.workbookFile.name
this.readFile()
}
readFile(): void {
const temporaryFileReader = new FileReader()
temporaryFileReader.onerror = () => {
temporaryFileReader.abort()
return new DOMException('Problem parsing input file.')
}
temporaryFileReader.onload = (e: any) => {
/* read workbook */
const bstr: string = e.target.result
this.workbookInstance = XLSX.read(bstr, { type: 'binary' })
/* grab first sheet */
this.worksheetName = this.workbookInstance.SheetNames[0]
this.readSheet(this.worksheetName)
}
temporaryFileReader.readAsBinaryString(this.workbookFile)
}
readSheet(sheetName: string) {
this.worksheetInstance = this.workbookInstance.Sheets[sheetName]
this.worksheetData = XLSX.utils.sheet_to_json(this.worksheetInstance, {
header: this.worksheetHasHeader ? 0 : 1,
})
}
Excel 日期存储为浮点数。数字 1.0 表示 1900-01-01 00:00:00
。其他数字表示自那天以来的天数。因此,您可以将 Excel 日期转换为 Javascript 时间戳,如下所示:const jsDate = (excelDate - 25569) * 24 * 60 * 60 * 1000
。 25569
幻数是从 1900-01-01
到 1970-01-01
的天数。 24 * 60 * 60 * 1000
是一天中的毫秒数。
但是 xlsx package's util.sheet_to_json()
method 如果您提供正确的选项,它会为您做到这一点。
this.worksheetData = XLSX.utils.sheet_to_json(this.worksheetInstance, {
raw: false,
header: this.worksheetHasHeader ? 0 : 1,
dateNF: "dd/mm/yyyy"
})
我正在尝试使用 angular 实现上传 excel sheet,但是当 sheet 显示在浏览器中时,日期更改为数字格式。对于前。 12-12-2020 改为 44177.00011574074。我需要 dd-mm-yyyy 格式。请指导我在打字稿代码中需要做的更改。
app.component.html
<button button mat-raised-button class="btn-primary" color="primary" style="margin: 1%;"
(click)="triggerFileSelector($event)" style="margin: 1%;">
Choose File
</button>
<!-- Code to display table -->
<section class="section">
<table class="material-table">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tr *ngFor="let rowData of tableData">
<td value="Delete" (click)="deleteRow(rowData)">X</td>
<td *ngFor="let schema of tableSchema"
[ngStyle]="{'background-color': (rowData[schema.field].value) ? 'white' : '#ff9999' }">
<span #el contenteditable (blur)="rowData[schema.field].value = el.innerText">
{{ rowData[schema.field].value }}
</span>
</td>
</tr>
</table>
</section>
app.component.ts
triggerFileSelector(e: any): void {
e.preventDefault()
this.fileInput.nativeElement.click()
}
handleFileInput(files: FileList): void {
this.workbookFile = files.item(0)
this.workbookFileName = this.workbookFile.name
this.readFile()
}
readFile(): void {
const temporaryFileReader = new FileReader()
temporaryFileReader.onerror = () => {
temporaryFileReader.abort()
return new DOMException('Problem parsing input file.')
}
temporaryFileReader.onload = (e: any) => {
/* read workbook */
const bstr: string = e.target.result
this.workbookInstance = XLSX.read(bstr, { type: 'binary' })
/* grab first sheet */
this.worksheetName = this.workbookInstance.SheetNames[0]
this.readSheet(this.worksheetName)
}
temporaryFileReader.readAsBinaryString(this.workbookFile)
}
readSheet(sheetName: string) {
this.worksheetInstance = this.workbookInstance.Sheets[sheetName]
this.worksheetData = XLSX.utils.sheet_to_json(this.worksheetInstance, {
header: this.worksheetHasHeader ? 0 : 1,
})
}
Excel 日期存储为浮点数。数字 1.0 表示 1900-01-01 00:00:00
。其他数字表示自那天以来的天数。因此,您可以将 Excel 日期转换为 Javascript 时间戳,如下所示:const jsDate = (excelDate - 25569) * 24 * 60 * 60 * 1000
。 25569
幻数是从 1900-01-01
到 1970-01-01
的天数。 24 * 60 * 60 * 1000
是一天中的毫秒数。
但是 xlsx package's util.sheet_to_json()
method 如果您提供正确的选项,它会为您做到这一点。
this.worksheetData = XLSX.utils.sheet_to_json(this.worksheetInstance, {
raw: false,
header: this.worksheetHasHeader ? 0 : 1,
dateNF: "dd/mm/yyyy"
})