newAll 发表于 2023-9-12 12:52:23

文本升序降序能否按首字母排序?

本帖最后由 Richard.Huang 于 2024-2-6 09:52 编辑

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




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

Richard.Huang 发表于 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 (/^+$/.test(a) && /^+$/.test(b)) {
    // 如果都是英文字符串,则直接比较它们
    return a.localeCompare(b);
} else if (!/^+$/.test(a) && /^+$/.test(b)) {
    // 如果 a 是中文字符串,b 是英文字符串,则 a 排在 b 前面
    return 1;
} else if (/^+$/.test(a) && !/^+$/.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.Huang 发表于 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

Richard.Huang 发表于 2023-9-12 17:47
您好,感谢您的反馈,我会将该需求进行反馈,本贴就先移到需求板块了

好的,此需求后续“如果做,计划版本迭代时间是什么时候 ” 或者 “不做” ,希望有回帖反馈。

Richard.Huang 发表于 2023-9-13 09:04:07

newAll 发表于 2023-9-12 18:41
好的,此需求后续“如果做,计划版本迭代时间是什么时候 ” 或者 “不做” ,希望有回帖反馈。

好的,后续有相关信息我会在此贴中进行同步

Richard.Huang 发表于 2024-2-18 12:08:26

您好,本贴中提供的workaround仅仅只能支持常用汉字排序。如果对不常见的字符进行排序那么结果仍然是与Excel的排序不同。
例如将“abc”和“中国”进行排序,那么pinyinCompare会按照“abc">“中国”的结果进行展示,这与Excel是不同的。

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

因此目前我们并不会考虑对该功能的支持,而在未来,我们可能会对该功能进行相应的考虑,但当前没有计划来支持这个功能
页: [1]
查看完整版本: 文本升序降序能否按首字母排序?