背景:
在designer中,用户可以通过下图方式修改tableName。
有客户提出这样一个需求:业务中不希望用户将tableName设置为中文,如何限制中文字符的输入呢?
实现方式:
工具栏中tableName输入对应的命令为 'Designer.setTableName',所以可以通过重写execute方法从中加以干预。
- var setTableNameFn = spread.commandManager()['Designer.setTableName'].execute;
- spread.commandManager()['Designer.setTableName'].execute = function (context, options, actionType) {
- // do sth
- }
复制代码
其次,因为需要限制中文字符的输入,所以可以结合正则表达式对用户输入的tableName 字符串做下校验。
- function hasChinese(str) {
- return /[\u4e00-\u9fa5]/.test(str);
- }
复制代码 最后,判断如果包含中文字符,则弹出错误提示对话框;如果不包含,则正常执行原命令逻辑。
完整代码如下:
- var setTableNameFn = spread.commandManager()['Designer.setTableName'].execute;
- spread.commandManager()['Designer.setTableName'].execute = function (context, options, actionType) {
- function hasChinese(str) {
- return /[\u4e00-\u9fa5]/.test(str);
- }
- if (options.newTableName && !hasChinese(options.newTableName)) {
- return setTableNameFn.apply(this, arguments);
- } else {
- GC.Spread.Sheets.Designer.showMessageBox("无效表名,请勿输入中文字符", "错误提示", GC.Spread.Sheets.Designer.MessageBoxIcon.error);
- }
- }
复制代码
来看下实现效果:
完整代码请参考附件demo。
|
|