使用excel.js模块+节点在列标题之前添加行

时间:2016-06-15 08:50:32

标签: javascript node.js excel exceljs

我正在尝试使用node.js中的excel.js模块创建xslx文件。我能够创建列并添加其值。但是,我需要在列标题之前插入一些行,在那里我可以有一些描述。我怎么能这样做?

I need something like this

任何帮助将不胜感激

我尝试的代码是

     var worksheet = workbook.getWorksheet(1);
    worksheet.mergeCells('A1:B1');
    var row = worksheet.getRow(1);
    row.getCell(1).value =' Hello, World!'; 
   // ... merged cells are linked 
    worksheet.getCell('A1').value = 'PI';
    worksheet.columns = [
        {header: 'Id', key: 'id', width: 10},
        {header: 'Name', key: 'name', width: 32},
        {header: 'complexity', key: 'complexity', width: 10},
        {header: 'hours', key: 'hours', width: 10},
        {header: 'cost', key: 'cost', width: 10}
    ];
     worksheet.addRow({name:'m', complexity: 'd', hours:5, cost: 7});

4 个答案:

答案 0 :(得分:1)

https://github.com/guyonroche/exceljs/issues/433

找到答案

> @rihabbs :我需要像这个例子那样做 enter image description here > @mfahmirukman

/*TITLE*/
sheet.mergeCells('C1', 'J2');
sheet.getCell('C1').value = 'Client List'

/*Column headers*/
sheet.getRow(9).values = ['idClient', 'Name', 'Tel', 'Adresse'];

/*Define your column keys because this is what you use to insert your data according to your columns, they're column A, B, C, D respectively being idClient, Name, Tel, and Adresse.
So, it's pretty straight forward */
sheet.columns = [
  { key: 'idClient'},
  { key: 'name'},
  { key: 'tel'},
  { key: 'adresse'}
]

/*Let's say you stored your data in an array called arrData. Let's say that your arrData looks like this */
arrData = [{
  idClient: 1,
  name: 'Rihabbs',
  tel: '0123456789',
  adresse: 'Home sweet home'
},
{
  idClient: 2,
  name: 'mfahmirukman',
  tel: '0123456789',
  adresse: 'Indonesia'
}
]
/* Now we use the keys we defined earlier to insert your data by iterating through arrData and calling worksheet.addRow()
*/
arrData.forEach(function(item, index) {
  worksheet.addRow({
     idClient: item.idClient,
     name: item.name,
     tel: item.tel,
     adresse: item.adresse
  })
})

答案 1 :(得分:0)

exceljs从@dim答案中提供的示例实际上并没有按所述方式工作。

示例用例不仅是一个真实的坏例子,说明现实中的用例看起来像什么,而且根本不起作用。在这种情况下,大多数人想要的是在表标签行的上方将表头作为合并并居中的单元格,然后可以通过键在其中添加数据。我已经尝试了很多方法来获得sheet.columns功能以保留第一行数据,但它总是将列标题添加到我放置的其他内容上。

我尝试过: 在定义sheet.columns之前添加标题值(如示例中所示)

在定义sheet.columns之前将列标题添加为原始列表(如示例中所示)

从表中使用的列中偏移合并的标题单元格(如示例中所示)(为什么有人这样做呢?)

在标题和列标题之间添加行(如示例中所示)(再次为什么?)

将多行合并到标题单元格中(如示例中所示)

除了我的标题单元格中的最后一个列键(使用Microsoft Excel)之外,这些都没有给我其他任何东西。似乎定义sheet.columns的时间与正在定义的表的范围无关。我确定添加一个位于实际表的列之外的标题单元格是可行的,但是,正如我所说,这对于大多数标准用例而言并不是很有用。

我发现的解决方法是:

  • 将表格的最后一列设为表格的列,将其作为键,不要在标题行中包含任何内容,并确保没有使用该键的表格数据输入(缺点是标题已合并表格数据之外有一个额外的列,使它看起来有点滑稽并且偏离中心)
  • 将标题单元格放在第二行,标题放在第三行,并将sheet.getRow(1).hidden = true设置为隐藏不可避免地出现在第一行的标题(不利的一面是您的工作表从第二行开始,没有明显的原因) )

我从第一个解决方法的路径开始,在表的两端预订了空列以至少平衡标题单元,但最终看起来太奇怪了,所以我决定使用第二个解决方法。

答案 2 :(得分:0)

您可以在删除0的第一行进行拼接并添加行值

titleValues1 = ["colA1","colb1"];
titleValues2 = ["colA2","colb2"];

worksheet.spliceRows(1, 0, titleValues1,titleValues2);

然后获取行并根据需要进行合并或操作。

希望这能满足您(或将来的任何人)的需求。

答案 3 :(得分:0)

取自 Dim 的回答,但在要求添加标头之前,我的代码已经可以工作了。因此,尽可能少地更改它看起来像这样:

HttpResponse