Google apps script GoogleSheets:如何在检测到的新行上自动将单词插入单元格?
我到处找,但找不到答案(我肯定我解释得不对) 我有一个谷歌工作表,它有多个标签,分别是TabA、TabB和TabC 在这个Google工作表上,我在Slack上提交了一个斜杠命令,然后使用apps脚本自动填充其中一个选项卡上的一行 我想做的只是在每次检测到新行时,在特定的单元格中插入一个名为TabA的单词。并在TabB表等上创建新行时插入一个名为TabB的单词 我确信我只是把问题打错了,这就是我找不到答案的原因 实际上我不确定代码的哪一部分会发布到工作表中,我想是这样的吗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
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();
}
参考:
在特定单元格中插入一个名为TabA的单词
你在谈论哪个单元格?它总是s吗ame one,在这个意义上,它每t被覆盖一次