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;
有没有办法让 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;