剑道网格如何自动调整excel导出行的高度?

剑道网格如何自动调整excel导出行的高度?,excel,kendo-ui,kendo-grid,Excel,Kendo Ui,Kendo Grid,我有一个自定义的excel输出类,用于解析网格,在某些情况下,用模板数据替换网格中的数据。在这个特定的实例中,我想要输出的数据是多行的。我让它工作到这一点,但导出的表是一行高,所以你不能看到第二行到第七行在外地。 预期结果: 实际结果: 这是我代码的相关部分。解析循环应用模板并剥离html,但首先添加换行符 if (me.ColumnTemplates && $.isArray(me.ColumnTemplates)) { for (let c = 0; c <

我有一个自定义的excel输出类,用于解析网格,在某些情况下,用模板数据替换网格中的数据。在这个特定的实例中,我想要输出的数据是多行的。我让它工作到这一点,但导出的表是一行高,所以你不能看到第二行到第七行在外地。 预期结果:

实际结果:

这是我代码的相关部分。解析循环应用模板并剥离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;
       }
       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"))