向列表验证器添加空选项

Add empty option to List Validator

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

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

我也像在示例页面中一样使用常规 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:' + sheet.name() + '!$A$' + data.length
  );
  return dv;
};

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