Google apps script GoogleSheets会触发更新表中的值,但不会保持旧值不变
我在Google Sheets中编程了一个宏,它显示一个表格,显示每天变化的某些数据的历史。宏每天都会在表中插入一行新的日期。这是使用触发器完成的。 问题:触发器还会更改前一天创建的行的值(我不是指日期,这很好,我是指类似于1,2,3,4,5,6的值)。因此,如果值发生变化,则每一行都包含相同的数据。但是,我想显示数据的历史记录。 那么我怎样才能防止这种情况呢Google apps script GoogleSheets会触发更新表中的值,但不会保持旧值不变,google-apps-script,google-sheets,triggers,google-sheets-macros,Google Apps Script,Google Sheets,Triggers,Google Sheets Macros,我在Google Sheets中编程了一个宏,它显示一个表格,显示每天变化的某些数据的历史。宏每天都会在表中插入一行新的日期。这是使用触发器完成的。 问题:触发器还会更改前一天创建的行的值(我不是指日期,这很好,我是指类似于1,2,3,4,5,6的值)。因此,如果值发生变化,则每一行都包含相同的数据。但是,我想显示数据的历史记录。 那么我怎样才能防止这种情况呢 目前,我的评估列表是此文件中的第一张表,但如果我将其移动到第6个位置并在其上放置触发器,则值仍会写入第一张表,而不是评估列表,而是第一张
目前,我的评估列表是此文件中的第一张表,但如果我将其移动到第6个位置并在其上放置触发器,则值仍会写入第一张表,而不是评估列表,而是第一张表(但我希望它们写入第6张表)。我必须在代码中输入什么才能在第6页(评估)中输入值 现在看起来是这样的:
function zeitStempelPerTriggerSetzen(){
var tabellenblatt=SpreadsheetApp.getActiveSheet();
var aktuellerZeitpunkt=new Date();
var zeitStempelFormat="dd.mm.yyyy hh:mm:ss";
tabellenblatt.getRange(tabellenblatt.getLastRow()+1,15).setValue(aktuellerZeitpunkt).setNumberFormat(zeitStempelFormat);
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8');
例如,第1行:2019-10-16
值为1(这应该保持为1,因为我想看到进度),但当我激活触发器时,它会生成一个新的第2行:2019-10-17
值现在为2,但第1行中的值也会更改为2。我希望第1行中的值保持在1。
如何防止这种情况发生?假设您的宏正在分配值
=today()
,您可以通过使用应用程序脚本var today=Utilities.formatDate(新日期(),“dd/MM/yyyyy”)
中的实用程序来解决这一问题,如果要使用工作表检查表中的实际值填充第16列,可以使用应用程序脚本中的实用程序var today=Utilities.formatDate(new Date(),“dd/MM/yyyyy”)
解决此问题,单元格BG8
并且您不希望在BG8
更新时更新第16列中前几行的值-不要使用公式
改为修改
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8');
到
如果要使用工作表检查表、单元格BG8
中的实际值填充第16列,并且不希望在BG8
更新时更新第16列中前几行的值,请不要使用公式
改为修改
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8');
到
你能在你的Q中发布这个吗?问题是这些值来自另一个表,而另一个表中的值每天都在变化。当我激活触发器时,它会更改旧值,我希望安全地查看值的进度/历史。您是否考虑过将新数据写入新表?这应该可以解决您的困难。是的,我参考的数据在表清单中,我制作了一个新表,名为“评估”(这是我的历史/进度表),因为我只需要历史/进度表中的特定数据。但是当chklist中的一个值改变时,它会在我的历史表中改变表中已经存在的所有天,因此结果就是我根本没有历史。。。总是有新的数据,只是日期不同,这就是问题目前我的评估列表是此文件中的第一页,但如果我将其移动到第6个位置并在其上放置触发器,则值仍会写入第一页,而不是评估列表,而是第一页(但我希望它们位于第6页)。我必须在代码中输入什么才能在第6页(评估)中输入值?你能在Q中发布这个吗?所以问题是,值来自另一个表,而另一个表中的值每天都在变化。当我激活触发器时,它会更改旧值,我希望安全地查看值的进度/历史。您是否考虑过将新数据写入新表?这应该可以解决您的困难。是的,我参考的数据在表清单中,我制作了一个新表,名为“评估”(这是我的历史/进度表),因为我只需要历史/进度表中的特定数据。但是当chklist中的一个值改变时,它会在我的历史表中改变表中已经存在的所有天,因此结果就是我根本没有历史。。。总是有新的数据,只是日期不同,这就是问题目前我的评估列表是此文件中的第一页,但如果我将其移动到第6个位置并在其上放置触发器,则值仍会写入第一页,而不是评估列表,而是第一页(但我希望它们位于第6页)。我必须在代码中输入什么才能在第6页(评估)中输入值?您是说第16列中的值吗?您使用公式填充此列,因此如果所有行的值都更改,这是因为BG8
的内容更改。这些内容是如何生成的?是的,第16列中的值会发生变化,但我希望它们保持不变。那么我该如何解决这个问题呢?现在我的表中有3个日期,我不想再更改日期(第15列)的值(第16列),当当天的值为1时,它们应保持在值1,而不应更改为值2,例如,当添加了具有新日期的新行,并且新日期的值更改为2时。您是在谈论第16列中的值吗?您使用公式填充此列,因此如果所有行的值都更改,这是因为BG8
的内容更改。这些内容是如何生成的?是的,第16列中的值会发生变化,但我希望它们保持不变。那么我该如何解决这个问题呢?当我的表中有3个日期,我不想再更改日期(第15列)的值(第16列)时,它们应该在当天为1时保持在值1,不要更改为值2,例如,当添加了一个新日期的新行,并且新日期的值更改为2时。我尝试了这一点!它显示:无效或意外的tokenTypeError:SpreadsheetApp.getActive(…)。getSheetbyName不是一个函数抱歉,它是一个函数