Ошибка при объединении ячеек таблицы в Google Docs с использованием App Script

Вопрос или проблема

Я пытаюсь объединить верхнюю строку таблицы в документе Google с помощью сценария приложения. Я получал ошибку, поэтому попробовал код объединения отдельно на простой таблице. Происходит то же самое.

Вот код, который является примером из документации. Похоже, он работает, но когда я возвращаюсь к документу, я получаю ошибку и должен перезагрузить. Я пробовал Chrome и Firefox. Есть идеи?

Скриншот ошибки

    function testMerge(){
      var doc = DocumentApp.getActiveDocument();
      var documentTab = doc.getActiveTab().asDocumentTab();
      var body = documentTab.getBody();

      // Пример 2: Объединение ячеек таблицы
      // Создание двумерного массива, содержащего содержимое ячеек таблицы.
      var cells = [
          ['Строка 1, Ячейка 1', 'Строка 1, Ячейка 2'],
          ['Строка 2, Ячейка 1', 'Строка 2, Ячейка 2']
      ];
      // Построение таблицы из массива.
      var table = body.appendTable(cells);
      // Получение первой строки в таблице.
      var row = table.getRow(0);
      // Получение двух ячеек в этой строке.
      var cell1 = row.getCell(0);
      var cell2 = row.getCell(1);
      // Объединение текущей ячейки с предыдущим элементом-соседом.
      var merged = cell2.merge();
    }

Первая строка действительно объединяется, но я должен перезагрузить файл. Я могу продолжать кодирование пока, но если я не смогу пройти мимо этого, конечный продукт не будет пригоден для использования.

Я предположил, что ваша проблема может быть связана с этой трекер-ошибки. Ссылка Похоже, это ошибка. Что касается объединения верхней строки таблицы в документе Google с помощью сценария приложения, в этом случае как насчет использования Google Docs API следующим образом?

Когда ваш текущий сценарий изменяется, он становится следующим.

Измененный сценарий:

Перед использованием этого сценария, пожалуйста, включите Docs API в Расширенных сервисах Google.

function myFunction() {
  var doc = DocumentApp.getActiveDocument();
  var documentTab = doc.getActiveTab().asDocumentTab();
  var body = documentTab.getBody();

  // Пример 2: Объединение ячеек таблицы
  // Создание двумерного массива, содержащего содержимое ячеек таблицы.
  var cells = [
    ['Строка 1, Ячейка 1', 'Строка 1, Ячейка 2'],
    ['Строка 2, Ячейка 1', 'Строка 2, Ячейка 2']
  ];
  // Построение таблицы из массива.
  body.appendTable(cells);


  // --- Я изменил нижеприведенный сценарий.
  doc.saveAndClose();
  const id = doc.getId();
  const index = Docs.Documents.get(id).body.content.findLast(({ table }) => table).startIndex;
  const requests = [
    {
      mergeTableCells: {
        tableRange: {
          columnSpan: 2,
          rowSpan: 1,
          tableCellLocation: { tableStartLocation: { index }, rowIndex: 0, columnIndex: 0 }
        }
      }
    }
  ];
  Docs.Documents.batchUpdate({ requests }, id);
}

Тестирование:

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

введите описание изображения здесь

Ссылки:

.

Ответ или решение

Решение проблемы с объединением ячеек таблицы в Google Docs с помощью Google Apps Script

Если вы сталкиваетесь с ошибкой при попытке объединить ячейки верхнего ряда таблицы в Google Docs с использованием Google Apps Script, это может быть результатом специфической проблемы в самом интерфейсе. Давайте подробнее разберем вашу проблему и предложим оптимальное решение.

1. Анализ вашей исходной ситуации

Вы привели код, который, в принципе, должен объединять ячейки верхнего ряда таблицы. Однако, судя по вашему описанию, после выполнения скрипта возникает ошибка, и вам приходится перезагружать документ. Это может происходить из-за некорректной работы API или неожиданных сбоев в интерфейсе Google Docs.

2. Параметры вашего скрипта

Ваш оригинальный скрипт включает следующие ключевые моменты:

  1. Создание массива для таблицы и её добавление в тело документа.
  2. Получение строки и ячеек, которые нужно объединить.
  3. Попытка объединения ячеек с помощью метода merge(), что вызывает проблемы.

Как видно, ошибка происходит после выполнения метода cell2.merge();, что может свидетельствовать о том, что изменения в структуре документа не были полностью обработаны системой.

3. Альтернативное решение с использованием Google Docs API

Согласно вашим предположениям и приведенным ссылкам, лучшим решением будет использование Google Docs API для выполнения объединения ячеек. Это позволит избежать ошибок и обеспечит более надежное выполнение операции. Перед использованием этого метода не забудьте включить API в Advanced Google Services.

Вот обновленная версия вашего кода:

function myFunction() {
  var doc = DocumentApp.getActiveDocument();
  var documentTab = doc.getActiveTab().asDocumentTab();
  var body = documentTab.getBody();

  // Создание двумерного массива для ячеек таблицы
  var cells = [
    ['Row 1, Cell 1', 'Row 1, Cell 2'],
    ['Row 2, Cell 1', 'Row 2, Cell 2']
  ];

  // Добавление таблицы в тело документа
  body.appendTable(cells);

  // Сохраняем и закрываем документ, перед тем как использовать API
  doc.saveAndClose();

  // Получаем ID документа для последующих запросов
  const id = doc.getId();
  const index = Docs.Documents.get(id).body.content.findLast(({ table }) => table).startIndex;

  // Запрос на объединение ячеек таблицы
  const requests = [
    {
      mergeTableCells: {
        tableRange: {
          columnSpan: 2,
          rowSpan: 1,
          tableCellLocation: { tableStartLocation: { index }, rowIndex: 0, columnIndex: 0 }
        }
      }
    }
  ];

  // Выполняем пакетный обновление документа
  Docs.Documents.batchUpdate({ requests }, id);
}

4. Результаты и тестирование

После запуска сокращенного скрипта с использованием API объединение ячеек должно пройти без ошибок, и вы сможете избежать необходимости перезагрузки документа. Это даст вам возможность продолжать работу с проектом, не беспокоясь о возможных сбоях.

5. Заключение

Проблемы, подобные вашей, часто возникают в ходе работы с Google Apps Script и API. Используя Google Docs API для выполнения более сложных операций, вы можете повысить стабильность и надежность своего кода. В случае дальнейших вопросов или возникновения новых ошибок, рекомендуется обратиться к документации Google Apps Script и Google Docs API, чтобы найти актуальные решения.

Оцените материал
Добавить комментарий

Капча загружается...