是否可以知道Google Spreadsheet中的过滤器的结果? [英] is it possible to know the rows result of a filter in a Google Spreadsheet?

查看:102
本文介绍了是否可以知道Google Spreadsheet中的过滤器的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道Google应用脚本中的过滤器行结果,但我没有取得它们,我总是获取选择的所有行或表单。我已经调查过,似乎这个API不可能。你知道这是真的还是以另一种方式获得这些行? Thx

 函数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);如果(!isEmpty(activeRow [row],numberOfColumns)){
var image = UrlFetchApp。

for(var row = 1; row< numberOfRows; row ++)取(IMG_BBVA);
/ * var paragraph = bodyReport.appendParagraph();
paragraph.addPositionedImage(image).setHeight(100).setWidth(98);
paragraph.appendText(\r\\\
);
paragraph.setAttributes(styleTitle); * /

//bodyReport.appendImage(image).setHeight(100).setWidth(98); //布里斯托尔图像de cabecera

bodyReport.appendParagraph()。addPositionedImage(image).setHeight(100).setWidth(98).setLayout(DocumentApp.PositionedLayout.WRAP_TEXT);
bodyReport.appendParagraph(SERVICIOSJURÍDICOS)。setAttributes(styleTextBlue);
bodyReport.appendParagraph(DATE_REPORT +\r\\\
\r\\\
)。setAttributes(styleDate); (var col = 1; col< numberOfColumns; col ++){// Ignoramos la columna 1 que es el contador
if(activeRow [row] [col]!=)的

){//如果(activeRow [0] [col] ==NORMA)
odyReport.appendParagraph(String(activeRow [row] [col]))。 。修剪())setAttributes(styleTextNorma); //布防内容contenido
else {
bodyReport.appendParagraph(activeRow [0] [col] +:)。setAttributes(styleTitle); //布衣类título
bodyReport.appendParagraph(String(activeRow [row] [col])。trim())。setAttributes(styleText); //布告内容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:\\\
\r'+ docReport.getUrl());
SpreadsheetApp.flush();
SpreadsheetApp.getUi()。alert('Se ha creado un nuevo informe'''+ REPORT_FILE_NAME +'en su unidad Google Drive \r\\\
');
catch(e){
Logger.log(ERROR in function createPdf \r\\\
Message:+ e.message +\r\\\
File gs:+ e.fileName +\r\\\
Line:+ e.lineNumber)
Logger.log(\r\\\
User:+ Session.getActiveUser()。getEmail()+,Date:+ Utilities .formatDate(new Date(),GMT + 1,yyyyMMdd'_'HH:mm:ss));
MailApp.sendEmail(EMAIL_DEV,SUBJECT_MAIL,Logger.getLog());



$ div $解析方案

我已经能够实现我的目标,但这不是一个通常的解决方案,但它的工作原理。在处理工作表之前,我选择所有行并放入背景颜色,Google Spreadsheet仅将背景颜色设置为过滤后的行。然后,我处理所有工作表,但我知道已过滤的行,因为我询问了它的背景。我希望这个解决方案适合你,并对你有用。

 函数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();

//设置洛杉矶fondos aotro颜色参考文献laslíneasa laslíneasque tienen filtro
activeSheet.setActiveSelection(2:+ activeSheet.getLastRow())。setBackground(# fffff9\" );

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

(var row = 2; row< = numberOfRows; row ++){// Empieza en 2 ya que no incluyo la fila de lostítulos
rowRange = activeSheet.getRange(row, 1,1,numberOfColumns);
if(rowRange.getBackground()==#fffff9){//如果它有#fffff9背景,表示它是一个过滤行
activeSheet.setActiveSelection(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\\\
\r\\\
)。setAttributes(styleDate); (var col = 1; col< numberOfColumns; col ++){// Ignoramos la columna 1 que es el contador
if(activeRow [0] [col]!=)的

){//如果不是,则返回true;否则返回false;}如果(col == COLUMN_NORMA)
odyReport.appendParagraph(String(activeRow [0] [col])。trim())。setAttributes(styleTextNorma ); //布告内容contenido
else {
bodyReport.appendParagraph(titleRow [0] [col])。setAttributes(styleTitle); //布景点título
bodyReport.appendParagraph(String(activeRow [0] [col])。trim())。setAttributes(styleText); //布告内容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:\\\
\r'+ docReport.getUrl());
SpreadsheetApp.flush();
SpreadsheetApp.getUi()。alert('Se ha creado un nuevo informe'''+ REPORT_FILE_NAME +'en su unidad Google Drive \r\\\
');
catch(e){
Logger.log(ERROR in function createPdf \r\\\
Message:+ e.message +\r\\\
File gs:+ e.fileName +\r\\\
Line:+ e.lineNumber)
Logger.log(\r\\\
User:+ Session.getActiveUser()。getEmail()+,Date:+ Utilities .formatDate(new Date(),GMT + 1,yyyyMMdd'_'HH:mm:ss));
MailApp.sendEmail(EMAIL_DEV,SUBJECT_MAIL,Logger.getLog());
}
}


I want to know the rows result of a filter in Google App Script but I dont achieve obtain them, I always obtain all the rows of the selection or the sheet. I've investigated and it seems that it is impossible with this API. Do you know if it is true or if exist another way to obtain these rows?. 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());   
  } 
}

解决方案

Finally I've be able achieve my goal but it is not an usual solution, but it works. Before process the sheet I select all the rows and I put background color, Google Spreadsheet only set the background color to the filtered rows. Then, I process all the sheet but I know the rows filtered because I ask about its background. I hope this solution likes and be useful for you. Thanks.

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

这篇关于是否可以知道Google Spreadsheet中的过滤器的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆