找回密码
 立即注册

QQ登录

只需一步,快速开始

刘明

金牌服务用户

15

主题

55

帖子

164

积分

金牌服务用户

积分
164
刘明
金牌服务用户   /  发表于:2022-2-14 16:47  /   查看:2125  /  回复:3
1金币
image.png169642333.png
1. 设计器日期1900年3月前导出差一天问题该怎么解决?
2. 是否可以在导出前进行拦截,修改数据后在导出?
3. spread我可以通过excel.io自己导出,设计器导出功能集成在内部该怎么处理?

最佳答案

查看完整内容

方案2所述: 不用toJSON后修改,您可以通过遍历单元格使用getValue方法拿到单元格的值,并判断是否在1900/1/0 ~ 1900/2/29这个区间,如果是则再通过setValue的方式进行修改单元格日期值。 之后再执行 save方法/toJSON方法 进行导出excel文件。 方案3同上,通过修改了toJSON方法原型, 使SJS执行toJSON方法时会先执行自己添加的代码逻辑(即前面所述修改相应单元格的值),然后进行导出。

3 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-14 16:47:52
来自 4#
刘明 发表于 2022-2-15 15:56
我先toJSON拿到数据,然后循环找到是不是1900年1月-3月的数据,然后修改数据,再次toJSON吗。如果页面数据 ...

方案2所述:
不用toJSON后修改,您可以通过遍历单元格使用getValue方法拿到单元格的值,并判断是否在1900/1/0 ~ 1900/2/29这个区间,如果是则再通过setValue的方式进行修改单元格日期值。
之后再执行 save方法/toJSON方法 进行导出excel文件。

方案3同上,通过修改了toJSON方法原型,
使SJS执行toJSON方法时会先执行自己添加的代码逻辑(即前面所述修改相应单元格的值),然后进行导出。

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-14 17:51:43
2#
您好,问题1
请参考下方链接文章:
https://gcdn.grapecity.com.cn/fo ... hread&tid=88297

问题2
如果自己写的导出excel文件逻辑,那么可以在执行save方法之前,
判断单元格的值是否在1900/1/0 ~ 1900/2/29这个区间,
如果在,则就在SpreadJS的日期中减一,再执行save方法。

也可以参考方案3,直接修改toJSON方法原型里逻辑。

问题3
针对于设计器直接导出excel文件的情况,可以参考下方代码修改 toJSON方法原型逻辑
  1. var oldFN = GC.Spread.Sheets.Workbook.prototype.toJSON;
  2.       GC.Spread.Sheets.Workbook.prototype.toJSON = function (option) {
  3.         
  4.          alert("加点东西");
  5.          // sheet.setValue(0, 0, 22)
  6.          console.log(option)
  7.          var jsonData = oldFN.apply(this, [option]);
  8.       
  9.          console.log(jsonData);
  10.          return jsonData;
  11.       }
复制代码
具体请参考附件demo。

重写导出excel.html

2.48 KB, 下载次数: 89

回复 使用道具 举报
刘明
金牌服务用户   /  发表于:2022-2-15 15:56:34
3#
我先toJSON拿到数据,然后循环找到是不是1900年1月-3月的数据,然后修改数据,再次toJSON吗。如果页面数据量大,或者sheet页多循环次数太多了。而且这个情况只是再导出excel中才会用到。1.怎么给导出按钮绑定监听事件,点的是导出我再去重写toJSON方法。2.怎么能不使用toJSON就判断出页面有么有1900年的数据。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部