javascript - 用js-xlsx导出.xlsx文件时如何根据内容设置整列的宽度?
问题描述
使用 js-xlsx 导出 .xlsx 文件时,我想将列宽设置为该列内容的最大长度
使用 js-xlsx 导出 .xlsx 文件时如何设置单元格宽度
我试过上面的。
let sheet = workBook.Sheets.Sheet1;
let wscols = [];
const colNode = table.tHead.rows[0].childNodes; // getting the column names from the table rendered on the page
const colNumber = colNode.length;
for(let i = 0; i < colNumber; i++){
wscols.push({
wch: colNode[i].innerText.length * 1.28
})
}
sheet['!cols'] = wscols;
我可以通过从屏幕上呈现的表格中获取列的名称来设置宽度。但是我遇到的问题是,假设列名的名称是“Title”,并且它的行有一些像“Australia”这样的值,那么列名的长度会更小,并且整个列的宽度没有正确设置。
解决方案
private autofitColumns(json: any[], worksheet: XLSX.WorkSheet, header?: string[]) {
const jsonKeys = header ? header : Object.keys(json[0]);
let objectMaxLength = [];
for (let i = 0; i < json.length; i++) {
let value = json[i];
for (let j = 0; j < jsonKeys.length; j++) {
if (typeof value[jsonKeys[j]] == "number") {
objectMaxLength[j] = 10;
} else {
const l = value[jsonKeys[j]] ? value[jsonKeys[j]].length : 0;
objectMaxLength[j] =
objectMaxLength[j] >= l
? objectMaxLength[j]
: l;
}
}
let key = jsonKeys;
for (let j = 0; j < key.length; j++) {
objectMaxLength[j] =
objectMaxLength[j] >= key[j].length
? objectMaxLength[j]
: key[j].length;
}
}
const wscols = objectMaxLength.map(w => { return { width: w} });
worksheet["!cols"] = wscols;
}
来自https://github.com/SheetJS/sheetjs/issues/1473#issuecomment-580648494
推荐阅读
- oracle - ORA-06550: 在预期以下内容时遇到“文件结尾”: . ( % ; 查询运行良好,但在块中给出错误
- python - tf.cond 变量。tf.global_variables_initializer() 中的 FailedPreconditionError
- python - 是否可以从网页使用请求中获取 HTML 文本?
- sql - sql除法使用不存在
- class - 在按下同一组中的不同类时禁用反应原生类
- java - 无需访问私钥的加密操作(如在 Android 密钥库中)
- php - 如何输出由 php 类设置的数组的值?
- javascript - 我们如何使用固定标题固定滚动并调整标题的宽度以及 td 相等?
- javascript - ASP.NET 使用 javascript 在浏览器中打开 pdf 文件
- java - Javascript Huffman 解码器/翻译方法之前工作,但现在导致 NullPointerException