Получение ширины и высоты каждой ячейки в выбранном диапазоне - PullRequest
0 голосов
/ 22 апреля 2020

Чтобы дать вам немного контекста, я пытаюсь получить свойства width и height каждой ячейки в выбранном диапазоне. Для этого я использую API Office Javascript, и до сих пор я могу думать только о том, чтобы циклически проходить по каждой ячейке в выбранном диапазоне и извлекать указанные свойства для каждого.

Предполагая, что selectedRange является Выбор пользователя и соответствующие свойства были загружены заранее, вот что у меня было бы:

    for (let r = 0; r < selectedRange.rowCount; r++) {
      console.log(selectedRange.getRow(r).height);
      for (let c = 0; c < selectedRange.columnCount; c++) {
        console.log(selectedRange.getColumn(c).width);
      }
    }

Проблема, однако, заключается в том, что свойства width и height для каждого столбца и строки не загружаются и поправьте меня, если я ошибаюсь, но они должны быть загружены в l oop для каждого столбца и строки. Это, в свою очередь, означало бы вызов context.sync() довольно много раз внутри l oop, что, согласно официальной документации, является очень плохой идеей.

Итак, есть ли другой способ сделать это, который не я так часто звоню context.sync()? 1015 *

Я все еще довольно новичок в Office Js, поэтому любая помощь очень ценится. Спасибо всем!

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Да. Есть способ сделать это без вызова context.syn c внутри al oop. Вам нужно использовать расщепленный шаблон l oop. Подробности и примеры см. В разделе Избегайте использования метода context.syn c в циклах и ответы стека, на которые он ссылается.

0 голосов
/ 22 апреля 2020

Один из возможных способов - сохранить все диапазоны (ячейки) и загрузить их в одном и том же context.syn c (), а затем вывести высоту и ширину. Вы должны вызвать range.untrack, чтобы сохранить память.

https://docs.microsoft.com/en-us/javascript/api/excel/excel.range?view=excel-js-preview#untrack -

Кроме того, ваш код выше может сделать некоторую оптимизацию, он не должен быть n * m, достаточно n + m.

let selectedRange = context.workbook.getSelectedRange ();

selectedRange.load("rowCount,columnCount");
await context.sync();

for (let r = 0; r < selectedRange.rowCount; r++) {
  let row = selectedRange.getRow(r);
  row.load("height");
  await context.sync();

  console.log(row.height);
  }

for (let c = 0; c < selectedRange.columnCount; c++) {
  let column = selectedRange.getColumn(c);
  column.load("width");
  await context.sync();
  console.log(column.width);
}
0 голосов
/ 22 апреля 2020

Если я правильно понимаю ваш сценарий, вы хотели бы получить доступ к высоте и ширине каждой ячейки. Таким образом, вы можете попробовать range.format.rowHight и range.format.columnWidth

Поэтому вы можете использовать range.getCellProperties, который вернет вам 2d массив с информацией о ширине и высоте для каждой ячейки этого диапазона.

Вот документ для range.getCellProperties https://docs.microsoft.com/en-us/javascript/api/excel/excel.range?view=excel-js-preview#getcellproperties -cellpropertiesloadoptions-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...