Как насчет этой модификации? Когда значение удаляется из ячейки, объект события e
из onEdit(e)
имеет e.value.oldValue
. Используя это, ваш скрипт может быть написан следующим образом.
function onEdit(e) { // Modified
if (!e.value.oldValue) { // Added
var COLUMNTOCHECK = 1;
var DATETIMELOCATION = [0,1];
var SHEETNAME = 'STOCKOUT'
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK) {
var balance = sheet.getRange("i1").getValue();
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue([balance]);
}
}
}
}
Если я неправильно понял ваш вопрос и это Я не прошу прощения.
Я подумал 3 ситуации для редактирования ячейки.
Значение помещается в пустую ячейку.
e.value
включены в объект события. oldValue
не включено в e.value
. Li> e.oldValue
не включено в объект события. Существующее значение ячейки редактируется.
e.value
и e.oldValue
включены в объект события. oldValue
не включено в e.value
. Li> Значение удалено из ячейки.
e.value
и e.oldValue
включены в объект события. oldValue
включено в e.value
. Li> Я думал, что шаблон 3 можно использовать для ситуации ОП .
Они имеют одинаковое содержание, но не одного типа. Если они предназначены для того же типа, просто typedef xz;
. Если они не одно и то же, но просто содержат одни и те же поля, лучше создать отдельную функцию, которая будет правильно назначать поля.
Мой обычный стиль объявления структур в C включает typedef, поэтому я забыл упомянуть об этом (извините!). Вот синтаксис:
typedef struct
{
int foo;
double bar;
} x;
/* Further down, if needed */
typedef x z;
Создание одинаково структурированных типов одним и тем же называется « типирование утки ». Это делается на некоторых языках, но не на C.
Компилятор не вычисляет «эквивалентность типов» между структурами, которые могут иметь одинаковую структуру, насколько это возможно что касается второй структуры, то она не имеет ничего общего с первой.
Она может делать x и y, потому что они объявлены одновременно.
Почему вы заново делали эту структуру? Вам, вероятно, следует один раз ввести определение структуры (например, в файле H), чтобы сделать ее фактическим типом, а затем объявить экземпляры.
struct mystruct
{
int i;
double j;
};
struct mystruct x, y;
struct mystruct z;
Если вы собираетесь копировать данные между ними, Вы должны объявить их с одинаковой идентичностью. У вас есть два объявления, не важно, что они равны для компилятора, это две разные структуры, и компилятор не должен обнаруживать их сходство.
C различает struct
на основе имени, и если они анонимны, то другая структура определения различны.
Как бы то ни было, классический C не допускает x = z
, когда x
и z
являются структурами - это то, что ANSI или С99 дополнение? В любом случае, вместо этого вы должны использовать
#include <string.h>
memcpy(&x, &z, sizeof(x));