首页 > 解决方案 > 向列表验证器添加空选项

问题描述

我正在尝试在列表验证器上向我的用户添加选项,以允许选择任何选项或空白选项。Spreadjs 具有我使用的 IgnoreBlanks 设置,因此当用户使用删除键或退格键并删除单元格时,它会正确验证。但是,我希望使用与 Excel 中相同的功能,它允许列表验证器中的空白选项,在列表的一部分。

我试图定位<select>包含列表的元素并以编程方式添加空元素,但是,它在用户选择空选项后崩溃。我还尝试将不同的转义字符添加到列表中。如果我选择代表空字符串或制表符的字符,它不会向列表中添加新选项。如果我使用任何奇怪的字符,甚至是空字符\0,你会得到一个新的选项来选择,但内容是你看到的典型矩形,当你的字体没有你要显示的字符时。

我还使用示例页面中的常规 ListValidator 进行了测试,而不是我们的自定义功能,也不起作用。

https://www.grapecity.com/demos/spread/JS/TutorialSample/#/demos/basicDataValidator

我也尝试过创建一个 FormulaListValidator,如果我的范围有空单元格,我可以在我的列表中获得一个空选项,但是,因为范围可能有重复,我会得到重复的选项。

标签: spreadjsgrapecity

解决方案


经过一番研究后,我发现了一种不同语言的解决方法,我适应了 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;
};

注意:这会为您创建的每个验证器创建一个额外的工作表。确保尽可能多地重用它们(即在创建变量时将其分配给变量,并将变量重用于使用相同的其他列/行)。


推荐阅读