是否可以将单个工作表导出(使用Google脚本)为PDF而不会隐藏工作表?

时间:2018-10-09 11:01:11

标签: google-apps-script google-sheets export-to-pdf

我希望能够从大型工作簿中导出单个特定工作表,而不必隐藏不需要的工作表。使用Google脚本实际上可行吗?

目前,我正在浏览产品列表,更新每个产品的查询,然后将每个结果导出到单独的PDF。基本上为许多产品创建产品“打印输出”页面。

下面的代码效果很好,但是它首先隐藏了我的打印输出页面以外的所有工作表。可以,除非其他一些工作表受到保护,并且并非所有使用我的导出功能的用户都有权隐藏工作表。

我已经考虑过在宏中添加取消保护/保护功能,但是最好还是在我走这条路之前知道是否导出单张纸?

隐藏的床单技巧来自此帖子Export Single Sheet to PDF in Apps Script

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); 
}

0 个答案:

没有答案