找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2021-12-28 11:47  /   查看:2936  /  回复:4
本帖最后由 Winny 于 2021-12-28 14:45 编辑

在实际项目中,单元格往往会设置成当前时间,但是用户在获取时,其实是想获取的并不是时间类型的对象,而是单元格当前显示的格式化字符串。
本文会详细介绍,如何给单元格设置时间类型并按照规定的格式化类型展示,在最终获取时,获取格式化后的字符串。
Step1: 设置单元格为当前时间;
  1. let sheet = spread.getActiveSheet()
  2. let date = new Date()
  3. sheet.setValue(0,0,date)
复制代码
设置完成后,在A1单元格显示的其实是格林威治时间。
Step2: 设置单元格格式,将时间类型的内容显示为对应的格式化后的字符串;
  1. sheet.getCell(0,0).formatter('YYYY-MM-DD')
复制代码
Step3: 获取单元格中的时间;
在SpreadJS中,获取单元格原始内容调用的API为sheet.getValue(rowIndex,colIndex),如果用该方法获取之前设置的时间单元格内的内容,得到的仍旧是时间对象,显示的是一个格林威治时间。
如果想要获取格式化后的字符串,需要调用API,sheet.getText(rowIndex,colIndex),这时,获取对应的时间单元格,得到的内容是"YYYY-MM-DD"格式化后的日期。
在用户实际项目中,对于普通类型,需要使用getValue()方法,而获取时间时,大部分是希望使用getText()方法。此时,可以先使用getValue()方法获取单元格的内容,之后判断其是否为时间类型,如果是时间类型,则将当前值覆盖为getText()方法获取的内容,示例代码如下:
  1. sheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
  2. let {sheet,row,col} = args
  3.     let value = sheet.getValue(row,col)
  4.     if(value && value instanceof Date){
  5.         value = sheet.getText(row,col)
  6.     }
  7.     alert(value)
  8. })
复制代码

实际项目中,可以对绑定的CellClick中的方法进行封装,形成一个业务代码。
参考demo:https://jscodemine.grapecity.com/share/d_gjHi43zUyyBIsRWyTLWQ/
demo所在平台部署在国外,加载时间可能久一些,请耐心等待哦~






4 个回复

倒序浏览
爱吃西蓝花
注册会员   /  发表于:2022-2-16 11:18:32
沙发
那如果说当前单元格内容不为时间,给当前单元格绑定时间格式 此方法就不能回显出时间类型了
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-16 11:31:38
板凳
爱吃西蓝花 发表于 2022-2-16 11:18
那如果说当前单元格内容不为时间,给当前单元格绑定时间格式 此方法就不能回显出时间类型了

是的,时间格式只会对date或者number其作用,像是对文本是不会起作用的,这个是正常现象,excel也是如此。因此,就像上面的事件那样,需要对时间类型进行判断。
回复 使用道具 举报
爱吃西蓝花
注册会员   /  发表于:2022-2-16 11:42:18
地板
Derrick.Jiao 发表于 2022-2-16 11:31
是的,时间格式只会对date或者number其作用,像是对文本是不会起作用的,这个是正常现象,excel也是如此 ...

那这样对于占位符操作方法有什么更好的解决办法,单元格上显示的是占位符,例如《出生日期》,显示是中文,对单元格设定时间格式绑定,那用户就无法看到当前单元格到底是什么格式或绑定与否
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-2-16 12:06:57
5#
爱吃西蓝花 发表于 2022-2-16 11:42
那这样对于占位符操作方法有什么更好的解决办法,单元格上显示的是占位符,例如《出生日期》,显示是中文 ...

这种是无法看出效果的,这个属于产品设计问题,如果想要让用户知道是否设置了对应的格式,可以利用自定义单元格绘制一个角标,做个判断,当格式满足时,显示角标,格式不满足时,隐藏角标。下面的demo链接。
https://demo.grapecity.com.cn/sp ... es/index.html?id=19
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部