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

getActiveRange返回错误的范围

伯彦君
2023-03-14

我有一个电子表格,由外部应用程序通过Google Sheets API编辑。然后,我在电子表格中有一个谷歌应用程序脚本函数,它由可安装的更改触发器调用。在开始时,此函数检查changeType是否等于“EDIT”,然后使用getActiveRange()检查编辑范围的最后一列。这很好,但有时返回的范围比实际编辑的范围小。功能代码:

function myOnChange(e) {
  if (e.changeType !== 'EDIT') {
    Logger.log(`Wrong changeType: ${e.changeType}`);
    return;
  }
  var source_sheet = e.source.getActiveSheet();
  var range = source_sheet.getActiveRange();
  if (range.getLastColumn() !== 7) {
    Logger.log(`Wrong last column: ${range.getLastColumn()}`); // 9 line
    Logger.log(`NumColumns: ${range.getNumColumns()}`); // 10 line
    Logger.log(`SpreadsheetApp last column: ${SpreadsheetApp.getActiveRange().getLastColumn()}`); // 11 line
    return;
  }
  // Do some stuff
}

例如,我们有一个空范围A3: G5。在这个范围内插入值后,它会正确填充(包括G列),但是函数中的getActiveRange()返回范围-A3: F5(getLastColzo()getNumClons()返回6(上面的9-11行代码),尽管G列的顺序是7)。

为什么会这样?我在这个电子表格中有大约30张表格,这种情况只发生在其中的少数表格上。可能是工作表上的行数导致了这种情况?

我还发现了类似的问题,但并没有答案:getActiveRange返回的范围比预期的小

更新1:
要再现问题,需要执行以下步骤:

  1. 创建空工作表

更新2:我想我找到了边距。1539行或更少(可以为空)getActiveRange()工作正常。如果工作表中有1540行或更多行,则此函数将返回错误的范围:如果编辑的范围中包含“F”列,则getActiveRange()将返回范围[开始列][开始行]:F[结束行]。因此,例如:
如果编辑的范围是A1:G1,函数将返回A1:F1
如果编辑范围为E2:M5,函数将返回E2:F5
如果编辑范围为F10:L10,函数将返回F10
如果编辑的范围是H3:N9,函数将返回右范围
需要指出的是,此问题仅在API调用后出现,如果手动编辑工作表,它仍然可以正常工作<如果你能复制这个问题,请告诉我,我没有疯。

共有2个答案

胥康安
2023-03-14

我能够复制您的问题,并发现它已在Google问题跟踪器中提交:https://issuetracker.google.com/189920154

在问题编号旁边添加一个星号,表示您也受到影响。

司寇星海
2023-03-14

以防万一,下面是我试图重现问题的代码:

// install the trigger
function createSpreadsheetChangeTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myOnChange').forSpreadsheet(ss).onChange().create();
}  

// main
function myOnChange(e) {
  if (e.changeType !== 'EDIT') return;
 
  var source_sheet = e.source.getActiveSheet();
  var range = source_sheet.getActiveRange();
  var lastColumn = range.getLastColumn();
  
  SpreadsheetApp.getUi().alert(lastColumn);

  // if (range.getLastColumn() !== 7) {  do stuff }

}

它工作正常。

 类似资料:
  • 基类控制器里有error方法,用于api的错误消息返回输出 /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息,若要指定错误码,可以传数组,格式为['code'=>您的错误码,'msg'=>'您的错误消息'] * @param mixed $data 返回的数据 * @par

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?

  • 在我们生产中的一个系统中,我们在jboss 8.2和最新的JDK 7、centos 7 64位、javax.enterprise.context.SessionScoped bean上的最新primeface中遇到了一个非常奇怪的问题。(整个项目中不使用jsf注释,仅使用CDI注释以避免潜在冲突) 在处理一个请求的过程中,@SessionScoped bean在某个时间点(我们不知道是什么触发了它

  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第

  • JSoup-1.8.1 尝试{ Document Document=Jsoup.connect(url.get(); 返回Document.getElementsByTag(“title”).text(); }catch(异常e){ System.out.println(e); 返回null; } org.jsoup.HttpStatusExc0019: HTTP错误获取URL。状态=404, U

  • 问题内容: 在Windows 2003上按计划任务运行的Java应用程序崩溃了,没有日志或任何有助于查明情况的信息。唯一可用的信息是该应用程序返回了代码143(8F)。该错误代码是从计划的任务日志中检索到的。 有谁知道该错误代码(143)代表什么?用户注销是否有可能导致应用程序终止? 谢谢, 问题答案: JVM错误代码143表示内部字段必须有效。这是在OTN讨论论坛上讨论的。但是,结论似乎是扼杀您