Google Sheets 触发器更新 table 中的值,但不会保持旧值不变
Google Sheets Trigger updates values in a table, but does not leave old values unchanged
我在 Google 工作表中编写了一个宏,它显示 table 以显示每天变化的某些数据的历史记录。宏每天都会在 table 中插入一个带有新日期的新行。这是使用触发器完成的。
问题:触发器还会更改前一天创建的行的值(我不是指日期,它工作正常,我指的是像 1、2、3、4、5、6 这样的值)。因此,如果值发生变化,每一行都包含相同的数据。但是,我想显示数据的历史记录。
那么我该如何预防呢?
目前我的评估列表是这个文件中的第一个sheet,但是如果我把它移到第6个位置并在上面放一个触发器,值仍然写在第一个sheet ,不在评估列表中,而是在第一个 sheet 上(但我希望它们在第 6 个 sheet 上)。我必须在代码中输入什么才能在 6 日输入值 sheet(评估)?
现在看起来像这样:
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(new Date(), "dd/MM/yyyy")
。
如果您想用 sheet checklist
单元格 BG8
中的实际值填充第 16 列,并且不希望第 16 列中前几行的值在以下时间更新BG8
更新 - 不要使用公式。
改为修改
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8');
到
var checklist=SpreadsheetApp.getActive().getSheetByName("checklist");
var currentValue=checklist.getRange("BG8").getValue();
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setValue(currentValue);
我在 Google 工作表中编写了一个宏,它显示 table 以显示每天变化的某些数据的历史记录。宏每天都会在 table 中插入一个带有新日期的新行。这是使用触发器完成的。 问题:触发器还会更改前一天创建的行的值(我不是指日期,它工作正常,我指的是像 1、2、3、4、5、6 这样的值)。因此,如果值发生变化,每一行都包含相同的数据。但是,我想显示数据的历史记录。 那么我该如何预防呢?
目前我的评估列表是这个文件中的第一个sheet,但是如果我把它移到第6个位置并在上面放一个触发器,值仍然写在第一个sheet ,不在评估列表中,而是在第一个 sheet 上(但我希望它们在第 6 个 sheet 上)。我必须在代码中输入什么才能在 6 日输入值 sheet(评估)?
现在看起来像这样:
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(new Date(), "dd/MM/yyyy")
。
如果您想用 sheet checklist
单元格 BG8
中的实际值填充第 16 列,并且不希望第 16 列中前几行的值在以下时间更新BG8
更新 - 不要使用公式。
改为修改
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8');
到
var checklist=SpreadsheetApp.getActive().getSheetByName("checklist");
var currentValue=checklist.getRange("BG8").getValue();
tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setValue(currentValue);