开发者问题收集

量角器:xlsx-template 错误无法读取未定义的属性“长度”

2017-05-07
3343

我正在使用 xlsx-template 基于我创建的自定义模板生成 Excel 文件。但是,在使用模板创建新的 excel 文件时出现错误

以下是错误:

E/launcher - Cannot read property 'length' of undefined

E/launcher - TypeError: Cannot read property 'length' of undefined at Workbook.module.exports.Workbook.loadSheet (E:\latest-code\latest\test automation\node_modules\xlsx-template\lib\index.js:373:38) at Workbook.module.exports.Workbook.substitute (E:\latest-code\latest\test automation\node_modules\xlsx-template\lib\index.js:123:26) at E:\latest-code\latest\test automation\config\index.js:117:16 at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:416:3)

代码片段:

 var XlsxTemplate = require('xlsx-template'),
      fs = require('fs'),
      path = require('path');

        describe("excel", function() {

          it("excel file", function() {
            console.log('inside after each...');
            console.log(__dirname);
            fs.readFile(path.join(__dirname, 'Template.xlsx'), function(err, data) {

              var template = new XlsxTemplate(data);
              var values = {
                testcase: [{
                  id: 1,
                  name: "login",
                  status: "pass"
                }, {
                  id: 2,
                  name: "logout",
                  status: "fail"
                }, {
                  id: 3,
                  name: "searchbox",
                  status: "pass"
                }]
              }
              console.log(values);
              template.substitute(1, values);

              console.log('excel data');

              var newData = template.generate();

              fs.writeFileSync('test1.xlsx', newData, 'binary');
            });
          })

我是否缺少 xlsx-template 的任何其他配置。请建议如何摆脱此错误,因为我无法解决它。

提前致谢。

3个回答

您确定 fs.readFile 找到了文件吗?
当您使用 template.substitute 时,第一个参数是工作表编号。
如果未找到工作表,错误 TypeError:无法读取 Workbook.module.exports.Workbook.loadSheet 中未定义的属性“length”......

fs.readFile 的回调中的 err 中有什么?

是的。

Yannick
2017-05-11

我认为您的问题来自 newData

Template.generate 不返回二进制数据。

NodeJs 上,您可以使用:

var tplt = template.generate();
var binaryTplt = new Buffer(tplt, 'binary');
fs.writeFile(fileName, binaryTplt, function (err) {
  if (err) return console.log(err);
  console.log('XLS file saved : ' + fileName);
});

希望它能帮助您!

Y.

Yannick
2017-05-10

我发现我安装的 xlsx-template 存在问题。实际上,在 xlsx-template index.js 文件的 loadSheet 方法中,我在 for 循环中使用了 i < self.sheet.length ,而实际上应该是 i < self.sheets.length 。我再次安装了 xlsx-template,现在它运行正常。

非常感谢大家的大力帮助:)

prpa1234
2017-05-12