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

无法忽略google工作表中的公式列

彭鸿文
2023-03-14

更新到谷歌表/java脚本...在下面的函数中,它正确地从源表中抓取数据,并在目的地的下一个可用单元格中正确地输入数据。但是,我在整个工作表的F列单元格中有一个公式。当getLastRow完成它的工作时,数据会被粘贴到工作表的下面。我需要在下面的函数中更改什么来忽略检查中的列F?

function CopyTime() {
  var sourceSheet = "Data";
  var sourceCell = "E61";
  var destinationSheet = "Log";
  var destinationCell = "E6";
  var ss = SpreadsheetApp.getActive();
  var sourceValue = ss.getSheetByName(sourceSheet).getRange(sourceCell).getValue();
  var destSheet = ss.getSheetByName(destinationSheet);
  var destRange = destSheet.getRange(destinationCell);
  var destRow = destRange.getRow();
  var destCol = destRange.getColumn();
  var destValues = destSheet.getRange(destRow, destCol, Math.max(1, destSheet.getLastRow() - destRow + 1)).getValues();
  for (var i = destValues.length - 1; i >= 0; i--) {
    if (destValues[i]) break;
  }
  if (destValues[i] != "") i = i + 1;
  destSheet.getRange(destRow + i, destCol).setValue(sourceValue);
}

共有1个答案

束作人
2023-03-14

如果我理解正确的话,您正在尝试用列E中的值标识最后一行,以便可以在其后输入值。

for (var i = destValues.length - 1; i >= 0; i--) {
    if (destValues[i]) break;
}

具体来说,问题在于条件if(destValues[i])

如您所知,当您从工作表中获取值时,将得到一个二维数组。在这个函数中,您只得到列E,但它仍然返回一个2D数组:

[
    [ 'Content' ],
    [ '' ],
    [ '' ],
    [ '' ],
    [ '' ],
    [ '' ],
    [ '' ],
    [ '' ],
    [ '' ],
]

您的方法是向后循环此数组,以获取包含内容的单元格的索引号。

当你写下你的条件时,我相信你假设了以下几点:

  1. 如果['']==falsetrue
  2. 然后,if(['')break将计算为false,该值不会break

但是,如果单独使用布尔函数模拟if(['']),这似乎是合理的:

Boolean([ '' ]) // this produces true!

因此,您的脚本将测试最后一行并break,这就是它被放入最后一行的原因。(我真的不明白这个公式与此有什么关系)。

诚然,从这种背景来看,这种平等是出人意料的。如果你经常想测试一个数组是否是空的,这是有意义的。代码> [代码] >代码>作为一个元素的数组,因此有一些逻辑将其视为代码> true,但也可以被认为是逻辑的来考虑它<代码> false <代码>。

不幸的是,这就是JavaScript有很多这些意想不到的布尔转换问题的原因,所以我的建议是,在使用JavaScript开发时,仔细检查您关于什么等于什么的假设!

(试试谷歌的“Javascript平等模因”)

// ...

console.log("searching for non empty cell")
for (var i=destValues.length-1;i>=0;--i) {
  if (destValues[i][0] != "") {
    console.log("found non empty row!")
    break
  };
}

// ...
  • 布尔值
 类似资料:
  • 我使用脚本将数据从MySQL数据库导入到工作表中。在导入过程中,其他具有重公式的工作表(vlookup、sumifs、filter)会不断重新计算,因此需要花费很长时间。我想在MySQL数据完全导入后,通过脚本插入公式。 为了简化此过程,我想将工作表上的所有公式(这是一个很长的工作表)提取到一个文件中,并将提取的数据格式化为以下方式:示例:从工作表“摘要”中提取数据: 循环检查工作表中的每个单元格

  • 问题内容: 如何通过JSON访问(新式)Google工作表的内容?我的目标是从JavaScript访问值,因此我需要能够通过HTTP下载JSON。 示例:如何以JSON 格式下载此工作表中的数据? 我试图通过网络搜索找到答案,但最终失败了: 网络上的许多教程都是从在URL中查找值的指令开始的。导出工作表时获得的URL是,其中没有URL 。 “访问公开的Google表格”的答案似乎表明我应该尝试获取

  • 是否有任何方法,使用脚本或其他方式,来评估谷歌电子表格中的连接公式? 我为Google Finance函数创建了一个连接公式,用于获取每日汇率。这是因为我的日期和货币不断变化;而不是“usdeur”,我有时对获取“usdinr”或“euraud”感兴趣。通过使用连接和一些基本脚本,我能够将下面的公式作为文本粘贴到单元格中。所需的只是执行以下字符串的方法。 据我所知,工作表不像Excel那样具有“E

  • 有没有一种方法可以加速在同一个谷歌工作表的多个选项卡上编辑数百行公式? 这是一个后续问题:Google Sheets中的引用随着新表单的提交而改变;这大约是每次Google Sheets中由Google窗体的新提交添加新行时,一些公式即使用(仍然不知道为什么会这样)。解决方法是在公式中添加。然而,公式太多,无法舒适地手动更改。 例如,我有如下公式: 它需要改为: 搜索和替换不起作用,因为公式的编写

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/安全检查/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/成本优化/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。