3

我正在尝试使用alasql和将数据导出到 Excel 工作表xlsx。我已经遵循了这里的所有准则:https ://github.com/agershun/alasql/wiki/Xlsx

这是我的功能:

exportToExcel(data: any) {
   console.log(XLSX.version);

   alasql
     .promise('SELECT * INTO XLSX("test.csv",{headers:true}) FROM ?', [data])
     .then(function (data) { console.log(data); })
     .catch(function (err) { console.log('Error:', err); });;
}

这在我的控制台中给了我这个错误以及XLSX版本:

VM9931 main.bundle.js:1044 0.12.4 VM9931 main.bundle.js:1047 Error: Error: Please include the xlsx.js library at B (VM9930 vendor.bundle.js:6298) at Object.A.into.XLSX (VM9930 vendor.bundle.js:6303)

我遇到的问题是我已经包含了该XLSX库并且它工作正常(记录的版本是0.12.4)。如果我将其更改XLSX("test.csv")...CSV("test.csv")...它完美地导出为 CSV。

4

1 回答 1

4

在阅读了源代码之后alasql,我仔细查看了得到的部分XLSX

var getXLSX = function() {
var XLSX = alasql["private"].externalXlsxLib;

  if (XLSX) {
    return XLSX;
  }

  if (utils.isNode || utils.isBrowserify || utils.isMeteorServer) {
    /*not-for-browser/*
    XLSX = require('xlsx') || null;
    //*/
  } else {
    XLSX = utils.global.XLSX || null;
  }

  if (null === XLSX) {
    throw new Error('Please include the xlsx.js library');
  }

  return XLSX;

};

我不知道确切原因,但 lineXLSX = require('xlsx') || null已注释,因此您需要明确设置externalXlsxLib为 use xlsx

import * as alasql from 'alasql';
alasql["private"].externalXlsxLib = require('xlsx');

更新

正如评论中所建议的,现在有一个 setter 函数可以用来提供xlsx. 您绝对应该使用这种更清洁的方法。

import * as alasql from 'alasql';
var XLSX = require('xlsx')
alasql.setXLSX(XLSX);
于 2018-09-26T11:37:35.597 回答