找回密码
 立即注册

QQ登录

只需一步,快速开始

newAll

中级会员

71

主题

190

帖子

753

积分

中级会员

积分
753
newAll
中级会员   /  发表于:2023-9-12 12:52  /   查看:1402  /  回复:6
本帖最后由 Richard.Huang 于 2024-2-6 09:52 编辑

产品:SpreadJS
版本:V16
调研编号:SJS-22727




spread图标显示A=>Z排序,但是实际未按此规则排序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

6 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-9-12 14:03:13
沙发
本帖最后由 Richard.Huang 于 2023-9-12 14:06 编辑

您好,这是由于javascript对于中文的处理导致的哦,javascript对于英文字母的排序,就是按照a到z来进行的,但是如果是中文,那么javascript语言特性会让中文先转换成unicode后再进行比较和排序,“农业”和“再生”对应的unicode为\u519c\u4e1a和\u518d\u751f,因此a到z排序会将“再生”排到“农业”前面,如果您希望实现和本地excel相同的比较结果,建议使用自定义排序来实现:
自定义排序可以参考学习指南:https://demo.grapecity.com.cn/sp ... heet/sort#timestamp

您想实现本地excel的排序效果可以参考以下代码:


function pinyinCompare (a, b) {
    // 判断 a 和 b 是否都是英文字符串
  if (/^[a-zA-Z]+$/.test(a) && /^[a-zA-Z]+$/.test(b)) {
    // 如果都是英文字符串,则直接比较它们
    return a.localeCompare(b);
  } else if (!/^[a-zA-Z]+$/.test(a) && /^[a-zA-Z]+$/.test(b)) {
    // 如果 a 是中文字符串,b 是英文字符串,则 a 排在 b 前面
    return 1;
  } else if (/^[a-zA-Z]+$/.test(a) && !/^[a-zA-Z]+$/.test(b)) {
    // 如果 a 是英文字符串,b 是中文字符串,则 a 排在 b 前面
    return -1;
  } else {
    // 否则都是中文字符串,则按照中文拼音比较它们
    return a.toString().localeCompare(b.toString(), 'zh');;
  }
}
sheet.sortRange(1, 0, 4, 1, true, [
    {index:0, ascending:true, compareFunction: pinyinCompare},   //中文排序
]);


回复 使用道具 举报
newAll
中级会员   /  发表于:2023-9-12 14:37:07
板凳
本帖最后由 Richard.Huang 于 2023-9-12 14:47 编辑
Richard.Huang 发表于 2023-9-12 14:03
您好,这是由于javascript对于中文的处理导致的哦,javascript对于英文字母的排序,就是按照a到z来进行的, ...

https://gcdn.grapecity.com.cn/showtopic-59493-1-666.html因为我看了这个帖子,不支持字母排序。这个按首字母排序功能很常见的需求(WPS,EXCEL都是默认支持的),你这也回复了实现办法,为什么没有内置到spread中(自定义配置也可)?是有什么坑吗?
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-9-12 17:47:53
地板
本帖最后由 Richard.Huang 于 2024-2-6 09:52 编辑
newAll 发表于 2023-9-12 14:37
https://gcdn.grapecity.com.cn/showtopic-59493-1-666.html因为我看了这个帖子,不支持字母排序。这个按 ...

您好,感谢您的反馈,我会将该需求进行反馈,本贴就先移到需求板块了。需求编号:SJS-22727
回复 使用道具 举报
newAll
中级会员   /  发表于:2023-9-12 18:41:40
5#
Richard.Huang 发表于 2023-9-12 17:47
您好,感谢您的反馈,我会将该需求进行反馈,本贴就先移到需求板块了

好的,此需求后续“如果做,计划版本迭代时间是什么时候 ” 或者 “不做” ,希望有回帖反馈。
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-9-13 09:04:07
6#
newAll 发表于 2023-9-12 18:41
好的,此需求后续“如果做,计划版本迭代时间是什么时候 ” 或者 “不做” ,希望有回帖反馈。

好的,后续有相关信息我会在此贴中进行同步
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-2-18 12:08:26
7#
您好,本贴中提供的workaround仅仅只能支持常用汉字排序。如果对不常见的字符进行排序那么结果仍然是与Excel的排序不同。
例如将“abc”和“中国”进行排序,那么pinyinCompare会按照“abc">“中国”的结果进行展示,这与Excel是不同的。

如果要做到和中文版Excel一样的字符排序,那么对于中文字符串的比较就不像调用原生 str1.localeCompare(str2, "zh"); 那么简单了。这其中会涉及到汉字的映射,我们需要对汉字进行pingyin的映射,而我们无法在我们的产品中包含200KB以上的汉字映射,这其中是出于到性能的考虑以及SpreadJS依赖项大小的考虑。

因此目前我们并不会考虑对该功能的支持,而在未来,我们可能会对该功能进行相应的考虑,但当前没有计划来支持这个功能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部