我正在慢慢地努力理解如何制定一个通用的编程过程,但是我需要一个愿意进一步教我如何钓鱼的人(在这个JS池塘中)。

我想测试一个单元格范围(例如:A1:A10),如果该范围内的某个单元格内有一个“,”,我想在该单元格右侧的5列单元格中编写一个公式。

到目前为止,我已经能够在指定特定单元格时使它工作,但是我不确定如何采用它来处理一系列单元格。

(顺便说一句,这是我了解的在VBA中的操作-尽管没有SPLIT函数-但这种语言显然是一种非常不同的动物)

这是我现在所拥有的:

var defSheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")   
var test1 = defSheet1.getRange("A1").getValue();
var splitCell = '=SPLIT(A1,",")';
if (test1.indexOf(",") !== -1)  
{
defSheet1.getRange("F1").setFormula(splitCell);
}
 else 
  { 
Browser.msgBox("NO SPLIT NECESSARY");   
  } 

(顺便说一句,实际范围将通过使用getDataRange确定,但为简单起见,我在这里使用了预先建立的范围)

我已经在这里学到了很多东西,并且逐渐获得了在JS中“思考”的能力,但是在JS中,VBA的“ 对于x = 1到numLastRow ”的概念并不是我想要的

===============>>#1 票数:0 已采纳

当您处理电子表格中的多行和/或多列时,一项挑战是在索引和表示单元格位置的各种方式之间进行转换。

  • 在A1Notation中,列首先以字母表示,然后以行表示,从1开始。
  • R1C1表示法翻转行和列的顺序,并且两个维都是从1开始的数字。
  • JavaScript中的数组从索引0开始。随着脚本的发展以使用getDataRange().getValues() ,这将很重要。 getValues()返回的二维数组中,首先表示行,然后表示列,如data[row][column] 循环的上限需要相应地进行调整,如果要引用诸如setFormula()类的Range方法,则可能需要+1

下面的代码段将作为您寻找的起点。 我省略了else块以减少噪音。 注意,使用getA1Notation()动态生成SPLIT公式-脚本的直接演变。

您需要自己定义numLastRow ,并且由于脚本始终在访问Range方法,因此10表示单元格A10

var defSheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")

for (var x=1; x<=numLastRow; x++) {
  var srcRange = defSheet1.getRange(x,1);
  var value = srcRange.getValue();  // Get value at Row x, Column 1
  if (value.indexOf(",") !== -1) {
    var splitCell = '=SPLIT(' + srcRange.getA1Notation() + ',",")';
    defSheet1.getRange(x,5).setFormula(splitCell);
  }
}; 

  ask by 5th4x4 translate from so

未解决问题?本站智能推荐:

2回复

Google-apps-script不会在onEdit函数中发送电子邮件[重复]

这个问题已经在这里有了答案: 不允许从自定义函数执行sendEmail(),但在脚本编辑器中可以 1回答 我有一个脚本,可以在编辑电子表格时发送电子邮件。 该脚本运行,但是MailApp语句不起作用。 这是执行日志: [15-01-27 14:15
1回复

触发google-apps-script中的“超出最长执行时间”

我正在尝试运行以下脚本来绕过Google脚本的最长执行时间。 我让该功能运行了4分钟并设置了一个触发器,使其在5分钟内再次运行,从处理中断。 第一次通过它运行平稳并设置触发器。 当触发器第一次运行时,它处理速度非常慢,然后不再运行。 谁能告诉我我做错了什么,如果有办法解决这个问题?
1回复

Google Apps脚本getRange()范围未找到错误

我觉得我正在以错误的方式来解决这个问题。 我试图在这里自动化一些工作量。 我正在清理具有4列(AE),超过2000行的电子表格。 B列包含网站URL,D列包含URL的公司名称,该名称是从另一个来源生成的。 有时,该工具无法正确获取名称或名称丢失,因此它在D列中的缺失条目中填充了“ -
1回复

Google Apps脚本通过范围参数循环

我正在尝试使用Google Apps脚本编辑器,而一个简单的for循环给了我奇怪的结果。 说我有一个电子表格 在脚本编辑器中,我编写了一个函数: 我希望返回的值是9,但是相反,我得到045返回的array.length我得到的是预期的2返回array [0]我得到的是预
2回复

范围输入以在Google Apps脚本中起作用

在我的Google工作表的一个单元格中,我这样调用我的函数: myFunction(A1:A3) ,其中A1 = 5,A2 = 7和A3 =3。我现在想遍历输入(A1,A2和A3 )和(例如)相加。 但是它仅返回A1(5)中的值,因为input.length返回1。如果我删除parseI
2回复

Google Spreadsheet:如何使用Google Apps脚本命名范围

我正在使用以下代码命名范围: 执行此脚本时,它失败并显示错误消息: The name you specified for this range is not a valid name. 每当我使用串联字符串时,都会出现此错误(是否使用'或"分隔字符串都没有关系)。 如何通过连
3回复

Google应用脚本可停止特定日期范围内的触发器

我有一个脚本可以阻止触发器在特定时间运行,这要归功于Amit Agarwal帮助我完成这个线程 脚本是这样的: 此代码可以防止我的触发器从周五下午5点到周六晚上10点运行,并且它工作得很好。 现在我需要的是添加另一个else if以防止触发器在特定的范围日期运行,例如:
3回复

如何在一个Google表格电子表格中的多个列范围上运行隐藏/显示列脚本?

我没有用javascript编写程序,但是我设法在网上找到了下面的脚本,该脚本使我可以隐藏一个范围的列。 问题是我需要能够对一张纸中的多个列范围重复此操作。 因此,我可以使用一个按钮隐藏/显示C-AG列,并使用另一个按钮分别隐藏/显示AI-BJ列(并执行数月)。 这是用于具有大量数据的约会
2回复

如何在Google Apps脚本中获取范围然后设置值

我试图在编辑时运行一个函数,该函数将在一系列单元格中查找值“ c”,然后将其替换为“ Closed”一词。 这是我到目前为止的内容: 因此,当我具有给定范围内的值时,这将成功记录“是”和值“ c”。 但是,现在如何替换该值? 我尝试使用getRange()存储数据范围[i]
1回复

在Google Apps脚本中返回“范围”而不是实际字符串

我正在使用以下函数在Google表格中返回串联的字符串。 在这种情况下,B4等于“心脏病”,B1等于“ 82-01”。 预期的结果是dimension2=~cardiology;ga:eventCategory=~MS82-01 。 但是,我得到的结果是dimension2=~Ra