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

获取范围内的x单元格google sheets应用程序脚本

洪和平
2023-03-14

使用谷歌表格应用程序脚本,是否有可能得到X单元格的单元格范围如下所示:


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

var cells = sheet.getRange("D6:BF100"); // the range

for (var x = 0; x < 100; i++) {
var cell = cells[row][x]; // this is the line that doesn't work

if (someCondition(x)) {
      cell.setBackground("red");
}
}

我不想更改每个单元格的颜色,只想更改那些具有正确条件的单元格。

我知道这样做是可能的:

js prettyprint-override">var cell = sheet.getRange(row+i);

但是这种方法需要很长时间才能完成for循环,因为有数百个单元需要扫描。我宁愿只对整个范围使用一次getRange(而不是一次只使用一个单元格),然后从该范围使用getRange(它应该生成一个2d数组,对吗?)设置单元格值。我想那会快得多。

是否有其他方法可以更快地完成此操作,或者我只需要这样做:var cell=cells[row][x] 另一种方式。

谢谢


共有2个答案

夏侯浩气
2023-03-14

这只是我自己的答案,以帮助可能会遇到这个问题的用户。

一旦你有了一系列的单元格,像这样:

var范围=工作表。getRange(“您的范围”)

您可以执行此操作以获取特定单元格:

var cell=range.getcell;

葛越泽
2023-03-14

看起来您的for循环构造不正确。增加未在任何地方定义或使用的变量i。此外,使用变量行时不定义它。

它需要很长时间,因为每次调用cells.getRange()时,它都要查询工作表。相反,您可以使用cells.getVales()查询一次以获取整个范围,然后更改满足条件的单元格颜色一次一个。

尝试以下方法;

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

var cells_range = sheet.getRange("D6:BF100");
var cells_values = cells_range.getValues();

for (var col = 1; col <= cells_values[0].length; col++) {
  for (var row = 1; row <= cells_values.length; row++) {
    if (someCondition(cells_values[row][col])) {
      cells_range.getCell(row, col).setBackground("red");
    }
  }
}
 类似资料:
  • 我来自VB背景,在实现工作表的脚本解决方案时遇到了一些困难,我想这个函数相当基本,但还不确定如何在JS中表达它。目标是循环遍历一个范围内的每个单元格(工作表1,Q3: Q1000),获取该范围内单元格具有值“TRUE”的行号,复制/剪切工作表1上符合该限定条件的每行的全部内容(或者简单地存储这些值并跳过复制/粘贴步骤),将这些值粘贴到单独工作表(Sheet2)上的第一个未使用的行,然后删除Shee

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

  • 我需要检测对电子表格所做的更改是否在特定数据范围内进行,如果是,请设置当前更新时间 问题是,我有一个可以编辑标题和文本的电子表格,我不希望在电子表格上更新特定单元格中的更新时间,但当我编辑一系列单元格中的数据时,我确实希望更改更新时间。 以下是我必须更新的时间。 如果我编辑某些单元格(在B4: J6范围内),我只希望G10中的日期设置

  • 问题内容: 假设我有一张Java地图,看起来像这样: 如果键按排序顺序(使用树图或链接哈希图)。现在,如果我尝试获取> = 39和<41的值。那么我应该获取字符串“ 39至41”。如何有效地执行此操作? 问题答案: 看起来您想要的不止一个; 你想要一个!具体来说,您可以使用该操作。 这是一个例子: 需要注意的是也有,,和也,而不是操作以及它返回而不只是。

  • 我编写了一个会话范围的托管bean,用于在domino xpages应用程序中缓存sesion用户特定的信息,如下代码所示: 然后,我在faces配置中声明了它,使其成为会话范围的bean: 在测试bean时,我通过#{NBUser.fullUserName}使用它,它并不总是返回当前domino http会话上下文的用户,例如,我首先由用户“user1”登录并注销,然后由user2登录,bean