Я пытаюсь добавить опцию для своих пользователей, чтобы в средстве проверки списка можно было выбрать любую из опций или пустую опцию. Spreadjs имеет настройку IgnoreBlanks, которую я использую, поэтому, когда пользователь использует клавишу удаления или клавишу возврата и удаляет ячейку, она правильно проверяется. Тем не менее, я хотел бы использовать ту же функциональность, что и в Excel, которая допускает пустые параметры в валидаторе списка в части списка.
Я попытался настроить таргетинг на элемент <select>
, который содержит список, и программно добавить пустой элемент, однако он вылетает после того, как пользователь выбирает пустую опцию.
Я также пытался добавить в список различные экранированные символы. Если я выберу символ, представляющий пустую строку или вкладку, он не добавит новый параметр в список. Если я использую какой-либо странный символ или даже нулевой символ \0
, вы получаете новую опцию для выбора, но содержимое представляет собой тот типичный прямоугольник, который вы видите, когда в вашем шрифте нет символа, который вы пытаетесь отобразить.
Я также протестировал использование обычного ListValidator, как на примерах страниц, а не наших пользовательских функций, и он тоже не работает.
https://www.grapecity.com/demos/spread/JS/TutorialSample/#/demos/basicDataValidator
Я также попытался создать FormulaListValidator, и если в моем диапазоне есть пустые ячейки, я мог бы получить пустой параметр в своем списке, однако, поскольку диапазон может иметь дубликаты, я получаю дублированные параметры.
После небольшого исследования я нашел обходной путь на другом языке, который я адаптировал к Typescript (Angular 6).
export const getListValidatorFromArray = (spread: GC.Spread.Sheets.Workbook, data: any[]) => {
// saving validation list values in a hidden sheet
spread.addSheet(spread.getSheetCount());
const sheet = spread.getSheet(spread.getSheetCount() - 1);
sheet.visible(false);
for (let i = 0; i < data.length; i++) {
sheet.setValue(i, 0, data[i]);
}
// create validator based on the values
const dv = GC.Spread.Sheets.DataValidation.createFormulaListValidator(
'=' + sheet.name() + '!$A$1:' + sheet.name() + '!$A$' + data.length
);
return dv;
};
Примечание: Это создает дополнительный лист для каждого создаваемого вами валидатора. Убедитесь, что вы повторно используете их как можно чаще (т. е. присваиваете их переменной при ее создании и повторно используете переменную для других столбцов/строк, которые используют один и тот же).