Сетка кендо как мне автоматически изменить высоту строки экспорта в Excel? - PullRequest
1 голос
/ 18 июня 2020

У меня есть собственный выходной класс Excel, который я использую для синтаксического анализа сетки и в некоторых случаях для замены данных в сетке данными шаблона. В этом конкретном случае данные, которые я хочу вывести, являются многострочными. У меня это работает, но экспортированный лист имеет высоту в одну строку, поэтому вы не можете увидеть строки со второй по седьмую в поле. желаемый результат:

desired

фактический результат:

actual result

Вот соответствующий раздел моего кода. Это синтаксический анализ l oop, который применяет шаблоны и полосы 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 || "";
    }
}

любая помощь будет принята с благодарностью. Я хотел бы иметь настройку, которая заставляет это «просто работать», или иметь способ вычислить необходимую высоту и установить ее вручную. Либо нормально.

1 Ответ

1 голос
/ 19 июня 2020

Мне не известен способ автоматического изменения размера, но вы можете установить высоту строки с помощью sheet.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>

пример, найденный здесь

Обновив код для использования каждого из них в шаблоне 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 || "";
    }
}
...