Я пытаюсь реализовать проверку данных с помощью API-интерфейса надстройки Excel Javascript. Я работаю над небольшим приложением, которое извлекает данные из базы данных и позволяет редактировать некоторые значения, а другие только отображать в таблице. Ряды могут быть добавлены пользователем в таблицу тоже. На данный момент я не могу остановить редактирование определенных значений. Это важно для сравнения строк с данными, извлеченными из базы данных, для их выравнивания.
Я попытался реализовать это с помощью правил проверки данных по формуле ниже, в которой значение неизменяемой ячейки сравнивается с существующим значением абстрактной строки базы данных из объекта. Если они не совпадают, то значение должно быть возвращено, эффективно предотвращая редактирование этого столбца пользователем.
Моя проблема заключается в том, что когда пользователь добавляет новую строку в таблицу, даже если для этого столбца была назначена проверка данных только для ячеек в существующей таблице, ячейка под этой ячейкой ( и только ячейка под ней) также, по-видимому, выполняет ту же проверку данных (т. е. пытается сопоставить строку выше), даже если это другая ячейка. После проверки правильности данных в Excel do c этой ячейке ничего не назначается. Ошибка windows также выглядит по-разному.
Ячейка с проверкой данных
![enter image description here](https://i.stack.imgur.com/AvdLL.png)
Ячейка без проверки данных под той, с которой она только что за столом
![enter image description here](https://i.stack.imgur.com/qjf3A.png)
Буду признателен за любые идеи относительно того, почему это происходит, что я мог бы сделать вместо этого и т. д. c.
Я также пытался заблокировать только эти ячейки, а затем разблокировать и заблокировать лист между redr aws. Но, конечно, таблица не будет реагировать на пользовательские события, когда лист находится в заблокированном режиме, даже если ячейки, которые можно изменять, остаются разблокированными. Это было бы лучшим решением (с блокировкой листа), если у кого-то есть обходной путь для этого!
В любом случае, любая помощь очень ценится. Спасибо.
Примерный код ниже:
if (/* this cell must remain a unique identifier for the database */) {
cellRange.dataValidation.rule = {
custom: {
formula:
'=ISNUMBER(EXACT("' +
abstractRow.oldDatabaseValue(cellIndex) +
'", ' +
cellString +
"))"
}
};
}
РЕДАКТИРОВАТЬ: я должен добавить, что я проверил, что объекты cellRange и все идентификаторы указывают на правильные диапазоны и ячейки, и что ожидаемый результат Настройка проверки данных отражается в окне проверки данных Excel.