2017-02-19 61 views
0

我想知道行結果篩選器在谷歌應用程序腳本,但我沒有達到獲得它們,我總是獲得選擇或工作表的所有行。我已經調查過,似乎這個API不可能。你知道這是真的還是以另一種方式獲得這些行? THX是否可以知道Google Spreadsheet中的過濾器的行結果?

function docReport() { 
    try { 
    splashScreen("Generando informe...");  
    var activeSheet = SpreadsheetApp.getActiveSheet();  
    var numberOfColumns = activeSheet.getLastColumn(); 
    var numberOfRows = activeSheet.getLastRow(); 
    var activeRow = activeSheet.getRange(1, 1, numberOfRows, numberOfColumns).getValues(); 

    var docReport = DocumentApp.create(REPORT_FILE_NAME); 
    var bodyReport = docReport.getBody(); 
    bodyReport.setAttributes(stylePage); 

    for (var row = 1; row < numberOfRows; row++) { 
     if (!isEmpty(activeRow[row], numberOfColumns)) { 
     var image = UrlFetchApp.fetch(IMG_BBVA); 
     /*var paragraph = bodyReport.appendParagraph(""); 
     paragraph.addPositionedImage(image).setHeight(100).setWidth(98); 
     paragraph.appendText("\r\n"); 
     paragraph.setAttributes(styleTitle);*/ 

     //bodyReport.appendImage(image).setHeight(100).setWidth(98); //Incluimos la imagen de cabecera 

     bodyReport.appendParagraph("").addPositionedImage(image).setHeight(100).setWidth(98).setLayout(DocumentApp.PositionedLayout.WRAP_TEXT); 
     bodyReport.appendParagraph("   SERVICIOS JURÍDICOS").setAttributes(styleTextBlue); 
     bodyReport.appendParagraph(DATE_REPORT + "\r\n\r\n").setAttributes(styleDate); 

     for (var col = 1; col < numberOfColumns; col++) { //Ignoramos la columna 1 que es el contador 
      if (activeRow[row][col] != "") { //Si el valor es vacio no lo imprimimos 
      if (activeRow[0][col] == "NORMA") 
       bodyReport.appendParagraph(String(activeRow[row][col]).trim()).setAttributes(styleTextNorma); //Incluimos contenido 
      else { 
       bodyReport.appendParagraph(activeRow[0][col] + ":").setAttributes(styleTitle); //Incluimos título 
       bodyReport.appendParagraph(String(activeRow[row][col]).trim()).setAttributes(styleText); //Incluimos contenido 
      } 
      bodyReport.appendParagraph(""); 
      } 
     } 
     bodyReport.appendPageBreak(); 
     } 
    } 
    bodyReport.appendPageBreak();  
    docReport.saveAndClose(); 
    MailApp.sendEmail(Session.getActiveUser().getEmail(), "Informe " + REPORT_FILE_NAME + " generado", 
         'Se ha creado un nuevo informe "' + REPORT_FILE_NAME + '" en su unidad Google Drive: \n\r' + docReport.getUrl()); 
    SpreadsheetApp.flush(); 
    SpreadsheetApp.getUi().alert('Se ha creado un nuevo informe "' + REPORT_FILE_NAME + '" en su unidad Google Drive \r\n'); 
    } catch(e) { 
    Logger.log("ERROR in function createPdf \r\nMessage: " + e.message + "\r\nFile gs: " + e.fileName + "\r\nLine: " + e.lineNumber) 
    Logger.log("\r\nUser: " + Session.getActiveUser().getEmail() + ", Date: " + Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd'_'HH:mm:ss")); 
    MailApp.sendEmail(EMAIL_DEV, SUBJECT_MAIL, Logger.getLog()); 
    } 
} 
+0

snippet please。 –

+0

完成@CedricDruck,thx – Richi

回答

0

最後,我已經能夠實現我的目標,但它不是一個通常的解決方案,但它的工作原理。在處理工作表之前,我選擇所有行並放入背景顏色,Google Spreadsheet僅將背景顏色設置爲過濾後的行。然後,我處理所有工作表,但我知道已過濾的行,因爲我詢問了它的背景。我希望這個解決方案適合你,並對你有用。謝謝。

function docReport() { 
    try { 
    splashScreen("Generando informe...");  
    var activeSheet = SpreadsheetApp.getActiveSheet();  
    var numberOfColumns = activeSheet.getLastColumn(); 
    var numberOfRows = activeSheet.getLastRow(); 
    var activeRow, rowRange; 
    var titleRow = activeSheet.getRange(1, 1, 1, numberOfColumns).getValues(); 

    //Set los fondos a otro color para identificar las líneas a las líneas que tienen filtro 
    activeSheet.setActiveSelection("2:" + activeSheet.getLastRow()).setBackground("#fffff9"); 

    var docReport = DocumentApp.create(REPORT_FILE_NAME); 
    var bodyReport = docReport.getBody(); 
    bodyReport.setAttributes(stylePage); 

    for (var row = 2; row <= numberOfRows; row++) { //Empieza en 2 ya que no incluyo la fila de los títulos 
     rowRange = activeSheet.getRange(row, 1, 1, numberOfColumns); 
     if (rowRange.getBackground() == "#fffff9") { //If it has #fffff9 background, it means that it is a filtered row 
     activeSheet.setActiveSelection(row + ":" + row).setBackground("#ffffff"); //Volvemos a dejar los fondos en blanco 
     activeRow = rowRange.getValues(); 
     if (!isEmpty(activeRow[0], numberOfColumns)) { 
      var image = UrlFetchApp.fetch(IMG_BBVA); 
      bodyReport.appendParagraph("").addPositionedImage(image).setHeight(100).setWidth(98).setLayout(DocumentApp.PositionedLayout.WRAP_TEXT); 
      bodyReport.appendParagraph("   S.J.").setAttributes(styleTextBlue); 
      bodyReport.appendParagraph(DATE_REPORT + "\r\n\r\n").setAttributes(styleDate); 

      for (var col = 1; col < numberOfColumns; col++) { //Ignoramos la columna 1 que es el contador 
      if (activeRow[0][col] != "") { //Si el valor es vacio no lo imprimimos 
       if (col == COLUMN_NORMA) 
       bodyReport.appendParagraph(String(activeRow[0][col]).trim()).setAttributes(styleTextNorma); //Incluimos contenido 
       else { 
       bodyReport.appendParagraph(titleRow[0][col]).setAttributes(styleTitle); //Incluimos título 
       bodyReport.appendParagraph(String(activeRow[0][col]).trim()).setAttributes(styleText); //Incluimos contenido 
       } 
       bodyReport.appendParagraph(""); 
      } 
      } 
      bodyReport.appendPageBreak(); 
     } 
     } 
    } 
    activeSheet.setActiveSelection("2:" + activeSheet.getLastRow()).setBackground("#ffffff"); //Volvemos a dejar los fondos en blanco menos primera fila 
    bodyReport.appendPageBreak();  
    docReport.saveAndClose(); 
    MailApp.sendEmail(Session.getActiveUser().getEmail(), "Informe " + REPORT_FILE_NAME + " generado", 
         'Se ha creado un nuevo informe "' + REPORT_FILE_NAME + '" en su unidad Google Drive: \n\r' + docReport.getUrl()); 
    SpreadsheetApp.flush(); 
    SpreadsheetApp.getUi().alert('Se ha creado un nuevo informe "' + REPORT_FILE_NAME + '" en su unidad Google Drive \r\n'); 
    } catch(e) { 
    Logger.log("ERROR in function createPdf \r\nMessage: " + e.message + "\r\nFile gs: " + e.fileName + "\r\nLine: " + e.lineNumber) 
    Logger.log("\r\nUser: " + Session.getActiveUser().getEmail() + ", Date: " + Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd'_'HH:mm:ss")); 
    MailApp.sendEmail(EMAIL_DEV, SUBJECT_MAIL, Logger.getLog()); 
    } 
} 
0

不,這是不可能的一個電子表格過濾器是一個特定的「觀點」,不能在應用程序的腳本進行檢索。不過,如果你知道它的參數,可以手動重建過濾器視圖。使用getDataRange()。getValues()將檢索所有數據,然後在此表上應用filter function

相關問題