找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-10 17:14  /   查看:811  /  回复:0


数字字符串是使用电子表格过程中经常会遇到的情况,  单元格的看起来是数字,但是实际值并不是数字值,而是一个字符串。

一般来说,有两种可能性导致输入数字字符串
  • UI操作时,如果单元格类型是文本,那么输入的数字会转换为字符串。
  • setValue等接口设置单元格值的时候,没有留意设置的值参数,传入的是字符串。尤其是后端发过来的数据,很多本身就是数字字符串


在Excel中,对于数字字符串会显示一个绿色的角标,且在选中时,会有提示“以文本形式存储的数字”

image.png41602171.png

SpreadJS由于和Excel的设计差异,对数字字符串的兼容性更好,包括在计算的时候也可以支持“数字字符串”参与计算。因此并没有角标来专门区分

如果需要和Excel一样显示绿色角标,可以对单元格类型中的Text类型的paint方法进行重写,在执行原有的绘制逻辑前,给单元格样式加上一个“单元格折角
继续绘制,即可让普通单元格实现同样的效果


  1. GC.Spread.Sheets.CellTypes.Text.prototype.paint=function (ctx, value, x, y, w, h, style, context) {
  2.     if(typeof(value) == "string"&&/^[0-9]+\.?[0-9]*$/.test(value)){
  3.         style.decoration = {
  4.             cornerFold: {
  5.                 size: 10,
  6.                 position: GC.Spread.Sheets.CornerPosition.leftTop,
  7.                 color: "green"
  8.             }
  9.         }
  10.     }
  11.     GC.Spread.Sheets.CellTypes.Base.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, context]);

  12. }
复制代码

注意,上述代码仅提供了一个简单的思路,来实现效果
实际应用中,你需要考虑这个设置会覆盖本身的折角设置,进行逻辑判断


image.png279011229.png
image.png58883666.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部