首页 > 解决方案 > 循环通过过滤器并发送带有 PDF 的电子邮件的 Google Apps 脚本?

问题描述

我有一份问卷(20K 行)的数据,我需要与我们商店(400 家商店)的商店经理(报告)分享。我设法编写了一个脚本,将pdf我的工作表发送到电子邮件地址列表。但我坚持为过滤器编写循环,因为我无法让setVisibleValues(values)函数为FilterCriteriaBuilder. 该setHiddenValues(values)函数有效,但我不知道如何将它与循环结合起来。

我的 Google 表格样本

请参阅下面的我当前的代码:

/**
 * Filtersheet by location
 */
function FilterSheet() {
  var spreadsheet = SpreadsheetApp.getActive().getSheetByName('Data')
  spreadsheet.getRange('F1').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .setHiddenValues(['Amsterdam, Rotterdam'])
  .build();
  spreadsheet.getFilter().setColumnFilterCriteria(6, criteria);
};

/**

 * Send pdf of currentspreadsheet
 */
function SendPdf() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var spreadsheet = SpreadsheetApp.getActive().getSheetByName('Adres');
  var blob = DriveApp.getFileById(ss.getId()).getAs("application/pdf");
  blob.setName(ss.getName() + ".pdf");

  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = spreadsheet.getRange(startRow, 1, numRows, 2);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = 'I hearby send you the overview of your data'
    var subject = 'Overview of data';
    MailApp.sendEmail(emailAddress, subject, message,{
      attachments:[blob]});
  }
 }

标签: for-loopgoogle-apps-scriptgoogle-sheetsfilter

解决方案


getValues()返回所有范围单元格的值,无论它们是显示还是隐藏。

使用循环和isRowHiddenByFilter(rowPosition)来获取所有过滤后的值。您可以使用Array.prototype.push将值添加到新数组或用于Array.prototype.splice修改数组,保留返回的值getValues()

有关的


推荐阅读