Typescript 使用angular ui导出到excel-grid@4.2.4
我最近升级到了UI-Grid@4.2.4使用导出到excel。 问题是它希望ExcelBuiler是全球性的,我使用的是webpack和typescript。 包给出了构建错误,所以我使用了excel builder ts,因为我必须使用最新版本jszip@3.1.5 因为它不是全局可用的,所以我只是模仿UI网格中的代码导出到excel,如下所示,并从gridMenuCustomItems调用它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
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"