如何从谷歌表格的应用程序脚本中的过滤行中提取单个数组值

2023-12-05

我正在尝试从在应用程序脚本中过滤的 Google Sheets 行中提取单个数组值。我已根据列中空单元格的条件成功过滤数据/行。但现在,我不断收到以下错误: TypeError: Cannot read property '0' of undefined at selectRecords(SendNotifications:21:22)

请注意,我想同时访问所有已过滤的行。例如,如果我有第 1 行和第 2 行,并且如果我想要这两行中的所有 5 列,那么我的结果应该是:

[行:3][第 1 列][第 2 列][第 3 列][第 4 列][第 5 列]

[行:7][第 1 列][第 2 列][第 3 列][第 4 列][第 5 列]

[行:8][第 1 列][第 2 列][第 3 列][第 4 列][第 5 列]

谢谢。

/* Global Prameters */
var ssss = SpreadsheetApp.getActiveSheet();
var rows = ssss.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();  
var columnToCheck = ssss.getRange("J:J").getValues();
var columnToCheck2 = ssss.getDataRange().getValues();
var lastData = getLastRowSpecial(columnToCheck2);
var lastRow = getLastRowSpecial(columnToCheck);

function selectRecords() {    
var dataRange = ssss.getRange(3,1, lastRow, ssss.getLastColumn()); // This 
 // range is to select column 9
var headerRowNumber = 3;
var dataValues = dataRange.getValues();

for (var i=2; i < lastData; i++){
  var row =dataValues[i];
  var headerRowNumber = 2;  
  var mydata1 = dataValues.filter(row => row[9] == ""); // This returns 
   // all row contents where column 9 is empty.
  var getData = row[0] + "\n" + row[1] + "\n" + row[2] + "\n" + row[3] + 
                "\n" + row[4] + "\n" + row[5];  // <<<< This is where 
                                                        error generates.
var email = row[13];
var test = row[9];
var message = getData; // Second column
var subject = 'Sending emails from a Spreadsheet';
MailApp.sendEmail(emailAddress, subject, message);
} Logger.log(getData);
}   

function getLastRowSpecial(range){ // Function to limit getDataRange() or 
                   // get data without looping through the entire sheet
var rowNum = 0;
var blank = false;
for(var row = 0; row < range.length; row++){
  if(range[row][0] === "" && !blank){
    rowNum = row;
    blank = true;
  }else if(range[row][0] !== ""){
    blank = false;
  };
};
return rowNum;
};

问题/解决方案:

  • Counter i从 2 开始,比如说最后一行,因此,lastData is 5. dataValues是一个从 3 开始到 5 结束的二维数组 => 3 行数据,索引分别为 0、1 和 2。但是i从 2 开始,到 5 结束。i击中 3,var row =dataValues[i];> dataValues[3]undefined. row is undefined and undefined不是一个数组。那么你

无法读取未定义的属性“0”

  • 数组过滤器过滤不到位。相反,它返回过滤后的数组。使用过滤后的数组。

  • getDataRange()仅返回最后一行的数据,而不返回整个工作表。所以一般情况下不需要getLastRowSpecial

示例脚本:

function selectRecords() {
  const ss = SpreadsheetApp.getActiveSheet();
  const dataRange = ss.getDataRange();
  const headers = 2;
  const dataValues = dataRange
    .offset(headers, 0, dataRange.getNumRows() - headers)//offsetting the headers from the whole range
    .getValues();

  dataValues
    .filter(row => row[9] == '') //filtered data where row[9] is empty
    .forEach(row => {
      //forEach filtered row do>
      let message =
        row[0] +
        '\n' +
        row[1] +
        '\n' +
        row[2] +
        '\n' +
        row[3] +
        '\n' +
        row[4] +
        '\n' +
        row[5]; 
      let email = row[13];
      let subject = 'Sending emails from a Spreadsheet';
      MailApp.sendEmail(email, subject, message);
      Logger.log(`${subject}: ${message} sent to ${email}`);
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从谷歌表格的应用程序脚本中的过滤行中提取单个数组值 的相关文章

随机推荐

  • 当用户到达页面底部时隐藏 div

    我想在用户滚动并到达页面底部时隐藏 div 元素 并在用户向上滚动时再次显示它 例如 考虑以下名为 nav 的导航栏 HTML div class nav div CSS nav width 100 height 50px position
  • 谷歌地图 android api v2 应用程序崩溃

    我正在使用 Eclipse helios 和 Android 4 1 2 我已遵循以下文档https docs google com document pub id 19nQzvKP CVLd7 VrpwnHfl AE9fjbJySowON
  • 样式表或 JavaScript 文件的 Rails 404 错误

    Rails 无法在生产中加载 404 错误 CSS 和 JS 文件 但在开发中加载它们没有问题 我使用 Capistrano 进行部署并运行 Rails 3 我的开发路径是 www myapp但我的生产之路是 www myapp 当前 应用
  • 使用 VSTS Rest API 设置 git repo 权限

    有没有办法使用 VSTS Rest API 设置 git 存储库的权限 我有一个创建存储库的脚本 我想扩展它以设置一些默认权限 授予项目集合构建服务贡献权限 我读了图形用户界面文档并浏览了其余 API 文档但看不到我可以通过 API 设置存
  • 为多个系列创建折线图

    我的工作表中有如下数据 Day Area AVG Time 2013 07 01 LINE1 49 703432 2013 07 02 LINE1 38 119913 2013 07 03 LINE1 30 6651 2013 07 04
  • 临时解压缩文件以在浏览器中查看内容

    我想解压一个包含 html 页面 css 和 js 目录的文件 我想暂时解压缩它并在 iFrame 中查看 html 最好是这样 我正在使用 jszip 它正在工作 我已经加载了 html 但如何将图像 js 和 css 文件夹添加到 iF
  • 两个数组之间的余弦距离计算 - Python [重复]

    这个问题在这里已经有答案了 我想应用一个函数fn 这本质上是cosine distance对两个形状为 10000 100 和 5000 100 的大型 numpy 数组按行进行计算 即我为这些数组中的每个行组合计算一个值 我的实现 imp
  • 移动图中的多个盒子?

    我已经拥有在 MATLAB 中拖放图形中的单个框所需的函数 我编写的代码在图中填充了几个方框 通过另一个循环 我用更多的框填充了图形 其中以字符串形式保存不同的信息 这两组框通过我在其 UserData 中放置的数字相关 对应的数字 对于每
  • 当输入获得焦点时动画父 div

    我正在尝试做到这一点 以便当有人单击输入框时它会升到屏幕顶部 我能够完成这项工作 但我无法让父 div 中的其他内容随之移动 这是我所拥有的 container input search bar focus position absolut
  • Android Facebook 开放图谱?

    我很好奇是否可以获得 Open Graph 方面的帮助 因为我似乎无法从我读过的 Facebook API 中获得任何意义 现在我已经在 Facebook 上设置了我的 Open Graph 应用程序 已获批准 我正在尝试通过捆绑参数提交我
  • 调暗非活动形式

    使用 Form ShowDialog 打开对话框表单时 我想用灰色阴影调暗应用程序的其余部分 从我自己的研究来看 这样做的方法似乎是打开一个黑色背景且不透明度小于 100 的无边框表单 但我还没有将所有部分放在一起 了解它是如何工作的 或者
  • 如何在流(java)中添加日期时间值?

    今天我开始学习 Java 8 所以我对 Java 8 及其相关的东西还很陌生 我有一份活动清单 活动有名称 开始时间 结束时间 对于 startTime 和 endTime 我使用 joda 时间中的 DateTime 我正在尝试确定映射形
  • Swift:设置 rootViewController 不起作用?

    我正在尝试启动一个新的 Swift 项目 这是我第一次尝试以编程方式创建视图 然而 我的控制器看起来根本没有被加载 我所看到的只是启动屏幕 然后当我将其加载到模拟器上时出现黑屏 这是我的 AppDelegate import UIKit U
  • 带有 TypeScript 错误的 Angular HTTP GET http.get(...).map 不是 [null] 中的函数

    我在 Angular 中遇到 HTTP 问题 我只想GET a JSON列出并在视图中显示它 服务等级 import Injectable from angular2 core import Hall from hall import Ht
  • ReactJS 中的页面转换和组件动画

    我想要的效果 当页面加载组件 A B 和 C 时独立启动动画 用户单击组件 B 内的链接 组件 A B 和 C 独立启动 加载新页面 更多组件呈现动画 这听起来很简单 但我正在努力实现它 到目前为止 我已经使用了许多路线设置react ro
  • C++11 获取 unordered_map 中一个存储桶的所有项目

    we know std unordered map bucketreturn 桶是容器内部哈希表中的一个槽 元素根据其键的哈希值分配到其中 如何在返回桶中获取开始迭代器和结束迭代器 换句话说 我可以使用bucket count要获取桶的数量
  • 如何使用Ant任务启动和停止jboss服务器?

    我需要停止 部署我的ear 文件并使用Ant 任务启动Jboss 服务器 我能够使用 Ant 任务成功地编译 构建 J2EE 应用程序并将其作为 Ear 文件部署到 JBoss 服务器中 我们可以在 jboss 控制台中看到我的应用程序的重
  • 雅虎在从 smtpclient .net 发送时禁用链接

    我正在构建一个发送电子邮件的网络应用程序SmtpClient在 net中 应用程序工作正常 电子邮件成功发送到gmail帐户和hotmail帐户 但是当我向雅虎帐户发送电子邮件时 它已成功发送 但我在邮件中放入的链接被雅虎禁用 雅虎以某种方
  • 如何更改 Google 地图标记的颜色? [复制]

    这个问题在这里已经有答案了 我正在使用 Google 地图 API 构建一张充满标记的地图 但我希望一个标记能够从其他标记中脱颖而出 我认为最简单的方法是将标记的颜色更改为蓝色 而不是红色 这是一件简单的事情还是我必须以某种方式创建一个全新
  • 如何从谷歌表格的应用程序脚本中的过滤行中提取单个数组值

    我正在尝试从在应用程序脚本中过滤的 Google Sheets 行中提取单个数组值 我已根据列中空单元格的条件成功过滤数据 行 但现在 我不断收到以下错误 TypeError Cannot read property 0 of undefi