Почему я не могу присвоиться наравне с двумя структурами, которые имеют идентичное содержание?

Как насчет этой модификации? Когда значение удаляется из ячейки, объект события 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 ситуации для редактирования ячейки.

  1. Значение помещается в пустую ячейку.

    • e.value включены в объект события.
      • oldValue не включено в e.value. Li>
    • e.oldValue не включено в объект события.
  2. Существующее значение ячейки редактируется.

    • e.value и e.oldValue включены в объект события.
      • oldValue не включено в e.value. Li>
  3. Значение удалено из ячейки.

    • e.value и e.oldValue включены в объект события.
      • oldValue включено в e.value. Li>

Я думал, что шаблон 3 можно использовать для ситуации ОП .

5
задан Eddie 13 April 2009 в 17:34
поделиться

5 ответов

Они имеют одинаковое содержание, но не одного типа. Если они предназначены для того же типа, просто typedef xz; . Если они не одно и то же, но просто содержат одни и те же поля, лучше создать отдельную функцию, которая будет правильно назначать поля.


Мой обычный стиль объявления структур в C включает typedef, поэтому я забыл упомянуть об этом (извините!). Вот синтаксис:

typedef struct
{
  int foo;
  double bar;
} x;

/* Further down, if needed */
typedef x z;
13
ответ дан 18 December 2019 в 05:36
поделиться

Создание одинаково структурированных типов одним и тем же называется « типирование утки ». Это делается на некоторых языках, но не на C.

8
ответ дан 18 December 2019 в 05:36
поделиться

Компилятор не вычисляет «эквивалентность типов» между структурами, которые могут иметь одинаковую структуру, насколько это возможно что касается второй структуры, то она не имеет ничего общего с первой.

Она может делать x и y, потому что они объявлены одновременно.

Почему вы заново делали эту структуру? Вам, вероятно, следует один раз ввести определение структуры (например, в файле H), чтобы сделать ее фактическим типом, а затем объявить экземпляры.

Вот хороший учебник по typedefs для структур.

6
ответ дан 18 December 2019 в 05:36
поделиться
struct mystruct
{  
int i;  
double j;  
};

struct mystruct x, y;
struct mystruct z;

Если вы собираетесь копировать данные между ними, Вы должны объявить их с одинаковой идентичностью. У вас есть два объявления, не важно, что они равны для компилятора, это две разные структуры, и компилятор не должен обнаруживать их сходство.

5
ответ дан 18 December 2019 в 05:36
поделиться

C различает struct на основе имени, и если они анонимны, то другая структура определения различны.

Как бы то ни было, классический C не допускает x = z , когда x и z являются структурами - это то, что ANSI или С99 дополнение? В любом случае, вместо этого вы должны использовать

#include <string.h>
memcpy(&x, &z, sizeof(x));
0
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: