簡體   English   中英

表格列中的excelJS wrapText

[英]excelJS wrapText in Table columns

有沒有辦法讓 wrapText 為表中的列工作? 我正在嘗試以下操作,但它沒有在 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,
            });

我還嘗試將“對齊”放在“樣式”對象中,但在 excel 中打開時會導致錯誤。 (表格看起來不同,沒有換行文字,excel 說嘗試創建它時出錯)

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

我還想將表格這些列中的所有單元格也包裝起來。 有沒有人知道如何做到這一點? 我看了好幾次文檔,找不到任何具體的東西。

注意:我知道我可以做ws.getCell(ref).alignment = {wrapText:true} ,所以我嘗試查看 table 對象,看看我是否可以獲得其中所有單元格的引用,遍歷它們,然后設置對齊方式 但是我無法在表格中獲取單元格。

您可以按行或按列設置對齊方式。

循環遍歷所有行並設置對齊和文本換行:

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: '@' 在列標題樣式中進行設置。 像這樣:

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 。

//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 };
    }));
}

誰能看到更有效的方法來做到這一點? 我很想在創建表格的列時以另一種方式完成它。 但似乎 API 不允許這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM