Из google sheets в google docs: три способа перенести таблицу

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

1. Перенос таблицы с сохранением связи в google sheets

Например, у меня есть следующая таблица:

google-sheets-table
Исходная таблица в гугл таблицах

И мне надо перенести ее в гугл документы.

Для этого я выделяю диапазон:

google-sheet-range
Выделенный интервал данных

и копирую его через комбинацию клавиш Ctrl+V.

Далее, открываю необходимый файл гугл документов и нажимаю Ctrl+V

Гугл документы спросит в каком виде провести копирование:

link-parameters
Параметры переноса

Выбираю «Связать с таблицей».

google-docs-table
Импортированная связанная таблица в гугл документах

В том случае, если таблица будет изменена в Google sheets, будет доступно изменение данных этой же таблицы в Google docs.

Меняю данные в Google sheets:

google-sheets-changed-table
Измененная таблица в гугл таблице

В Google docs появляется значок связи и возможность обновить данные:

google-docs-table-refresh
Обновление в гугл документах

И после нажатия на «ОБНОВИТЬ» в таблице отразятся актуальные данные:

google-docs-updated-table
Обновленная таблица в гугл документах

2. Перенос таблицы без сохранения связи в google sheets

Все процедуры по переносу аналогичны описанному способу выше, но в параметрах переноса указывается:

no-link-parameters
Параметры переноса

Результат будет аналогичным, но в случае обновления данных в гугл таблицах, таблица и ее данные в гугл документах обновлена не будет.

3. Перенос таблицы при помощи скрипта

Данная необходимость может возникнуть в случае, когда данные гугл таблицы обновляются из интернета и нужна статистика по изменениям, например в еженедельном отчете, который формируется помимо всего прочего как документ.

function transferTableToGDocs() {
 // Google sheets part
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ws = ss.getSheetByName('GAS');

  const tableRange = ws.getDataRange()
  const tableToTransfer = tableRange.getDisplayValues()

 // Google docs part
  const gdoc = DocumentApp.openById('DOC ID');
  const docBody = gdoc.getBody();
  
  const header = docBody.appendParagraph(`Таблица от ${new Date()}`);
  header.setHeading(DocumentApp.ParagraphHeading.HEADING3);

  docBody.appendTable(tableToTransfer);

}

const tableRange = ws.getDataRange()
const tableToTransfer = tableRange.getDisplayValues()
— getDisplayValues необходим, чтобы перенести данные так как они отражаются в гугл таблице.

const gdoc = DocumentApp.openById('DOC ID'); — открываю гугл документ по его айди.
const docBody = gdoc.getBody(); — получают тело документа.

const header = docBody.appendParagraph(`Таблица от ${new Date()}`); — добавляю параграф с текстом и датой
header.setHeading(DocumentApp.ParagraphHeading.HEADING3); — делаю этот параграф Заголовком 3.

docBody.appendTable(tableToTransfer); — добавляю таблицу.

google-docs-table-with-script
Результат работы google apps script

Важно! — необходимо отличать appendParagraph и appendTable, которые добавляют данные в конец docBody от insertParagraph и insertTable, которые вставляют параграф и таблицу по ChildIndex.

После этого скрипт можно завесить на триггер по дате/времени и вставлять таблицы на какой-либо временной основе.


Ваше мнение важно и может улучшить блог

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

У этой записи 9 комментариев

  1. Иван

    Здравствуйте, у вас таблица с 10 товарами, но бывает так что товаров может быть сегодня 10 а завтра 5 , возможно как сделать так что бы изменялись количество строк исходя из количество товаров, без пустых строк

    1. Добрый день.
      const tableRange = ws.getDataRange() — как раз и берет все непустые строки-столбцы, то есть без привязки к количеству строк или столбцов будь их хоть 10, хоть 5, хоть 25.
      Если по какой-то причине он захватывает пустые строки (хотя не должен), используйте для выделения того, что надо копировать getRange()
      https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column,-numrows,-numcolumns
      и в нем третьим аргументом — getLastRow()
      https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

  2. Андрей

    Добрый день! Подскажите где можно узнать про ChildIndex в документах гугл(документацию по google app script я нашел). Я так понимаю это метка в гугл документе. А как можно ее поставить в документе?

    1. Добрый день!
      Это не совсем метка, воспринимайте элемент как массив. Например тело документа со всеми параграфами, разрывами , новыми строками, переводами строк и тд. Каждый из них — по сути элемент массива body. Получите весь документ как body = ActiveDocument().getBody() — если проводить аналогию то getRange в гуглотаблицах. Получите массив содержащий некие данные. Далее если посмотреть на него через getNumChildren() вы по сути получите длину этого массива — array.length. и вот как раз childIndex — цифра — обращается по индексу к конкретному элементу в вашем массиве. Сделайте привычный цикл for и посмотрите что в каждом элементе. Пример — https://docs.google.com/document/d/1DEIZC2Y9vuY0QMjDSl4fHB0YryERK5Ee9IhMCuWIt_Q/edit?usp=sharing

      Можно еще посмотреть вот тут — https://dmitriizhuk.ru/2022/03/29/%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d1%8b-%d0%b2-google-docs-%d1%87%d0%b0%d1%81%d1%82%d1%8c-1-%d1%82%d0%b5%d0%ba%d1%81%d1%82-%d0%bf%d0%b0%d1%80%d0%b0%d0%b3%d1%80%d0%b0%d1%84%d1%8b-%d1%81%d1%82/
      там тоже есть про чайлдов

  3. Андрей

    Огромное спасибо за ответ, очень подробно объяснили

  4. Максим

    Добрый день. Подскажите как перенести таблицу скриптом. Чтобы она отображалась в гугл док. так же как и в 1 и 2 варианте с учётом всех форматов. А не просто таблицей как в 3.?

  5. Максим

    Спасибо большое за ответ. Очень помогло. Разобрался, с выравниванием столбцов, всё заходит как надо. Сейчас встал вопрос как поместить таблицу в нужную страницу и строку (которая не является последней). В идеале заменив текст или какой либо тэг, для определения расположения в гугл доке. Пробовал через (replaceText) — не работает. Был бы очень признателен. Может есть какое ни будь решение для вставки на нужное место в гугл доке.

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