You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将LibreOffice/Excel中选手赛事数据转为指定格式字符串?

解决方案

一、Excel兼容方案

1. 适用于Excel 365/2021(支持动态数组)

如果你的Excel版本支持动态数组,直接用以下公式(假设选手列是A列,赛事列是B列,从第2行开始数据,D2生成结果):

=A2&"("&TEXTJOIN(", ", TRUE, SORT(FILTER($B$2:$B$100, $A$2:$A$100=A2)))&")"
  • 说明:FILTER筛选当前选手的所有赛事,SORT对赛事排序,TEXTJOIN用逗号分隔拼接,最后和选手名组合成目标格式。下拉填充公式即可自动适配所有选手,新增选手或赛事无需手动调整。

2. 适用于旧版Excel(2019及以前)

旧版Excel无FILTER/SORT,可使用数组公式+TEXTJOIN(需按Ctrl+Shift+Enter确认输入):

=A2&"("&TEXTJOIN(", ", TRUE, IF($A$2:$A$100=A2, $B$2:$B$100, ""))&")"
  • 排序处理:若需要赛事排序,先对表格按「选手列+赛事列」升序排序,再使用上述公式即可得到有序的赛事列表。
  • 进阶:若频繁使用,可编写VBA自定义函数,复用性更强:
    按Alt+F11打开VBA编辑器,插入模块,粘贴以下代码:
    Function JoinEvents(player As String, dataRange As Range) As String
        Dim eventsArr() As String
        ReDim eventsArr(0 To dataRange.Rows.Count - 1)
        Dim i As Integer, count As Integer
        count = 0
        
        ' 收集当前选手的所有赛事
        For i = 1 To dataRange.Rows.Count
            If dataRange.Cells(i, 1).Value = player Then
                eventsArr(count) = dataRange.Cells(i, 2).Value
                count = count + 1
            End If
        Next i
        
        ' 排序赛事
        ReDim Preserve eventsArr(0 To count - 1)
        Dim temp As String, j As Integer
        For i = 0 To count - 2
            For j = i + 1 To count - 1
                If eventsArr(i) > eventsArr(j) Then
                    temp = eventsArr(i)
                    eventsArr(i) = eventsArr(j)
                    eventsArr(j) = temp
                End If
            Next j
        Next i
        
        ' 拼接成目标格式
        JoinEvents = player & "(" & Join(eventsArr, ", ") & ")"
    End Function
    
    回到Excel,在单元格输入=JoinEvents(A2, $A$2:$B$100)即可生成结果,新增数据只需调整数据范围参数。

二、Python脚本方案

用Pandas处理更高效,自动适配新增数据,默认赛事排序:

import pandas as pd

# 读取Excel数据(替换为你的文件路径和工作表名)
df = pd.read_excel("你的数据文件.xlsx", sheet_name="Sheet1")

# 按选手分组,合并并排序赛事
grouped = df.groupby("选手")["赛事"].agg(lambda x: ", ".join(sorted(x))).reset_index()

# 生成目标格式字符串
grouped["结果"] = grouped.apply(lambda row: f"{row['选手']}({row['赛事']})", axis=1)

# 保存结果到新Excel文件
grouped.to_excel("整理结果.xlsx", index=False)

# 打印结果
print("生成的结果:")
for item in grouped["结果"].tolist():
    print(item)
  • 说明:无需手动调整规则,新增选手或赛事后重新运行脚本即可,赛事自动按字母/拼音排序(可修改sorted的参数调整排序逻辑)。

内容的提问来源于stack exchange,提问作者JSJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:22:44