Google apps script 有可能知道谷歌电子表格中过滤器的结果吗?

Google apps script 有可能知道谷歌电子表格中过滤器的结果吗?,google-apps-script,google-spreadsheet-api,Google Apps Script,Google Spreadsheet Api,我想知道Google应用程序脚本中过滤器的行结果,但我无法获取它们,我总是获取选择或工作表的所有行。我已经调查过了,似乎用这个API是不可能的。您知道这是真的还是存在另一种获取这些行的方法吗?。Thx function docReport() { try { splashScreen("Generando informe..."); var activeSheet = SpreadsheetApp.getActiveSheet(); var numbe

我想知道Google应用程序脚本中过滤器的行结果,但我无法获取它们,我总是获取选择或工作表的所有行。我已经调查过了,似乎用这个API是不可能的。您知道这是真的还是存在另一种获取这些行的方法吗?。Thx

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());   
  } 
}
函数docReport(){
试一试{
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(报告文件名);
var bodyReport=docReport.getBody();
bodyReport.setAttributes(样式页);
对于(变量行=1;行
不可能,电子表格过滤器是无法在应用程序脚本中检索的特定“视图”。但是,如果您知道过滤器视图的参数,则可以手动重新生成过滤器视图。使用一个getDataRange().getValues()来检索所有数据,然后在此表上应用一个函数。

最后,我能够实现我的目标,但这不是一个常见的解决方案,但它是有效的。在处理工作表之前,我选择了所有的行,并设置了背景色,谷歌电子表格只设置了过滤行的背景色。然后,我处理所有的工作表,但我知道过滤的行,因为我询问了它的背景。我希望这个解决方案对您有用。谢谢

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());   
  } 
}
函数docReport(){
试一试{
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();
//设置一辆奥特罗彩色轿车和一辆自行车
activeSheet.setActiveSelection(“2:+activeSheet.getLastRow()).setBackground(#fffff 9”);
var docReport=DocumentApp.create(报告文件名);
var bodyReport=docReport.getBody();
bodyReport.setAttributes(样式页);

对于(var row=2;row,Google上发布了一个解决方案:

您可以使用新的Google Sheets advanced服务获取过滤后的数据 行,清除所有筛选器,…有关详细信息,请参阅此博客文章:

对于(var i=0;i 如果(sheets[i].properties.sheetId==sheetId){
var数据=表[i]。数据;
变量行=数据[0]。行元数据;
对于(var j=0;j if(rows[j].hiddenByFilter)hiddenRows.push(j);
}
}
}
返回隐藏行;
}


请输入代码片段。完成@CedricDruck,谢谢