剑道网格如何自动调整excel导出行的高度?
我有一个自定义的excel输出类,用于解析网格,在某些情况下,用模板数据替换网格中的数据。在这个特定的实例中,我想要输出的数据是多行的。我让它工作到这一点,但导出的表是一行高,所以你不能看到第二行到第七行在外地。 预期结果: 实际结果: 这是我代码的相关部分。解析循环应用模板并剥离html,但首先添加换行符剑道网格如何自动调整excel导出行的高度?,excel,kendo-ui,kendo-grid,Excel,Kendo Ui,Kendo Grid,我有一个自定义的excel输出类,用于解析网格,在某些情况下,用模板数据替换网格中的数据。在这个特定的实例中,我想要输出的数据是多行的。我让它工作到这一点,但导出的表是一行高,所以你不能看到第二行到第七行在外地。 预期结果: 实际结果: 这是我代码的相关部分。解析循环应用模板并剥离html,但首先添加换行符 if (me.ColumnTemplates && $.isArray(me.ColumnTemplates)) { for (let c = 0; c <
if (me.ColumnTemplates && $.isArray(me.ColumnTemplates)) {
for (let c = 0; c < me.ColumnTemplates.length; c++) {
let ct = me.ColumnTemplates[c];
if (ct.template(dr).includes("</br>")) {
sheet.rows[r + 1].cells[ct.cellIndex - 1].wrap = true;
}
me.elem.innerHTML = ct.template(dr).replace(/<\/br>/g, "\n");
sheet.rows[r + 1].cells[ct.cellIndex - 1].value = me.elem.textContent || me.elem.innerText || "";
}
}
if(me.ColumnTemplates&$.isArray(me.ColumnTemplates)){
for(设c=0;c”){
sheet.rows[r+1]。单元格[ct.cellIndex-1]。wrap=true;
}
me.elem.innerHTML=ct.template(dr.replace(//g,“\n”);
sheet.rows[r+1]。cells[ct.cellIndex-1]。value=me.elem.textContent | | | me.elem.innerText | | |”;
}
}
任何帮助都将不胜感激。我想有一个设置,使这“只是工作”,或有一种方法来计算所需的高度,并手动设置它。两者都可以。我不知道自动调整大小的方法,但您可以通过sheets.rows.height设置行高:
<script>
var workbook = new kendo.ooxml.Workbook({
sheets: [{
rows: [{
cells: [{ value: "this row is 100px high" }],
height: 100
}, {
cells: [{ value: "this row is 200px high" }],
height: 200
}]
}]
});
</script>
var workbook=新建kendo.ooxml.workbook({
工作表:[{
行:[{
单元格:[{value:“此行高达100px”}],
身高:100
}, {
单元格:[{value:“此行高200px”}],
身高:200
}]
}]
});
更新代码以利用html模板中的每一项,您可以执行以下操作:
if (me.ColumnTemplates && $.isArray(me.ColumnTemplates)) {
for (let c = 0; c < me.ColumnTemplates.length; c++) {
let ct = me.ColumnTemplates[c];
if (ct.template(dr).includes("</br>")) {
sheet.rows[r + 1].cells[ct.cellIndex - 1].wrap = true;
sheet.rows[r + 1].height = (ct.template(dr).match(/<\/br>/g) || []).length * 20 + 20; //20 was default row height.
}
me.elem.innerHTML = ct.template(dr).replace(/<\/br>/g, "\n");
sheet.rows[r + 1].cells[ct.cellIndex - 1].value = me.elem.textContent || me.elem.innerText || "";
}
}
if(me.ColumnTemplates&$.isArray(me.ColumnTemplates)){
for(设c=0;c”){
sheet.rows[r+1]。单元格[ct.cellIndex-1]。wrap=true;
sheet.rows[r+1]。高度=(ct.template(dr).match(//g)| |[])。长度*20+20;//20是默认的行高度。
}
me.elem.innerHTML=ct.template(dr.replace(//g,“\n”);
sheet.rows[r+1]。cells[ct.cellIndex-1]。value=me.elem.textContent | | | me.elem.innerText | | |”;
}
}
将列宽设置为自动
解决方案1
当剑道网格绑定到JavaScript/jQuery中的数据源时
解决方案2
当剑道网格从未绑定到jQuery数据源的动作控制器获取数据源时,添加事件以调用excel导出上的JavaScript函数
将事件添加到剑道网格控件
.Events(e => e.ExcelExport("exportToExcelSheetColumnWidthChange"))
是的,我知道我可以手动调整大小。问题是如何调整它的大小以显示(比如)7行?我不知道以像素为单位有多高。在您的代码示例中,每当出现“”时,您都会将wrap设置为true,如果您计算模板中的“数量,并对该行执行类似row.height=row.height*(数量)的操作,会怎么样?丑陋,我知道,而且自动大小会很棒,我同意。我正在测试它。我会让你知道它是如何工作的。我没有想到要读它为一行指定的高度。我想知道如何确定这个高度。这是我的工作代码。请把它加到你的答案里,我会接受的。奇怪的是,它工作得很好。我“以为”这会是一排。sheet.rows[r+1]。高度=(ct.template(dr.match(//g)| |[])。长度*sheet.rows[r+1]。高度@约翰洛德很高兴你能找到答案-我已经更新了答案。我很感激你的答案,但你回答的宽度,我已经知道如何控制。我问的是身高。
function exportToExcelSheetColumnWidthChange(e) {
var columns = e.workbook.sheets[0].columns;
columns.forEach(function (column) {
delete column.width;
column.autoWidth = true;
});
};
.Events(e => e.ExcelExport("exportToExcelSheetColumnWidthChange"))