Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script GoogleSheets:如何在检测到的新行上自动将单词插入单元格?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script GoogleSheets:如何在检测到的新行上自动将单词插入单元格?

Google apps script GoogleSheets:如何在检测到的新行上自动将单词插入单元格?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我到处找,但找不到答案(我肯定我解释得不对) 我有一个谷歌工作表,它有多个标签,分别是TabA、TabB和TabC 在这个Google工作表上,我在Slack上提交了一个斜杠命令,然后使用apps脚本自动填充其中一个选项卡上的一行 我想做的只是在每次检测到新行时,在特定的单元格中插入一个名为TabA的单词。并在TabB表等上创建新行时插入一个名为TabB的单词 我确信我只是把问题打错了,这就是我找不到答案的原因 实际上我不确定代码的哪一部分会发布到工作表中,我想是这样的吗 if(sheetN

我到处找,但找不到答案(我肯定我解释得不对)

我有一个谷歌工作表,它有多个标签,分别是TabA、TabB和TabC

在这个Google工作表上,我在Slack上提交了一个斜杠命令,然后使用apps脚本自动填充其中一个选项卡上的一行

我想做的只是在每次检测到新行时,在特定的单元格中插入一个名为TabA的单词。并在TabB表等上创建新行时插入一个名为TabB的单词

我确信我只是把问题打错了,这就是我找不到答案的原因

实际上我不确定代码的哪一部分会发布到工作表中,我想是这样的吗

  if(sheetName) {
    sheetName = sheetName.charAt(0).toUpperCase() + sheetName.slice(1)
  } else {
    sheetName = "Current"
  }

  // Find sheet
  var sheetFlag = false;
  for (var r = 1; r < settings.length; r++) {
    if (settings[r][1] == channelID) {
      var sheetID = settings[r][2];
      var targetChannelID = settings[r][4];
      var title = settings[r][0];
      sheetFlag = true;
      break;
    }
  }

  if (sheetFlag) {
    var sheet = SpreadsheetApp.openById(sheetID).getSheetByName(sheetName);
    if(!sheet) {
      sheet = SpreadsheetApp.openById(sheetID).insertSheet(sheetName);
    }

    var lastRow = sheet.getLastRow();

    var slackDetails = ["", "", text1, "","","","","",realName, new Date(),title,text2];

    // paste the slack details to the sheet
    sheet.getRange(lastRow + 1,1,1,slackDetails.length).setValues([slackDetails]);```
Thank you in advance
if(图纸名称){
sheetName=sheetName.charAt(0.toUpperCase()+sheetName.slice(1)
}否则{
sheetName=“当前”
}
//查找表
var sheetFlag=false;
对于(var r=1;r
如果我理解正确,您希望:

  • 跟踪添加到电子表格每个工作表中的新行(
    TabA
    TabB
    TabC
  • 每次检测到新闻行时,在每张工作表D列的连续行中写入工作表的名称
如评论中所述,应用程序脚本没有跟踪脚本对电子表格所做更改的触发器。例如,触发器“在用户更改电子表格中任何单元格的值时自动运行”

解决方法(基于时间的触发器和脚本属性): 此限制的一个可能解决方法是使用基于时间的触发器,该触发器将定期触发函数。您可以创建此触发器,或者通过运行此函数一次:

函数createTrigger(){
ScriptApp.newTrigger(“轨迹行”)
.基于时间的()
.每分钟(1)
.create();
}
这将每分钟启动函数
trackRows
。此函数的目的是跟踪自上次启动以来(在本例中为1分钟前)对每个工作表行所做的更改,并将工作表名称写入某个单元格,前提是该工作表的内容行数比上次执行时多

要实现这一点,您可以使用,它允许您存储键值对,并在以后的执行中使用它们

函数
trackRows
可以是以下内容:

函数trackRows(){
var props=PropertiesService.getScriptProperties();
var ss=SpreadsheetApp.openById(“您的电子表格id”);//请相应更改
var sheets=ss.getSheets();
表.forEach(功能(表){
var sheetName=sheet.getName();
var currentRows=sheet.getLastRow();
var oldRows=props.getProperty(sheetName);
如果(当前行>旧行){
var firstRow=2;
var列=4;
var numRows=sheet.getLastRow()-firstRow+1;
var rowIndex=sheet.getRange(第一行,第列,numRows).getValues().filter(函数(值){
返回值[0]!==“”;
}).长度;
var cell=sheet.getRange(行索引+第一行,列);
cell.setValue(sheetName);
}
props.setProperty(sheetName,currentRows);
});
}
此函数执行以下操作:

  • 检索以前执行中存储的脚本属性
  • 获取电子表格中的所有表格
  • 检查每个工作表中包含内容的最后一行(via),并将该值与以前存储在脚本属性中的值进行比较
  • 如果当前最后一行高于存储在“属性”中的行,请在相应的(从D2开始)D列的第一个空行中写入图纸名称
  • 将当前最后一行存储在脚本属性中
笔记:
  • 如果脚本检测到添加了新行,它会将工作表名称添加到D列的第一个空行中一次。它没有考虑自上次执行以来添加了多少行,它只考虑是否添加了行。不过,如果这是您想要的,它可以很容易地进行更改。
  • 如果要从“新鲜”开始,删除所有以前存储的属性将非常有用。为此,可以运行此函数一次:
函数deleteProps(){
var props=PropertiesService.getScriptProperties();
props.deleteAllProperties();
}
参考:

您能提供当前脚本吗?当然,请删除您的个人信息。没有检测脚本添加的行的触发器。它只检测用户更改。正如Cooper所说,没有跟踪脚本所做更改的触发器。是否会使用每分钟运行的基于时间的触发器检查是否有更改be一个有效的解决方法?谢谢你的回复。如果我每分钟都运行一次触发器,我会达到速率限制吗?我可以将它设置为每小时运行一次,甚至每天运行一次,如果你有解决方法,这就不会成为问题了?@Vestipial
在特定单元格中插入一个名为TabA的单词
你在谈论哪个单元格?它总是s吗ame one,在这个意义上,它每t被覆盖一次