Использование скрипта Google Apps для копирования из таблицы данных листов Google в таблицу документов Google - PullRequest
0 голосов
/ 13 января 2020

Есть ли способ написания скрипта Служб Google в Документах Google для извлечения из таблиц Google диапазона, ограниченного непустыми строками, и отображения этих строк в виде таблицы?

I ищу сценарий для копирования непустых строк данных из диапазона ячеек Google Sheets в таблицу в Документах Google с использованием скрипта Google Apps (с которым у меня ограниченный опыт работы).

Данные в копирование кажется слишком большим для прямой ссылки на Google Documents, поэтому действие «Копировать-вставить» из электронной таблицы в документ не требует выбора для привязки данных.

Также число строк является динамическим c, поэтому фиксированное дальность не решит проблему. В электронной таблице я использовал функцию SORTN и установил ее для отображения связей, поэтому размер непустых строк диапазона изменяется.

Я начал со следующей схемы кода:

function myFunction() {

  // Get Google Sheet data
  var app = SpreadsheetApp;
  var ss = app.openById('SHEET_ID');
  var activeSheet = app.getActiveSpreadsheet();
  var range = activeSheet.getRange("B4:D");

  // Position to paste data in Google Docs
  var doc = DocumentApp.getActiveDocument();
  var body = DocumentApp.getActiveDocument().getBody();

  // Build a table from the array.
  body.appendTable(cells);

}

Это самый близкий вопрос, найденный в SE, но не отвечающий на этот запрос: Копирование данных листа в Do c table .

1 Ответ

2 голосов
/ 13 января 2020
  • Вы хотите скопировать диапазон данных из таблицы Google в документ Google в виде таблицы.
    • Вы хотите добавить таблицу в документ Google.
    • В этом случае вы не хотите включать пустые строки в нижней части листа в значения.
    • В вашей ситуации вам не требуется связывать исходную электронную таблицу с таблицей документа.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

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

Поток:

Поток этого примера сценария выглядит следующим образом.

  1. Получите диапазон данных из Google Spreadsheet.
  2. Извлечение значений, фона и стилей текста с использованием диапазона.
  3. Добавить новую таблицу в Google Document со значениями.
  4. Установить формат ячеек.

Пример сценария:

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

function myFunction() {
  // Get Google Sheet data
  var ss = SpreadsheetApp.openById("###");  // Please set the Spreadsheet ID.
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange(4, 2, 1, 5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
  var values = range.getValues();
  var backgroundColors = range.getBackgrounds();
  var styles = range.getTextStyles();

  // Position to paste data in Google Docs
  var body = DocumentApp.getActiveDocument().getBody();
  var table = body.appendTable(values);
  table.setBorderWidth(0);
  for (var i = 0; i < table.getNumRows(); i++) {
    for (var j = 0; j < table.getRow(i).getNumCells(); j++) {
      var obj = {};
      obj[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
      obj[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
      if (styles[i][j].isBold()) {
        obj[DocumentApp.Attribute.BOLD] = true;
      }
      table.getRow(i).getCell(j).setAttributes(obj);
    }
  }
}

Примечание:

  • В этом примере сценария значения ячеек "B4: F" извлекаются из вашей общей электронной таблицы. Поэтому, если вы хотите изменить этот диапазон, измените приведенный выше скрипт.

Ссылки:

Добавлено:

Ошибка при отражении ширины столбца из электронной таблицы в документ:

Возможно отразить ширину столбца. Но когда для ширины столбца выбрано значение «Документ Google», создается впечатление, что результат отличается от результата прямого копирования и вставки таблицы, даже когда единица измерения конвертируется из электронной таблицы в документ.

В общей электронной таблице ширина столбцов от «B» до «F» составляет 21, 100, 100, 100 и 100 пикселей соответственно. Но было обнаружено, что при копировании таблицы вручную из электронной таблицы в документ ширина каждого столбца изменяется от исходного размера. Таким образом, к сожалению, когда сценарий копирует ширину столбца таблицы, результат копирования вручную не может быть реплицирован.

Пример сценария:

В следующем примере сценария ширина столбца электронной таблицы Google копируется в таблицу документа Google.

function myFunction() {
  // Get Google Sheet data
  var ss = SpreadsheetApp.openById("###");  // Please set the Spreadsheet ID.
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange(4, 2, 1, 5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
  var values = range.getValues();
  var backgroundColors = range.getBackgrounds();
  var styles = range.getTextStyles();

  var colWidth = [];  // Added
  for (var col = 2; col <= 6; col++) {  // Added
    colWidth.push(sheet.getColumnWidth(col) * 3 / 4);
  }

  // Position to paste data in Google Docs
  var body = DocumentApp.getActiveDocument().getBody();
  var table = body.appendTable(values);
  table.setBorderWidth(0);

  colWidth.forEach(function(e, i) {table.setColumnWidth(i, e)});  // Added

  for (var i = 0; i < table.getNumRows(); i++) {
    for (var j = 0; j < table.getRow(i).getNumCells(); j++) {
      var obj = {};
      obj[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
      obj[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
      if (styles[i][j].isBold()) {
        obj[DocumentApp.Attribute.BOLD] = true;
      }
      table.getRow(i).getCell(j).setAttributes(obj);
    }
  }
}
  • Когда вы запустите скрипт, вы увидите, что созданная таблица отличается от таблицы, скопированной вручную. Что касается ширины столбца, на данном этапе, пожалуйста, укажите значения для ручной установки colWidth. Или настройте ширину столбца на стороне документа, изменив ширину столбца на стороне таблицы. Или, пожалуйста, используйте приведенный выше скрипт. Это из-за моего плохого мастерства. Я глубоко извиняюсь за это.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...