API надстройки Javascript для Excel - проверка данных для добавленных пользователем строк в таблицы не работает должным образом - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь реализовать проверку данных с помощью API-интерфейса надстройки Excel Javascript. Я работаю над небольшим приложением, которое извлекает данные из базы данных и позволяет редактировать некоторые значения, а другие только отображать в таблице. Ряды могут быть добавлены пользователем в таблицу тоже. На данный момент я не могу остановить редактирование определенных значений. Это важно для сравнения строк с данными, извлеченными из базы данных, для их выравнивания.

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

Моя проблема заключается в том, что когда пользователь добавляет новую строку в таблицу, даже если для этого столбца была назначена проверка данных только для ячеек в существующей таблице, ячейка под этой ячейкой ( и только ячейка под ней) также, по-видимому, выполняет ту же проверку данных (т. е. пытается сопоставить строку выше), даже если это другая ячейка. После проверки правильности данных в Excel do c этой ячейке ничего не назначается. Ошибка windows также выглядит по-разному.

Ячейка с проверкой данных

enter image description here

Ячейка без проверки данных под той, с которой она только что за столом

enter image description here

Буду признателен за любые идеи относительно того, почему это происходит, что я мог бы сделать вместо этого и т. д. 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.

...