Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用angular ui导出到excel-grid@4.2.4_Typescript_Webpack_Angular Ui Grid_Jszip_Excelbuilder.js - Fatal编程技术网

Typescript 使用angular ui导出到excel-grid@4.2.4

Typescript 使用angular ui导出到excel-grid@4.2.4,typescript,webpack,angular-ui-grid,jszip,excelbuilder.js,Typescript,Webpack,Angular Ui Grid,Jszip,Excelbuilder.js,我最近升级到了UI-Grid@4.2.4使用导出到excel。 问题是它希望ExcelBuiler是全球性的,我使用的是webpack和typescript。 包给出了构建错误,所以我使用了excel builder ts,因为我必须使用最新版本jszip@3.1.5 因为它不是全局可用的,所以我只是模仿UI网格中的代码导出到excel,如下所示,并从gridMenuCustomItems调用它 var jszip = require('jszip'); var ExcelBuilder = r

我最近升级到了UI-Grid@4.2.4使用导出到excel。 问题是它希望ExcelBuiler是全球性的,我使用的是webpack和typescript。 包给出了构建错误,所以我使用了excel builder ts,因为我必须使用最新版本jszip@3.1.5

因为它不是全局可用的,所以我只是模仿UI网格中的代码导出到excel,如下所示,并从gridMenuCustomItems调用它

var jszip = require('jszip');
var ExcelBuilder = require('excel-builder-ts/ExcelBuilder.js');

public exportExcel(): void {
        var exportColumnHeaders = this.gridApi.grid.options.showHeader ? this.uiGridExporterService.getColumnHeaders(this.gridApi.grid, this.uiGridExporterConstants.ALL) : [];

        var workbook = ExcelBuilder.createWorkbook();
        var aName = this.gridApi.grid.options.exporterExcelSheetName ? this.gridApi.grid.options.exporterExcelSheetName : 'Sheet1';
        var sheet = workbook.createWorksheet({ name: aName });
        workbook.addWorksheet(sheet);
        var docDefinition = this.uiGridExporterService.prepareAsExcel(this.gridApi.grid, workbook, sheet);

        // The standard column width in Microsoft Excel 2000 is 8.43 characters based on fixed-width Courier font
        // Width of 10 in excel is 75 pixels
        var colWidths = [];
        var startDataIndex = this.gridApi.grid.treeBase ? this.gridApi.grid.treeBase.numberLevels : (this.gridApi.grid.enableRowSelection !== false ? 1 : 0);
        for (var i = startDataIndex; i < this.gridApi.grid.columns.length; i++) {
            colWidths.push({ width: (this.gridApi.grid.columns[i].drawnWidth / 75) * 10 });
        }
        sheet.setColumns(colWidths);

        var exportData = this.uiGridExporterService.getData(this.gridApi.grid, this.uiGridExporterConstants.ALL, this.uiGridExporterConstants.ALL, this.gridApi.grid.options.exporterFieldApplyFilters);

        var excelContent = this.uiGridExporterService.formatAsExcel(exportColumnHeaders, exportData, workbook, sheet, docDefinition);
        sheet.setData(sheet.data.concat(excelContent));

        let options = { type: 'blob', base64: true }

        ExcelBuilder.createFile(jszip, workbook, options).then((result) => {
            this.uiGridExporterService.downloadFile(
                this.gridApi.grid.options.exporterExcelFilename,
                result,
                this.gridApi.grid.options.exporterCsvColumnSeparator,
                this.gridApi.grid.options.exporterOlderExcelCompatibility);
        });
    }
但问题是jszip抱怨“错误:没有指定输出类型。”

当我调试jszip代码时,下面的代码无法将
选项扩展到
opt
以使类型为blob

 opts = utils.extend(options || {}, {
              streamFiles: false,
              compression: "STORE",
              compressionOptions : null,
              type: "",
              platform: "DOS",
              comment: null,
              mimeType: 'application/zip',
              encodeFileName: utf8.utf8encode
          });
当执行时,opt.type为空,jszip抛出错误:未指定输出类型


如果有任何建议,我将不胜感激。

请快速查看excel builder代码

我可以看到,当它生成zip时,它不会传递类型。所以也许这就是为什么需要旧版本的jszip

return zip.generateAsync({
  base64: (!options || options.base64 !== false)
});
整个事情有点混乱,因为excel builder项目被放弃了。如果ui网格项目被维护,也许你会在他们的跟踪器上提出一个问题,但是因为它是angular1.x,我想它可能不会那么活跃

我建议尝试使用jszip和excel builder的确切版本。您可以看到他们的bower.json

"excel-builder-js": "excelbuilder#^2.0.2",
"jszip": "~2.6.1"
如果不能做到这一点,那么使用其他excel库实现自己的excel导出就相当容易了。在我们的团队中,我们使用exceljs实现了这一点

"excel-builder-js": "excelbuilder#^2.0.2",
"jszip": "~2.6.1"