Google Sheet App脚本 - 针对特定工作表隐藏行为空,然后导出为PDF

时间:2016-02-06 01:33:58

标签: google-apps-script google-sheets

Google Sheet Link

使用工作脚本更新

我在确定如何隐藏行范围方面有点困难。 我还注意到我没有使用更新的api来发送消息。

UiApp API is deprecated.Expand
File: PrintOrder Line: 28
Anchor API is deprecated.Expand
File: PrintOrder Line: 31
UiInstance API is deprecated.Expand
File: PrintOrder Line: 28

我有一张工作表(“printOrder”从工作表中提取数据(“salesOrder”)

我的计划是将脚本链接到打印或导出到PDF printOrder的salesOrder上的按钮。

现在我想隐藏第41行到第76行之间没有填充的空行。到目前为止,这是我的错误脚本:

function printOrder() {

    SpreadsheetApp.flush();
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("printOrder");
    var gid = sheet.getSheetId();

  //start number Row, start number Column, number of Rows , number of Columns 
    var range = sheet.getRange(41, 1, 36,10); 

  //get the values to those rows
    var values = range.getValues();
    Logger.log(values)

      for (var i=0; i<values.length; i++) {

         if(values[i][0] === ""){
             sheet.hideRow(sheet.getRange(i+41,1));1
         }     
       }

  // Getting 'name' for PDF from Cell G5 
    var name = sheet.getRange("G5").getValue()+".pdf";
  // setting output options  
    var pdfOpts = '&size=letter' +
                  '&fzr=true'+ 
                  '&portrait=true'+
                  '&fitw=true'+
                  '&gridlines=false'+
                  '&printtitle=false'+
                  '&sheetnames=false'+
                  '&pagenum=CENTER'+
                  '&attachment=false'+
                  '&gid=';

  // retrieving url to link for download of pdf
    var url = ss.getUrl().replace(/edit$/, '') + 
              'export?exportFormat=pdf&format=pdf' + 
               pdfOpts + 
               sheet.getSheetId();

  // simple ui popup to allow user to click-download pdf
    var app = UiApp.createApplication().setWidth(200).setHeight(50);
      app.setTitle('Print this sheet');

    var link = app.createAnchor('Download PDF', url).setTarget('_new');
      app.add(link);
      ss.show(app);

 }

感谢您的指导。

干杯,

火星

1 个答案:

答案 0 :(得分:1)

在零处启动i,然后当您使用hideRows()方法时,您需要向我添加41以隐藏正确的行:

sheet.hideRows(i+41);

我认为这一行有一个问题:

for (var i=41; i<values.length; i++) {

values数组在数组索引零中包含第41行数据。您可以使用values语句打印Logger.log('array: ' + array);数组的内容。添加Logger语句,运行代码,然后在VIEW菜单中选择LOGS。

从第41行开始检索值的范围,但要遍历数据,i需要从零开始。

for (var i=0; i<values.length; i++) {

你可以用你想要的任何数字开始计数器编号,但是你需要减去那个数字以便在第一个循环中变为零。

var thisLoopValue;

for (var i=41; i<values.length; i++) {
  thisLoopValue = values[i-41]; //On the first iteration, index needs to be zero.  41 - 41 is zero