我正在使用js-xlsx库在JavaScript中创建Excel文件。
此库使用jszip
。在加载jszip
之前,我尝试在JavaScript文件中定义jszip
库,但从未定义jszip
:
Uncaught TypeError: jszip is not a function
配置requirejs:
<script type="text/javascript">
requirejs.config({
paths : {
jszip : '../tools/jszip'
}
});
</script>
以下是我在JS文件中使用它的方法:
define(['jszip', '../tools/xlsx'], function(jszip, xlsx) {
...
}
答案 0 :(得分:9)
在加载XLSX之前,必须加载JSZip(以及支持ods扩展的ODS)并将其附加到窗口。 我正在使用带有自定义“xlsx-loader”的垫片工作:
<强> main.js 强>
requirejs.config({
paths: {
ods: '...path to ods',
jszip: '...path to jszip',
xlsxloader: '...path to xlsx-loader',
xlsx: '...path to xlsx'
},
shim: {
xlsx: {
exports: 'XLSX',
deps: ['xlsxloader']
}
}
});
<强> XLSX-loader.js 强>
define(['jszip', 'ods'], function (jszip, ods) {
"use strict";
window.JSZip = jszip;
window.ODS = ods;
});
您的JS文件
define(['xlsx'], function () {
// Do what you want with XLSX
...
选项2)您也可以实现此链接要求,它不需要任何填充程序但不能与优化程序
一起使用require(['jszip', 'ods'], function (jszip, ods) {
window.JSZip = jszip;
window.ODS = ods;
require(['xlsx'], function () {
// Do what you want with XLSX
...
});
});
答案 1 :(得分:-1)
如果你打开xlsx.js,你会看到有一个名为JSZip的全局变量,它实际上填充了jszip的值。所以,如果你像这样改变你的功能定义
define(['jszip', '../tools/xlsx'], function(JSZip , xlsx) {
它应该有效,我想
答案 2 :(得分:-1)
您必须将lib var定义为构造函数的名称。
对于我的情况,我有同样的问题:
define("Statistics", ["jquery", "underscore", "Datatable", "moment", "jszip"], function($, _, Datatable, moment, jszip) {
并且我将jszip更改为JSZip ,如下所示:
define("Statistics", ["jquery", "underscore", "Datatable", "moment", "jszip"], function($, _, Datatable, moment, JSZip) {