找回密码
 立即注册

QQ登录

只需一步,快速开始

忘语吧

注册会员

5

主题

16

帖子

63

积分

注册会员

积分
63
最新发帖
忘语吧
注册会员   /  发表于:2024-7-10 17:46  /   查看:1254  /  回复:5
10金币
本帖最后由 Joestar.Xu 于 2024-7-11 10:31 编辑


调研编号:SJS-25345

1、单元格输入值后,按下Tab,值消失了。
2、还有个就是初始化new GC.Spread.Sheets.CellTypes.Text(GC.Spread.Sheets.CellTypes.EditorType.textarea)这种格式的,输入 不值,而且在typescript环境中还报错了。
1:

image.png606997069.png
值消失了
image.png110728148.png
2: new GC.Spread.Sheets.CellTypes.Text(GC.Spread.Sheets.CellTypes.EditorType.textarea)不能输入值


image.png596694640.png



testSpreadjs.zip

2.38 KB, 下载次数: 446

最佳答案

查看完整内容

您好,请参考以下自定义单元格示例来实现:

5 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-10 17:46:09
来自 4#
您好,请参考以下自定义单元格示例来实现:

  1. function NumberCellType() {}
  2. NumberCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  3. NumberCellType.prototype.createEditorElement = function (context) {
  4.   let editor =
  5.     GC.Spread.Sheets.CellTypes.Text.prototype.createEditorElement.call(
  6.       this,
  7.       context
  8.     );
  9.   editor.onkeyup = function (event) {
  10.     console.log("keyup", event);
  11.     if (event.srcElement.innerText.length >= 5) {
  12.       this.innerText = this.innerText.substring(0, 4);

  13.       const range = document.createRange();
  14.       const selection = window.getSelection();
  15.       range.selectNodeContents(this);
  16.       range.collapse(false);
  17.       selection.removeAllRanges();
  18.       selection.addRange(range);
  19.     }
  20.   };
  21.   return editor;
  22. };
  23. NumberCellType.prototype.activateEditor = function (
  24.   editorContext,
  25.   cellStyle,
  26.   cellRect,
  27.   context
  28. ) {
  29.   GC.Spread.Sheets.CellTypes.Text.prototype.activateEditor.apply(this, [
  30.     editorContext,
  31.     cellStyle,
  32.     cellRect,
  33.     context,
  34.   ]);
  35.   let value = context.sheet.getCell(context.row, context.col).value();
  36.   if (value && value.toString().includes("/")) {
  37.     let a = value.toString().substring(0, 2);
  38.     let b = value.toString().substring(3);
  39.     let result = a + b;

  40.     context.sheet.getCell(context.row, context.col).value(result);
  41.   }
  42. };

  43. NumberCellType.prototype.deactivateEditor = function (editorContext, context) {
  44.   GC.Spread.Sheets.CellTypes.Text.prototype.deactivateEditor.apply(this, [
  45.     editorContext,
  46.     context,
  47.   ]);

  48.   let originalValue = context.sheet.getCell(context.row, context.col).value();
  49.   let a = originalValue.toString().substring(0, 2);
  50.   let b = originalValue.toString().substring(2);
  51.   let result = a + "/" + b;

  52.   context.sheet.getCell(context.row, context.col).value(result);
  53. };

  54. let numberCellType = new NumberCellType();
  55. sheet.getRange(0, 0, 5, 5).cellType(numberCellType);
复制代码

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-11 10:25:54
2#
您好,

1、您的Demo中重写了setEditorValue和getEditorValue,导致输入的值无法被正确应用到单元格中,我没看懂您这么写想要实现的需求是什么,方便详细说明一下吗?

2、猜测可能是.d.ts的声明有误,这边调研一下。
回复 使用道具 举报
忘语吧
注册会员   /  发表于:2024-7-11 11:30:31
3#
Joestar.Xu 发表于 2024-7-11 10:25
您好,

1、您的Demo中重写了setEditorValue和getEditorValue,导致输入的值无法被正确应用到单元格中, ...

第一个是一个日期input,输入yyMM的格式,editEnd时自动转换yy/MM。比如输入2101,然后转换成21/01
回复 使用道具 举报
忘语吧
注册会员   /  发表于:2024-7-11 17:42:28
5#
Joestar.Xu 发表于 2024-7-11 17:33
您好,请参考以下自定义单元格示例来实现:

好的,谢谢
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-12 09:20:09
6#
不客气,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部