Я хотел бы иметь возможность экспортировать один конкретный лист из большой рабочей книги без необходимости скрывать ненужные листы.Возможно ли это на самом деле с помощью Google Scripts?
В данный момент я перебираю список продуктов, обновляю запрос для каждого и затем экспортирую каждый результат в отдельный PDF-файл.По сути, создается страница «Распечатка» для многих продуктов.
Приведенный ниже код работает довольно хорошо, но начинается с того, что все листы, кроме моей страницы «Распечатка», скрываются.Это было бы хорошо, за исключением того, что некоторые другие листы защищены, и не все пользователи, которые будут использовать мою функцию экспорта, имеют право скрывать листы.
Я рассмотрел вопрос о добавлении функции снятия защиты / защиты в мой макрос, нобыло бы хорошо знать, был ли вариант экспорта одного листа, прежде чем я пошел по этому пути?
Трюк со скрывающимися листами был из этого поста Экспорт одного листа в PDF в скрипте приложений
function exportLoopedSheet(firstRow, lastRow) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = 'Printout'; // update for print sheet name
var productSheetName = 'ProductList'; // update for final product list
var folderName = 'productPDFs';
var main = ss.getSheetByName(sheetName);
var sheets = ss.getSheets();
var productList = ss.getSheetByName(productSheetName);
var lastProductRow = lastRow;
var firstProductRow = firstRow;
// Hide all sheets other than the Print Sheet
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() !== sheetName) {
sheets[i].hideSheet();
}
}
for (var prodNo = firstProductRow; prodNo < lastProductRow + 1; prodNo ++) {
var currentProduct = productList.getRange('A'+ prodNo).getValue();
main.getRange('B9').setValue(currentProduct);
// Ensure all changes are updated
SpreadsheetApp.flush();
// call the export sheet function
exportSheet();
}
// Unhide the sheets
for (i = 0; i < sheets.length; i++) {
sheets[i].showSheet();
}
}
function exportSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = 'Printout';
var main = ss.getSheetByName(sheetName);
var sheets = ss.getSheets();
//Hide All Empty Rows in the Print Sheet
var maxRows = main.getMaxRows();
var lastRow = main.getLastRow();
if (maxRows-lastRow != 0){
main.hideRows(lastRow+1, maxRows-lastRow);
}
// Save pdf version
var folder = 'productPDF';
var parentFolder = DriveApp.getFolderById('1234'); //add this line...
var folder, folders = DriveApp.getFoldersByName(folder);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = parentFolder.createFolder(folder);
}
var name = main.getRange("B8").getValue();
folder.createFile(ss.getBlob().setName(name));
// Unhide the rows again
var fullSheetRange = main.getRange(1,1,main.getMaxRows(), main.getMaxColumns());
main.unhideRow(fullSheetRange);
}