本帖最后由 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}, //中文排序
]);
|