Функция экспорта только текущего листа в Excel, со значениями и форматами - PullRequest
0 голосов
/ 03 марта 2020

У меня есть этот образец таблицы Google . Я хочу создать функцию скрипта Google Apps для экспорта только листа с именем «TargetSheet» в Excel. Поскольку TargetSheet может иметь формулы, важно, чтобы этот экспорт имел только значения. Кроме того, важно сохранять цвета и форматы.

Окончательный файл должен выглядеть так: this .

Кто-то предложил мне использовать этот фрагмент чтобы экспортировать лист, но так как я новичок в Google Apps Script, я не совсем понял, как это сделать. Должен ли я скопировать его в мой код? Должен ли я импортировать это как-то? И после того, как эта функция заработала в моем скрипте, я предполагаю, что мне нужно создать функцию, чтобы это работало. Будет ли это выглядеть так ниже?

function exportarPlanilha() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var file = exportSpreadsheetToFile_(spreadsheet, 'xlsx');
  return file;
}

1 Ответ

2 голосов
/ 04 марта 2020
  • Вы хотите экспортировать один из листов (TargetSheet) в активной электронной таблице как файл XLSX.
  • Из примера сценария URL-адреса в своем вопросе вы хотите создать файл XLSX в вашем Google Диске.
  • Вы хотите добиться этого, используя пример сценария URL в вашем вопросе с помощью скрипта Google Apps.

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

Поток:

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

  1. Скопировать активную электронную таблицу как временную электронную таблицу.
  2. Преобразовать формулы в тексты.
  3. Удалить листы, кроме листа, который вы хотите экспортировать.
  4. Извлечение URL-адресов экспорта.
  5. Извлечение большого двоичного объекта из URL-адреса экспорта.
  6. Создание большого двоичного объекта в виде файла.
  7. Удаление временной таблицы.

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

Пример скрипта:

Скопируйте и вставьте следующий скрипт в редактор скриптов электронной таблицы. И, пожалуйста, установите exportSheetName. Затем, пожалуйста, запустите функцию exportarPlanilha в редакторе скриптов. Когда отобразится экран авторизации, авторизуйте области. Таким образом, скрипт запускается.

function exportarPlanilha() {
  const exportSheetName = 'TargetSheet';  // Please set the target sheet name.

  // 1. Copy the active Spreadsheet as a tempora Spreadsheet.
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet().copy('tmp');

  // 2. Convert the formulas to the texts.
  const targetRange = spreadsheet.getSheetByName(exportSheetName).getDataRange();
  targetRange.copyTo(targetRange, {contentsOnly:true});

  // 3. Delete the sheets except for a sheet you want to export.
  spreadsheet.getSheets().forEach(sheet => {
    if (exportSheetName != sheet.getName()) spreadsheet.deleteSheet(sheet)
  });

  // 4. Retrieve the blob from the export URL.
  const id = spreadsheet.getId();
  const xlsxBlob = UrlFetchApp.fetch(`https://docs.google.com/spreadsheets/export?id=${id}&exportFormat=xlsx`, {headers: {authorization: `Bearer ${ScriptApp.getOAuthToken()}`}}).getBlob();

  // 5. Crete the blob as a file.
  DriveApp.createFile(xlsxBlob.setName(`${exportSheetName}.xlsx`));

  // 6. Delete the temporate Spreadsheet.
  DriveApp.getFileById(id).setTrashed(true);
}
  • В этом случае временная электронная таблица перемещается в поле tra sh.

Примечание:

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

Ссылки:

Если я неправильно понял ваш вопрос, и вы не указали хочу, извиняюсь.

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