Table 列中的 excelJS wrapText

excelJS wrapText in Table columns

有没有办法让 wrapText 对 table 中的列起作用?我正在尝试以下操作,但未在 excel.

中注册
const columnsStyle = { font: { name: 'Arial Black', size: 12 } };
const columns = [
            { name: 'PO#', style: columnsStyle, alignment: { wrapText:true } }
];
 ws.addTable({
                name: 'name',
                ref: `A${lastRowNum}`,
                columns: columns,
                rows: rows,
            });

我也试过将 'alignment' 放入 'style' 对象中,但在 excel 中打开时会导致错误。 (Table 看起来不一样,没有换行文字,excel 说尝试创建它时出错)

const columnsStyle = { font: { name: 'Arial Black', size: 12 }, alignment: { wrapText:true } }; const columns = [ { name: 'PO#', style: columnsStyle, } ];

我也想把 table 这些列中的所有单元格也包装起来。 有没有人知道如何做到这一点?我多次浏览文档,但找不到任何具体内容。

注意:我知道我能做到 ws.getCell(ref).alignment = {wrapText:true} 所以我试着查看 table 对象,看看我是否可以 获取其中所有单元格的引用,遍历它们,并设置对齐方式 .但是我无法在 table.

中获取单元格

我通过检测 table 包含在哪些行中,然后循环遍历每一行,然后遍历每一行的单元格来实现变通方法。然后最后在每个单元格上设置 wrapText。

//Record where the table starts
const firstTableRowNum = SOME_NUM;

//Create the table
ws.addTable({
    name: 'someTable',
    ref: `A${firstTableRowNum}`,
    columns: columns,
    rows: rows,
});

//Record table's last row
let lastRowNum = ws.lastRow.number;
const lastTableRowNum = lastRowNum;

//Loop through all table's row
for (let i=firstTableRowNum; i<= lastTableRowNum; i++) {
    const row = ws.getRow(i);

    //Now loop through every row's cell and finally set alignment
    row.eachCell({includeEmpty: true}, (cell => {
        cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
    }));
}

有谁能找到更有效的方法吗?我很想在创建 table 的列时用另一种方式完成它。但似乎 API 不允许这样做。

您可以设置按行或按列对齐。

遍历所有行并设置对齐方式和文本换行:

var sheet = workbook.addWorksheet(sheetName, { pageSetup: { paperSize: 9, orientation: 'landscape' } });

// Add data to sheet here, e.g. sheet.addRow

let rowIndex = 1;
for (rowIndex; rowIndex <= sheet.rowCount; rowIndex++) {
    sheet.getRow(rowIndex).alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
}

设置第 5 列和第 7 列的对齐和换行:

sheet.getColumn(5).alignment = { vertical: 'middle', wrapText: true };
sheet.getColumn(7).alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };

此外,如果您要换行文本,您可能希望单元格是文本。您可以使用 numFmt: '@' 在 header 列样式中设置它。像这样:

const columnHeaders = [
    { header: 'Column 1 Title', key: 'COL_ONE', width: 10, style: { numFmt: '@' } },
    { header: 'Column 2 Title', key: 'COL_TWO', width: 32, style: { numFmt: '@' } },
]

sheet.columns = columnHeaders;