Удалить сразу несколько пустых строк в ExcelJS

У меня есть следующая функция, которая хорошо работает для небольшого количества строк:

      async function RemoveEmptyRows() {
  await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getActiveWorksheet();
    var selectedRange = context.workbook.getSelectedRange();
    var surroundingRegion = selectedRange.getSurroundingRegion();

    var firstCell = selectedRange.getCell(0, 0);
    firstCell.load(['columnIndex']);
    surroundingRegion.load(['rowCount', 'columnCount']);
    

    await context.sync();
    var newRange = sheet.getRangeByIndexes(0, firstCell.columnIndex, surroundingRegion.rowCount, 1);
    newRange.load(['address', 'rowCount', 'values']);
    await context.sync();
    
    var i = 0;
    var loopRange = newRange.rowCount;
    var counter = 0;
    var cellText = "";

    while (i < loopRange) {
      cellText = newRange.values[i][0];

      if (cellText == "") {
          var entireRow = sheet.getRangeByIndexes(i - counter, 0, 1, surroundingRegion.columnCount);
        entireRow.delete(Excel.DeleteShiftDirection.up);
        counter++;
      }
      i++;
    }

    await context.sync();
  });
}

Проблема с этой функцией в том, что она сдвигает всю строку вверх, строка за строкой. Есть еще одна функция (модифицированная из ScriptLab) для удаления дубликатов, которая хорошо работает с гораздо большим количеством строк.

      async function RemoveDuplicates() {
  await Excel.run(async (context) => {    
    const sheet = context.workbook.worksheets.getActiveWorksheet();
    var selectedRange = context.workbook.getSelectedRange();
    var firstCell = selectedRange.getCell(0, 0);
    var surroundingRegion = selectedRange.getSurroundingRegion();

    firstCell.load('columnIndex');
    surroundingRegion.load('address');

    await context.sync();
    var columnIndex = firstCell.columnIndex;
    
    const deleteResult = surroundingRegion.removeDuplicates([columnIndex], true);
    deleteResult.load();
  });
}

Есть ли способ создать что-то похожее на функцию RemoveDuplicates, но для EmptyRows?

Спасибо.

1 ответ

Пока в Excel JS нет DeleteEmptyRows(), но это звучит как хорошее предложение, мы рассмотрим возможность создания этого API в будущем.

Можно ли отсортировать диапазон? Если да, то вот обходной путь. Во-первых, отсортируйте диапазон, чтобы пустые строки остались вместе, затем создайте диапазон, включающий пустые строки, после этого вы можете вызвать range.delete(up) чтобы удалить пустые строки.

Другие вопросы по тегам