Можно ли экспортировать (используя Google Scripts) один лист в PDF без скрытия листов? - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы иметь возможность экспортировать один конкретный лист из большой рабочей книги без необходимости скрывать ненужные листы.Возможно ли это на самом деле с помощью 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); 
}
...