按字母数字顺序对文本列进行排序(字母在数字之前)

Sort text column alphanumerically (letters before numbers)

我正在尝试按零件号按字母数字顺序对我们的库存列表进行排序,以便字母在数字之前排序。例如,给定列表:

0004006A
AN42B10
0400975
1968
MS21042L3
0004006
AN414A
J961393
AN4H16A
SR22SCW20
STD1410
4914
15KE51CA
21
560

排序后的列表应该是:

AN4H16A
AN414A
AN42B10
J961393
MS21042L3
SR22SCW20
STD1410
0004006
0004006A
0400975
15KE51CA
1968
21
4914
560

目前,我只能让它在字母前按数字排序,因此列表如下所示:

004006
0004006A
0400975
15KE51CA
1968
21
4914
560
AN414A
AN42B10
AN4H16A
J961393
MS21042L3
SR22SCW20
STD1410

(特别注意 AN4H16A 出现在 AN42B10AN414A 之后,而不是之前。)

我尝试添加自定义列表(A、B、C、...、7、8、9),但按该列表排序得到的结果相同。

这可能吗?

以下解决方案适用于 LO Calc。如果数据在A1到A15中,则在B1中输入以下公式。

=IF(LEN($A1)<COLUMN()-1;-1;IF(CODE(MID($A1;COLUMN()-1;1))<=CODE(9);MID($A1;COLUMN()-1;1)+27;CODE(MID($A1;COLUMN()-1;1))-CODE("A")))

获取A1中字符串的第一个字符,然后确定该字符的排序值,"A"变为0(排序顺序中的第一个),“9”变为36(最后一个)排序顺序)。

现在,将字符串中的其余字符拖动并填充到 J15,然后将其他字符串向下拖动到 J15。

然后,转到数据 -> 排序。排序键 1 是列 B,排序键 2 是列 C,依此类推到 J。

或者,select A1 到 A15,然后 运行 以下 Python macro

import uno

def custom_sort():
    oSelect = XSCRIPTCONTEXT.getDocument().getCurrentSelection()
    rowTuples = oSelect.getDataArray()
    rowTuples = sorted(rowTuples, key=letters_then_numbers)
    oSelect.setDataArray(rowTuples)

def letters_then_numbers(rowTuple):
    strval = str(rowTuple[0])
    sresult = ""
    for c in strval:
        if c in (str(i) for i in range(10)):  # if character is a number
            c = chr(ord('z') + int(c))        # then order it after z
        sresult += c
    return sresult

g_exportedScripts = custom_sort,