Google Sheets Trigger обновляет значения в таблице, но не оставляет старые значения неизменными.

Я запрограммировал макрос в Google Таблицах, который отображает таблицу для отображения истории определенных данных, которые меняются каждый день. Каждый день макрос вставляет в таблицу новую строку с новой датой. Это делается с помощью триггера. Проблема: триггер также изменяет значения (я не имею в виду дату, которая работает нормально, я имею в виду значение типа 1,2,3,4,5,6) строки, созданной накануне. Таким образом, каждая строка содержит одни и те же данные, если значения меняются. Однако я хотел бы отобразить историю данных. Так как я могу это предотвратить?

В настоящее время мой оценочный список является первым листом в этом файле, но если я переместу его на 6-ю позицию и наложу на него триггер, значения все равно будут записаны на 1-м листе, а не в оценочном списке, а на первом листе ( но я хочу их на 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. Как я могу предотвратить это?


person greenster10    schedule 17.10.2019    source источник
comment
Вы говорите о значениях в столбце 16? Вы заполняете этот столбец формулой, поэтому, если значение всех строк изменяется, это связано с изменением содержимого BG8. Как создается этот контент?   -  person ziganotschka    schedule 17.10.2019
comment
да, значения в столбце 16 меняются, но я хочу, чтобы они остались нетронутыми. Итак, как мне решить эту проблему? На данный момент у меня есть 3 даты в моей таблице, и я не хочу, чтобы значения (столбец 16) дат (столбец 15) больше менялись, они должны оставаться на значении 1, когда оно было 1 в этот день, и не изменяться на значение 2, например, когда добавляется новая строка с новой датой и значение изменяется на 2 для новой даты.   -  person greenster10    schedule 17.10.2019


Ответы (2)


Если вы хотите заполнить столбец 16 фактическим значением на листе checklist, ячейке BG8 и не хотите, чтобы значения предыдущих строк в столбце 16 обновлялись при обновлении BG8 - не используйте формулы.

Вместо этого измените

  tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setFormula('=\' checklist\'!BG8'); 

to

  var checklist=SpreadsheetApp.getActive().getSheetByName("checklist");
  var currentValue=checklist.getRange("BG8").getValue();
  tabellenblatt.getRange(tabellenblatt.getLastRow()+0,16).setValue(currentValue); 
person ziganotschka    schedule 17.10.2019
comment
1 момент пробую это! - person greenster10; 17.10.2019
comment
Он говорит: недействительный или неожиданный токен - person greenster10; 17.10.2019
comment
TypeError: SpreadsheetApp.getActive (...). GetSheetbyName не является функцией - person greenster10; 17.10.2019
comment
извините, это должно быть getSheetByName (заглавная B). Также убедитесь, что контрольный список написан точно так же, как и название вашего листа. - person ziganotschka; 17.10.2019
comment
Рад слышать. Если вас устраивает мое решение, я был бы признателен, если бы вы отметили его как принятый. - person ziganotschka; 18.10.2019
comment
В настоящее время мой оценочный список является первым листом в этом файле, но если я переместу его на 6-ю позицию и наложу на него триггер, значения все равно будут записаны на 1-м листе, а не в оценочном списке, а на первом листе ( но я хочу их на 6 листе). Что мне нужно ввести в код, чтобы записать значения на 6 листе (оценка)? - person greenster10; 07.11.2019
comment
у тебя есть идея? - person greenster10; 08.11.2019
comment
Вместо определения `var tabellenblatt = SpreadsheetApp.getActiveSheet (); _ 1_ var tabellenblatt = SpreadsheetApp.getSheetByName (name);` и укажите имя вашего оценочного листа. developers.google.com/apps-script/reference/spreadsheet/ - person ziganotschka; 02.12.2019
comment
stackoverflow.com/questions/59900660/, не могли бы вы мне помочь? та же проблема, но мне в основном это нужно в excel VBA сейчас - person greenster10; 25.01.2020

Предполагая, что ваш макрос присваивает значение =today(), вы можете обойти это, используя утилиту в сценариях приложений var today = Utilities.formatDate(new Date(), "dd/MM/yyyy").

person Yaakov Bressler    schedule 17.10.2019
comment
Можете ли вы опубликовать это в своем вопросе? - person Yaakov Bressler; 17.10.2019
comment
Итак, проблема в том, что значения берутся из другой таблицы, а значения в этой другой таблице меняются день ото дня. И когда я активирую триггер, он меняет старые значения, которые я хочу сохранить, чтобы увидеть прогресс / историю значений. - person greenster10; 17.10.2019
comment
Ах. Вы думали о том, чтобы записать новые данные на новый лист? Это должно решить вашу проблему. - person Yaakov Bressler; 17.10.2019
comment
Да, данные, на которые я ссылаюсь, находятся в контрольном списке таблицы, и я создал новую таблицу с именем Evaluation (есть моя таблица истории / прогресса), потому что мне нужны только определенные данные в моей таблице истории / прогресса. Но когда значение в chchklist изменяется, оно изменяется в моей таблице истории для всех дней, которые уже есть в моей таблице, поэтому в результате у меня просто нет истории ... Всегда есть новые данные, только с разными датами и этим это проблема - person greenster10; 17.10.2019
comment
В настоящее время мой оценочный список является первым листом в этом файле, но если я переместу его на 6-ю позицию и наложу на него триггер, значения все равно будут записаны на 1-м листе, а не в оценочном списке, а на первом листе ( но я хочу их на 6 листе). Что мне нужно ввести в код, чтобы значения вводились на 6 листе (оценка)? - person greenster10; 07.11.2019
comment
Подробности - в Q @ greenster10 - person Yaakov Bressler; 08.11.2019
comment
Я сделал, вы можете мне помочь? - person greenster10; 08.11.2019
comment
Конечно! Дай мне день или около того. - person Yaakov Bressler; 08.11.2019