autoResizeColumns слишком долго обрабатывается - PullRequest
0 голосов
/ 17 февраля 2020

Я потратил пару часов, пытаясь понять, почему мой сценарий так долго обрабатывается. Я понял, что виновник был autoResizeColumns(). Чем больше строк на листе, тем дольше это занимает. Это займет около минуты около 6K строк. В моем случае мне приходилось вызывать его дважды на двух разных листах, около 6 тыс. Строк.

Неужели нет другого варианта? Выполнение этого действия вручную на листе с помощью мыши занимает значительно меньше времени. Итак, мой вопрос к вам, какие методы вы используете для автоматического изменения размера столбцов?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Ответ:

Используя Advanced Sheets Service [1] , вы можете создать пакетный запрос [2] в скрипте Google Apps для вашего листа, который автоматически изменяет размеры столбцов для вас.

Построение пакетного запроса:

После включения расширенной службы листов из Resources > Advanced Google services... При выборе пункта меню и нажатии переключателя On вы можете создать пакетный запрос как объект JSON.

Структура вашего пакетного запроса должна выглядеть примерно так:

{
  "requests": [
    {
      "autoResizeDimensions": {
        "dimensions": {
          "sheetId": "your-sheet-id",
          "dimension": "COLUMNS",
          "startIndex": X,
          "endIndex": Y
        }
      }
    }
  ]
}

Где X и Y - целые числа, представляющие первый и последний столбцы, для которых вы sh хотите иметь автоматическое изменение размера. Дополнительную информацию можно найти в разделе «Автоматическое изменение размера столбца» [3] документации «Операции со строками и столбцами» [4] .

Примечание: значения startIndex и endIndex похожи на массивы и поэтому начинаются с 0. Если вы хотите sh обновить первые 1000 столбцов, вы должны использовать startIndex из 0 и endIndex из 999.

Пример кода:

function resizeColumns() {
  // You can still use the SpreadsheetApp methods to get the Spreadsheet
  // and Sheet IDs which you need for the batch request
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetId = ss.getSheetByName("Name-of-Sheet-to-resize").getSheetId();

  // Define the range of columns
  var X = 0;
  var Y = 999;

  // Build the batch resource
  var resource = {
  "requests": [
    {
      "autoResizeDimensions": {
        "dimensions": {
          "sheetId": sheetId,
          "dimension": "COLUMNS",
          "startIndex": X,
          "endIndex": Y
        }
      }
    }
  ]
}
  // Make the batch request
  Sheets.Spreadsheets.batchUpdate(resource, ss.getId());

}

Надеюсь, это полезно для вас!

Ссылки:

  1. Advanced Sheets Service
  2. Метод: spreadsheets.batchUpdate
  3. Google Sheets> API v4 - Операции со строками и столбцами
  4. Автоматическое изменение размера столбца
1 голос
/ 17 февраля 2020

Листы API обычно быстрее и доступны из скрипта приложений через расширенные сервисы Google

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