请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Kosen
金牌服务用户   /  发表于:2025-4-8 16:37  /   查看:211  /  回复:13
本帖最后由 Kosen 于 2025-4-8 17:20 编辑

有个场景:线上环境是用的日期格式数据做sumifs,=SUMIFS(数据源!B:B,数据源!A:A,">=2022-01-01"),下载下来后A列在wps和微软excel里都没识别出来是日期,导致公式算不出来。想问下有什么办法处理?
ddfde64f6da543b3a140bab062ea7154.sjs (5.91 KB, 下载次数: 9)

13 个回复

倒序浏览
Sophia
注册会员   /  发表于:2025-4-8 16:46:35
沙发
你是说线上环境B列是日期数据,然后下载下来B列的数据就不是日期数据了吗?
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-8 17:04:45
板凳
Sophia 发表于 2025-4-8 16:46
你是说线上环境B列是日期数据,然后下载下来B列的数据就不是日期数据了吗?

应该是线上能识别出来是日期,但是到本地就识别不出来了
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-4-8 17:20:50
地板
您好,查看了您的sjs文件,数据源sheet的A列的值是字符串类型的,而一个正常的日期应该是一个Date类型,您可以看一下区别:
image.png813770751.png
字符串类型的日期在SpreadJS中是特殊处理了,所以可以识别,但是Excel不认识,所以导出之后就不行了。
请问您A列的日期数据是怎么来的?您可以通过代码将单元格的值转换为Date,这样导出后就没问题了。

评分

参与人数 1满意度 +5 收起 理由
Kosen + 5

查看全部评分

回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-8 17:27:41
5#
Matthew.Xue 发表于 2025-4-8 17:20
您好,查看了您的sjs文件,数据源sheet的A列的值是字符串类型的,而一个正常的日期应该是一个Date类型,您 ...

我们链路比较长,spreadJs里的数据其实是后端GCExcel的(Object[][])workbook.getUsedRange().getValue()返回的,是不是在GCExcel里去指定下单元格格式为日期类型,后续再这样导出给前端就可以了?还是说getValue()这一步日期格式会丢掉,永远会返回个日期字符串给前端?
回复 使用道具 举报
Sophia
注册会员   /  发表于:2025-4-8 17:49:34
6#
sjs文件中单元格的值本身是字符串的话,在GcExcel中指定单元格格式是日期也没有效果,它仍然只是个字符串值。你可以写下面的代码,这样可以让这些字符串变成日期数据。
image.png75258788.png
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-8 17:55:56
7#
Sophia 发表于 2025-4-8 17:49
sjs文件中单元格的值本身是字符串的话,在GcExcel中指定单元格格式是日期也没有效果,它仍然只是个字符串值 ...

autoParse这个代价大吗?之前有单元格autoFit会拖慢整个流程
回复 使用道具 举报
Sophia
注册会员   /  发表于:2025-4-8 17:58:50
8#
autoParse只会影响setvalue的过程,只是对set的值进行解析,对性能影响不大。
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-8 18:00:29
9#
Sophia 发表于 2025-4-8 17:49
sjs文件中单元格的值本身是字符串的话,在GcExcel中指定单元格格式是日期也没有效果,它仍然只是个字符串值 ...

其实单元格的值是我后端GCExcel里边写的,我可以在GCExcel里指定一下单元格类型,不过我不知道要用哪个api来设定单元格的类型为通用或者日期
回复 使用道具 举报
Sophia
注册会员   /  发表于:2025-4-8 18:02:09
10#
workbook.getWorksheets().get("数据源").getRange("A2").setNumberFormat("m/d/yyyy");
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部