Javascript 使用excel.js模块+;节点
我正在尝试使用node.js中的excel.js模块创建xslx文件。我能够创建列并添加其值。但是,我需要在列标题前插入一些行,在那里我可以有一些描述。我该怎么做 任何帮助都将不胜感激 我试过的代码是Javascript 使用excel.js模块+;节点,javascript,node.js,excel,exceljs,Javascript,Node.js,Excel,Exceljs,我正在尝试使用node.js中的excel.js模块创建xslx文件。我能够创建列并添加其值。但是,我需要在列标题前插入一些行,在那里我可以有一些描述。我该怎么做 任何帮助都将不胜感激 我试过的代码是 var worksheet = workbook.getWorksheet(1); worksheet.mergeCells('A1:B1'); var row = worksheet.getRow(1); row.getCell(1).value =' Hel
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});
找到答案
>@rihabbs:我需要像这个例子那样做
[![在此处输入图像描述][1][1]
[1]: https://i.stack.imgur.com/9oRE4.png
>@mfahmirukman:
来自@dim answer的exceljs提供的示例并没有真正按照所描述的那样工作 这个示例用例不仅是一个非常糟糕的例子,说明了现实世界中的用例可能是什么样子,而且根本不起作用。在这种情况下,大多数人希望在列标签行上方有一个表头作为合并的居中单元格,然后可以按键添加数据。我尝试了很多方法来获得
sheet.columns
功能,使第一行数据不受影响,但它总是在我放在那里的任何其他数据上添加列标题
我试过:
在定义sheet.columns
之前添加标题值(如示例所示)
在定义sheet.columns
之前,将列标题添加为原始列表(如示例所示)
将合并的标题单元格与表中使用的列进行偏移(如示例所示)(为什么会有人这样做?)
在标题和列标题之间添加行(如示例中所示)(再次说明原因?)
将多行合并到标题单元格中(如示例所示)
除了标题单元格中的最后一个列键(使用Microsoft Excel),所有这些都不会为我提供任何信息。定义sheet.columns
的时间似乎与定义的表的范围无关。我确信添加一个位于实际表列之外的标题单元格是可行的,但是,正如我所说的,对于大多数标准用例来说,这不是很有用
我发现的解决办法如下:
- 将最后一列作为工作表。列a使用表标题作为键,在标题行中不包含任何内容,并确保没有使用该键的表数据(缺点是标题与表数据外的额外列合并,使其看起来有点滑稽和偏离中心)
- 将标题单元格放在第二行,标题放在第三行,并设置
以隐藏不可避免地出现在第一行的标题(缺点是工作表从第二行开始,没有明显的原因)sheet.getRow(1).hidden=true
我沿着第一种解决方法的路径开始,在表的两端装订空列,以至少平衡标题单元格,但它看起来太奇怪了,所以我决定使用第二种解决方法。您可以在第一行拼接,删除0并添加行值
titleValues1 = ["colA1","colb1"];
titleValues2 = ["colA2","colb2"];
worksheet.spliceRows(1, 0, titleValues1,titleValues2);
然后获取行并按照您的需要进行合并或操作
希望这能满足您(或将来的任何人)的需要。摘自Dim的答案,但在要求添加标题之前,我已经有了代码。因此,在尽可能少的变化下,它看起来是这样的:
fields = [{key:'a', width:12}, {key:'b', label:'2nd', width:15}, {key:'c', width:12}]
data = [{a:'a', b:'b', c:'c'},...]
// first add header info, then
worksheet.columns = fields
const titles = worksheet.addRow(this.fields.map(f => f.label || f.key))
// uncomment following line to freeze header and column title rows
// worksheet.views = [{state: 'frozen', ySplit: worksheet.lastRow._number}]
const dataRows = worksheet.addRows(data)
你找到解决这个问题的办法了吗@MariyaYou有@Mariyanope的答案吗,我通过在带有索引的行中添加文本来处理它,在代码中,样式被定义为使标题背景为蓝色?
fields = [{key:'a', width:12}, {key:'b', label:'2nd', width:15}, {key:'c', width:12}]
data = [{a:'a', b:'b', c:'c'},...]
// first add header info, then
worksheet.columns = fields
const titles = worksheet.addRow(this.fields.map(f => f.label || f.key))
// uncomment following line to freeze header and column title rows
// worksheet.views = [{state: 'frozen', ySplit: worksheet.lastRow._number}]
const dataRows = worksheet.addRows(data)