当前位置: 首页 > 知识库问答 >
问题:

getValues和GetBackgrounds未在Google应用程序脚本中返回数据

后易安
2023-03-14

我试图创建一个代码,检查一个单元格是否选中(或未选中)复选框,然后将该行相应单元格的数据复制到另一个“摘要”表上。下面没有包含“如果选中,则复制数据”部分。

我遇到的问题是getValues和getBackgound似乎都没有返回数据。

当我运行代码时,记录器显示每个复选框的值都是“false”(即使有些复选框被选中,并且我使用电子表格设置中的数据验证将它们的值设置为1(选中)和0(未选中)。

如果切换到getBackgrounds,记录器会显示每个单元格的背景为白色“#ffffff”,即使单元格为红色。

[[我希望我的代码在每一页、每一行和每一列上都进行迭代。它似乎可以很好地进行迭代,但无法检索数据。]]

我做错了什么?以下是我的完整代码:

function MAPSuccess() {
var app = SpreadsheetApp;
var ss = SpreadsheetApp.openByUrl(
     'https://docs.google.com/spreadsheets/d/1UUdiLsz2OvKdqnr2KB0Tx74gzrGx0m4XUA5oNMUB06k/edit');
var allsheets = ss.getSheets();
  var s = ss.getNumSheets();
  var master = app.getActiveSpreadsheet().getSheetByName("Master");
  var masterLastRow = master.getLastRow();
  

  for (var s = 2; s < allsheets.length; s++) { 
var sheet = app.getActiveSpreadsheet().getActiveSheet();
var r = sheet.getCurrentCell().getRow();    
var lastrow = sheet.getLastRow();
var lastcol = sheet.getLastColumn();
var temail = sheet.getRange(1,2);
var tSJCOE = sheet.getRange(2,2);
var c = sheet.getActiveCell().getColumn();

  for(var r = 4;r<=lastrow;r++){

var name= sheet.getRange(r,1).getValue();
var lname= sheet.getRange(r,2).getValue();
var email= sheet.getRange(r,3).getValue();
var pemail= sheet.getRange(r,4).getValue();
    var info = [
      [name, lname, email, pemail]
      ]
var range = sheet.getRange(r,1,1,lastcol);
var rowValues = range.getValues();
   
var cell = [
  [s,r,c]
  ];
    Logger.log(rowValues);
    Logger.log(name);
//    Logger.log(checkRow);
    Logger.log(cell);

共有1个答案

南门嘉
2023-03-14

看起来您总是在活动工作表上执行操作,而不是访问“所有工作表”中的工作表。

var sheet = app.getActiveSpreadsheet().getActiveSheet();

应该是

var sheet = allsheets[s];

您也可能在下一行误用了“getCurrentCell”,因为这将返回电子表格中当前选定的单元格,无论您访问的是哪一张工作表,其中始终只有一个单元格。

 类似资料:
  • 我有一个相当大的问题。如果我使用for循环和range(r,c.).getValue()读取列单元格(与使用range(r,c,m,1).getValues()读取列单元格相同),则不会读取值。我错了!。我正在读取单元格值,这些值有些是其他表格中的参考值,有些是if、舍入和加减计算值。 正如你可能在图中看到的,我在一些列上有一个固定的测试值(数字2, 3, 4, 5)这些总是读得很好。 在源代码中

  • 我有一个谷歌表单,在a列中,我需要用无替换按钮上的文本。该列在几个不同的行中具有需要保持不变的标题。我写了以下脚本: 当我尝试运行脚本时,会出现以下错误:数据中的行数与范围中的行数不匹配。数据有1,但范围有2。 我知道这与具有比其他行更多列的行有关,但不确定如何修复代码。

  • 我正在开发一个GoogleApps脚本电子表格应用程序,我希望该程序具备的能力之一是根据来自两个不同列的数据自动排序一系列表单响应。所以我想按第16列中的数据排序,然后按第1列排序。我可以使用以下方法手动实现此功能:https://drive.googleblog.com/2010/06/tips-tricks-advanced-sorting-rules-in.html 目前我正在运行函数与第一

  • 我的电子表格由一个主表组成,该主表使用一个表单填充,再加上几个其他表单,供处理通过表单提交的回复的人员使用。脚本根据响应中描述的项目类型,将表单响应委托给这些其他工作表。问题是,当人员A从各自的工作表中删除项目时,它不会在主工作表中删除。我的想法是,当您在Person a的工作表的“Q”行中的相应单元格中键入设置的密码时,它会按时间戳将项目与原始表单提交匹配,并删除Person a工作表中项目的版

  • 我是编程新手,所以请耐心听我说。我正在编写一个脚本,除其他外,在编辑时获取单元格值,然后在其他各种范围内的一系列单元格下划线。给定的单元格上有验证,因此用户只能从下拉框的一系列选项中进行选择。 据我所知,验证函数工作正常,但是当我通过选择一个下拉框选项来编辑指定的单元格时,什么都不会发生。我需要调用函数吗?我已经阅读了api的参考资料,并在stackoverflow和网络上搜索了帮助,但是我被卡住

  • 我有一个工作表,我需要从中获取值并在新工作表中进行设置,其中一个值需要我在索引20,26处对字符串值进行切片。我可以使用.getValue().slice(20,26)和.setValue()实现这一点。但是,在所有行中都设置了相同的数据,这是意料之中的,因为我只获得一个单元格的数据。为了解决这个问题,我尝试了一个for循环,但失败了。 当我尝试.getValues().slice(20,26)时