如何使用FileSaver.js通过格式化和自动调整功能从JSON导出Excel文件

时间:2019-04-23 15:29:01

标签: angular typescript filesaver.js

我已经可以使用以下功能将JSON数据导出到Excel:

  public exportAsExcelFile(json: any[], excelFileName: string) :Promise<Object> {

    const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
    const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
    const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
    return (this.saveAsExcelFile(excelBuffer, excelFileName));

  }

  private saveAsExcelFile(buffer: any, fileName: string):Promise<Object>  {
    const data: Blob = new Blob([buffer], {type: EXCEL_TYPE});
    return await FileSaver.saveAs(data, fileName + '-' + new  Date().toString()+ EXCEL_EXTENSION);
 }

但是我不知道如何格式化此文件,因此我至少可以使粗体标头和具有自动调整功能的单元格

1 个答案:

答案 0 :(得分:0)

如果您使用的是js-xlsx,则必须切换到价格昂贵的PRO版本才能实现。

  

这是社区版本。我们还提供带有   性能增强,样式等其他功能,以及   专门的支持。

您可以使用ExcelJS库。它提供免费的样式功能

 const workbook = new ExcelJS.Workbook();
 workbook.creator = 'Your company name';
 workbook.created = new Date();

 const worksheet = workbook.addWorksheet('Worksheet 1');

然后您可以指定列宽:

 worksheet.columns = [
     { width: 15 },
     { width: 30 },
     { width: 10 }
 ];

您可以使用以下代码制作粗体标题:

worksheet.getRow(1).font = { bold: true };

指定单元格样式:

worksheet.getCell('A1').border = {
                    top: ...,
                    left: ...,
                    bottom: ...,
                    right: ...
                };
worksheet.getCell('A1').font = ...;

最后导出文件

import {saveAs} from 'file-saver';
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';

...
workbook.xlsx.writeBuffer()
             .then((file: any) => {
                const blob = new Blob([file], { type: EXCEL_TYPE });
                saveAs(blob, `fileName.xlsx`);
             });

遵循此link来查找更多样式选项。