Экспорт одного листа в PDF в скрипте приложений

У меня есть много листов в электронной таблице. У меня есть 2 листа, которые я хотел бы экспортировать каждый раз. Первый лист - это лист с информацией. Второй лист - это лист, который я должен предоставить клиентам, и он использует ссылки из первого листа.

В настоящее время я создаю новую временную электронную таблицу, копирую Sheet One в новую электронную таблицу, затем копирую Sheet Two во временную электронную таблицу. После этого я конвертирую временную таблицу в PDF. Затем я удаляю временную электронную таблицу и сохраняю PDF в папку на Google Диске.

Созданный PDF содержит 2 страницы обоих листов. Мне нужен только второй лист. Если я перевожу только лист два, на листе останется много ошибок #REF, поскольку лист один отсутствует. Есть ли способ экспортировать только лист два без ошибок #REF?

Вот мой код ниже:

//create a temporary spreadsheet, copy both files onto it
var newSpreadsheet = SpreadsheetApp.create(nameOfSheet);
var d = ss.getSheetByName('Data').copyTo(newSpreadsheet); //the sheet     with all the information
d.setName('Data');

sheetToCopy.copyTo(newSpreadsheet); //the sheet that uses references from the data sheet
newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Sheet1")); //delete the original sheet of the new spreadsheet
var blobOfNewSpreadsheet = newSpreadsheet.getBlob(); //create pdf
folder.createFile(blobOfNewSpreadsheet); //add to folder


//delete the temporary spreadsheet2
var deleteSpreadsheet = DriveApp.getFileById(newSpreadsheet.getId());
deleteSpreadsheet.setTrashed(true);
 ÁngelBlanco18 мар. 2018 г., 22:03
Не могли бы вы, пожалуйста, как вы решили это? У меня та же проблема, но я не могу обойти ... и, кстати, те же методы доступны для PHP-клиента API? Спасибо!

Ответы на вопрос(1)

Решение Вопроса

когда электронная таблица экспортируется через getBlob. Таким образом, вы можете временно скрыть любые ненужные листы до экспорта.

function export() {    
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Unwanted Sheet');
  sheet.hideSheet();
  DriveApp.createFile(ss.getBlob());
  sheet.showSheet();
}

Выше только скрывает один лист, что достаточно в контексте вашего вопроса. Вот версия, которая скрывает все, кроме одного.

function exportSheet(sheetName) {    
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetName() !== sheetName) {
      sheets[i].hideSheet()
    }
  }
  DriveApp.createFile(ss.getBlob());
  for (var i = 0; i < sheets.length; i++) {
    sheets[i].showSheet()
  }
}
 Kevin Bai13 июл. 2016 г., 23:18
Отличное решение! Я подумал о том, чтобы скопировать отображаемые значения нужного мне листа вместо ссылок для каждой ячейки. Это решение намного быстрее.

Ваш ответ на вопрос