如何解决AngularJS中ExcelJS报错Cannot read properties of undefined (reading 'Workbook')
问题根因
你遇到的报错核心是AMD模块加载为异步执行:你将ExcelJS实例化的逻辑写在了define回调函数外部,代码执行到const workbook = new ExcelJS.Workbook()时,define的异步加载回调还未触发,ExcelJS变量仍为undefined,因此无法调用构造函数。
解决方法
- 将所有ExcelJS相关的操作逻辑全部移入
define的回调函数内部,确保模块加载完成后才执行后续操作,修正后代码参考:
$scope.export = function() { $scope.filename = 'Owlink by Tessi.csv'; $scope.title = 'Owlink by Tessi'; const reclamationListResult = []; const header = ['Produit', 'Famille', 'Typologie', 'Date de création']; const titleRowCell = 'A1:R1'; define(['require', 'ExcelJS'], function (require) { const ExcelJS = require('exceljs/excel.js'); // 所有ExcelJS相关操作都放在回调内部 const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Sharing Data'); const colsSizeMap = new Map([ ['1', '20'], ['2', '20'], ['3', '20'], ['4', '20'] ]); // 后续剩余的表格填充、导出逻辑也写在这里 }); }
- 检查项目中AMD加载器(一般为RequireJS)的路径配置,确认
ExcelJS别名指向的文件路径正确,能匹配到bower_components或node_modules中安装的ExcelJS对应入口文件。 - 如果你不想用异步加载的方式,也可以直接在项目的
index.html中通过<script>标签全局引入ExcelJS的压缩包文件,引入后全局作用域会直接存在ExcelJS对象,不需要再用define异步加载即可直接使用。
内容的提问来源于stack exchange,提问作者slema imen
相关产品推荐
相关产品推荐

