Files
Scoreboard/docs/报名名单导入规范.md
T
AskaEth 99c91f99f7 feat(entry): 团体报名「队员身份」—— 一条报名挂多个运动员,标识用号码布;版本 dev_0.5.6
## 需求(主人原话)
> 「双打我给他定义的是团队赛事,团队赛事不应该本来就是可以配置多个人的吗」
> 「把队员身份证留住,**应该是服务于整个团体报名**」

**现状问题**:界面(`EntryPicker`)**本来就能勾多个运动员**,但提交时只把姓名拼成文字
(`entrySelection.ts` 的 `input.athletes.map(a => a.name)` 存进 `entries.member_names TEXT`)→ **身份全丢**
→ 系统不知道队里坐着谁 → **所有团体/对抗项目都给不出个人分、个人奖牌,上不了个人积分榜**。

## 口径
- **运动员的唯一标识是号码布**(主人明确更正,不是证件号)。
- **每个队员各拿一份完整的个人分** —— 是「**复制**」不是「拆」(与联队 `splitSharePoints` 正好相反)。
- **个人奖牌每人各一枚**;**单位总分与单位奖牌不受影响**(由通道开关 `count_to_team` / `count_to_team_medals` 控制)。

## 一、数据
- 迁移 `0026_entry_athletes.sql`:新表 `entry_athletes(entry_id, athlete_id, sort_order)`,PK `(entry_id, athlete_id)`,两个外键都 `ON DELETE CASCADE`。
  `entries` **一个字节没动**(`member_names` 保留为显示用名单;多队唯一键 `(category_id,team_id,squad) WHERE athlete_id IS NULL` 未触碰)。
- **老数据回填(尽力而为)**:拿 `member_names` 去 `athletes` 匹配 —— **号码布优先**,其次「姓名 + 单位」且同单位同名唯一;**匹配不上留空**,不硬猜。

## 二、引擎
- `RankedResult.MemberCopy`(报名项那份 `false`、队员副本 `true`);**只在 `scope=athlete` 通道展开**(`scope=team` 与 `basis=aggregate` 不展开)。
- **单位维度不重复计算的三道锁**(本单最大的坑):
  1. 队员副本流水 `count_to_team` **恒为 false** —— 单位总分那条 SQL 第一句就跳过它,而个人榜不看这个开关;
  2. 单位奖牌仍按**报名项**去重、且报名项那份**排在最前**;
  3. 队员副本**照抄 `TeamID` 与 `Shares`**(不换单位、不另造份额 —— 联队报名尤其危险)。
  反面也测了:个人奖牌若按报名项去重会**一枚都发不出来**(被 `AthleteID=0` 那份吃掉),故改为按「报名项 + 运动员」去重。

## 三、写 / 读
- `PUT /api/entries/{id}/athletes`(recorder+、CSRF):body `{"athletes":[{"athleteId":12}],"requestId":"..."}`,**只认 athleteId**;空数组=清空;
  改完当场重算推榜。400:athleteId 缺/不存在、同一人两次、>30 人、个人报名不能挂队员。
- 读:`entryDTO.athletes: [{athleteId, name, bib}]`(**始终是数组**);`memberNames` 原样保留,**两者可并存**(没档案的人只能留文字)。

## 四、导入
- 报名表「队员名单」列现在**按号码布认人**(命中即关联,同时保留文字);⚠️ **姓名完全不做匹配**(同名会认错,而认错的分已经上了榜);匹配不上**不报错、只当文字**。
- 边界逐条有 notice/报错:跨单位号码布**照关联 + notice**(号码布是唯一标识);同格重号只关联一次 + notice;**个人行**写了号码布只留文字 + notice;**认出 >30 人整行拦下**;成功时一条汇总 notice。
- **更新路必须重算**:老表先导入、成绩已发布,之后补上号码布重传 —— 不在更新路重算就会出现「名单里有队员、榜上没有他」(删掉该条件即红)。

## 五、界面与显示
- 补报名勾的人**真正提交**(导入成功后追加 `PUT /athletes`,**只发需要变的**:勾了人的单位、以及原来有队员这次一个没勾的(发 `[]`);一个都没勾且原来也没队员的一律不发);**队员写失败单独提示**(报名本身已加入,不冒充「加入报名失败」)。
- **改队员**:录入页「运动员/队」那格的**「队员」小按钮**(只有纯团体行才有),弹窗勾选式名单;**与「成员单位与份额」是两个独立写请求**(份额管「分给哪些单位」、队员管「这条报名里有哪几个人」)。
- 显示统一写法 **`姓名(号码布)`**(导出件;大屏只写姓名与 ` / ` 分隔 —— 号码布太长会把整屏字号压下去);**没有队员关联的老数据一个字不变**;
  ⚠️ **一条报名仍只占一行**(有护栏测试钉着);`squad`(队)与 `athletes`(队员)**正交**。

## 验证
- 全量自检两轮**全绿、`EXIT=0`**:服务端 14 包 / 前端 **921 例** 0 fail / Console 68 例 0 fail。
- 各块先红后绿并留原始输出;**老数据零变化**有 golden 对拍(引擎层 / 接口层 / 导出层逐行 dump)。

## 文档
`docs/报名名单导入规范.md`(队员列语义升级,列数仍是 13)、`docs/使用手册.md`(新增 4.13 团体报名的队员)、
`docs/升级说明.md`(新增 `dev_0.5.6` 一节)。

## 版本
`dev_0.5.5` → **`dev_0.5.6`**(含数据迁移 `0026`);安装器素材同步重生成(照例只动 `brand.bmp` 两张)。
2026-09-14 14:05:48 +08:00

53 KiB
Raw Blame History

报名名单导入规范

这份文件说明报名名单应该做成什么样子、每一列怎么填,用于把各单位报上来的名单一次性导入积分榜系统。 给负责收表、填表的同志看即可,不需要懂系统内部。

配套模板可在系统里直接下载:基础数据 → 报名导入 →「中文表头」/「英文表头」(两个文件列数与列顺序完全一样,只有表头语言不同,按手上表格的样子选)。 小项与组别很多时,同一处还有**「分工作表 · 中文表头 / 分工作表 · 英文表头」**:一个小项组别再抄串——一个小项 × 一个组别一张工作表,表名写成「小项名称@组别名称」,详见第八节。


一、先看懂三件事

  1. 用什么软件做表:Excel 或 WPS 都行,做完存成 .xlsx 或 .csv 都可以(推荐 .csv,系统兼容性最好,不用管编码)。
  2. 表格长什么样:第一行是表头(固定的 13 个列名,中文、英文两套任选其一,见第二节),从第二行开始每人一行。不要合并单元格,不要在表头上方再加标题行、说明行。
  3. 编码不能自己编:表里的「小项编码」「单位编码」「组别名称」必须是系统里已经配好的,照抄系统里的写法。系统里没有的编码,这一行会被跳过并报错。

二、表头(第一行的列名)

一共 13 列。系统同时认两套表头——英文一套、中文一套,两套都能导入,也可以中英混着写(每一列各自认名字,例如英文 event_code 配中文「姓名」)。英文是规范列名:老的英文模板一个字都不用改,照常导入;中文只是给习惯看中文的人用的同义写法。

第 13 列「队伍」是新加的(2026 年 9 月):同一个单位在同一个组别派两支队(羽毛球双打的一队 / 二队那种)时才需要填它;绝大多数表格整列留空就行,填法见第三节的「队伍」。 老表格不用改:表头里没有这一列、整列不写、格子留空,三种情况都合法,系统按「不区分队伍」处理——原来的 12 列一列都不会错位(新的一列加在最后)。

下载模板时按手上表格的样子选:

  • 「中文表头」→ 文件 entries-template-zh.csv
  • 「英文表头」→ 文件 entries-template-en.csv
  • 「分工作表 · 中文表头」/「分工作表 · 英文表头」→ 文件 entries-template-zh.xlsx / entries-template-en.xlsx (一个小项组别一张工作表,见第八节;表头语言与上面两个按钮同一套口径)

单表模板的两个文件列数与列顺序完全一样,只有表头语言不同,示例行也一样。列的先后顺序可以随便调,多出来的列系统会忽略。

英文表头(规范列名) 中文表头(同义写法) 这一列是
event_code 项目编码(也认「小项编码」) 小项编码
category 组别(也认「组别名称」) 组别名称
team_code 单位编码(也认「参赛单位编码」) 参赛单位编码
athlete_name 姓名(也认「运动员姓名」) 运动员姓名;团体项目这一列留空
id_card 证件号(也认「身份证号」) 证件号,可缺省
gender 性别 可缺省
age 年龄 可缺省
bib 号码布 号码布
seed 种子(也认「道次」) 道次 / 种子
heat 批次(也认「批次号」) 批次,可缺省
status 状态(也认「报名状态」) 报名状态
member_names 队员名单 团体项目的队员名单;写号码布才会关联到人(写姓名只当文字)
squad 队伍(也认「队名」「队伍名」) 队名,可缺省;同一个单位在同一组别派两支队时用它区分(留空 = 不区分队伍)

第 13 列 squad(队伍)永远排在最后:它是 2026 年 9 月新增的,加在表尾是为了让手里那些原来 12 列的老表格一列都不会错位(表格少的正是最后这一列)。整列不写、整列留空、表头没有它,三种情况都合法。

同一列只能写一次:一份表里同时出现 event_code 和「项目编码」(或者干脆把同一列写了两遍),会被整份拦下并提示「报名表表头重复」,删掉多余的那一列再导入即可——系统不会替你猜该信哪一列,免得静默丢掉另一列的数据。

表头识别对大小写、首尾空格、全角字母 / 全角空格、文件开头的 BOM 都容错:Event_Code、「项目编码 」、「EVENT_CODE」都认。

下面是逐列要填什么(列名用英文规范名,括号里是中文表头的同义写法):

列名 是否必须 填什么 示例
event_code(项目编码) 必须 小项编码,抄系统里配好的 M100
category(组别) 必须 组别名称(中文,要跟系统里一字不差) 男子30岁以下
team_code(单位编码) 必须 参赛单位编码,抄系统里配好的。两个单位联合参赛(联队)就写 A+B,见第三节 F1;联队写 F1+F2
athlete_name(姓名) 必须 运动员姓名。团体项目这一列留空 张伟
id_card(证件号) 可选 证件号(身份证号)。系统的第一认人依据;一个证件号只能属于一个人 110101199001011234
gender(性别) 可选 性别,只写「男」或「女」 男
age(年龄) 可选 年龄,0–120 的整数 26
bib(号码布) 可选 号码布;证件号为空时按它认人(同一个号码布不能给两个人) 101
seed(种子) 可选 道次 / 种子,随便写或留空 种子1
heat(批次) 可选 批次号:1–999 的整数;留空 = 未分批(不参与算分,见下) 1
status(状态) 可选 报名状态:4 个英文词(大小写都行)或等价的中文别名(见下) registered
member_names(队员名单) 可选 团体项目的队员名单,多人用 / 隔开。写号码布 = 关联到那个人(能拿个人分);只写姓名 = 只当文字 101/102(号码布);张三/李四(仅文字)
squad(队伍) 可选 队名(自由写,例如 一队);留空 = 不区分队伍。同一个单位在同一个组别派两支队就靠它区分,见第三节 一队

「必须」指的是这一列的表头要有。至于每格里能不能留空,看下面第三节逐列的说明。

表头大小写不敏感:写 Event_Code 或 event_code 都认;换成中文表头(项目编码)也认,两套混着写同样可以。


三、逐列怎么填(重点)

下面每一列的小标题写的是英文规范名;用中文表头时列名换成第二节对照表里的中文写法(event_code = 项目编码、category = 组别、team_code = 单位编码、athlete_name = 姓名、id_card = 证件号、gender = 性别、age = 年龄、bib = 号码布、seed = 种子、heat = 批次、status = 状态、member_names = 队员名单),填法完全相同。

event_code 小项编码 —— 必须填

在系统「基础数据 → 大项 / 小项」里给每个小项配的编码,比如 M100(男子100米)、BB(多人抓杆蛇形跑)。 填了系统里没有的编码,这一行会被跳过,提示「小项 XXX 不存在」。

category 组别名称 —— 必须填

填组别的名字,不是编码。比如「男子30岁以下」「男子31岁以上」「女子组」「基层组」「领导组」。

  • 必须和系统里该小项的组别名称完全一致(含标点),否则提示「组别 XXX 不存在」。
  • 这一格留空也可以:系统会自动放到该小项排序最靠前的那个组别。一个单位一个项目只报一个组时,留空能省事;报了多个组别的项目,必须写明。

team_code 单位编码 —— 必须填

在系统「基础数据 → 参赛单位」里给每个大单位配的编码,比如 F1、F2。系统里没有的会提示「单位 XXX 不存在」。 被「彻底删除」的单位,导入时若再次用到它的编码,它会重新出现(复活),这一行照常导入——单位编码是唯一的,系统按编码复用原来那条记录,它以前的报名、成绩与积分都还在。

两个单位联合参赛(联队)怎么写

同一小项组别里,两个单位合起来出一支队参赛时,这一格写两个编码、中间用 + 连起来:

F1+F2
  • 加号左边那个是「主单位」:名次与榜单的归属主体就是它。F1+F2 与 F2+F1 是两条不同的报名(主单位不同),同一组别里只写一条即可;
  • 全角 + 与两侧空格都认:F1+F2、F1 + F2 与 F1+F2 是同一个意思(中文输入法下打出来的常是全角);
  • 默认均分:两个单位各占一半(50% / 50%)。团体第 1 名 15 分 → 两个单位各 7.5 分;奖牌两边各记一枚整枚(联队的金牌,F1、F2 各记 1 枚);
  • ⚠️ 想改成非均分(例如 2:1)不能在表里写:导入表只表达「是哪几个单位」。份额要等导入完到「成绩录入」页点那一行的「单位」格,在「成员单位与份额」弹窗里改(见使用手册 · 4.11);
  • 一个联队最多 5 个单位;成员单位一个都不能写错——写错的那一行会被拦下,其余行照常导入;
  • 加号两边都必须有编码,而且同一个单位不能写两遍。

怎么写会被拦下(逐行报错,其余行照常导入)

写成 报错
F1+ / +F2 / F1++F2 第 N 行:单位编码 F1+ 里有一段是空的:联队要写成两个单位编码用 + 连起来(例如 A+B)
F1+F1 第 N 行:单位编码 F1+F1 里同一个单位出现了两次:联队的每个单位只能写一次
F1+F2+F3+F4+F5+F6 第 N 行:单位编码 F1+F2+F3+F4+F5+F6 里写了 6 个单位:一个联队最多 5 个单位
F1+ZZ(ZZ 不存在) 第 N 行:单位 ZZ 不存在(来自联队编码 F1+ZZ)
ZZ(单个单位,写法没变) 第 N 行:单位 ZZ 不存在

报错都写在行号上,并把你那一格原样打出来——照那句话改那一行即可,不用重传整张表。

导入之后长什么样

  • 联队仍是一条报名,但分与奖牌都按份额记给各成员单位:单位总分榜、单位奖牌榜上 A、B 各有一份;
  • 大屏和导出件里写的是联队的名字:第一分公司+第二分公司联队,报名名单导出的「单位编码」列也回写成 F1+F2(导出的名单可以直接拿去重导,不用手工改回单个单位);
  • 用成员单位筛「报名名单」导出时,也能看到这条联队报名(否则 B 导出自己的名单会以为没派人上场)。

athlete_name 运动员姓名

  • 个人项目:填姓名,必填。
  • 团体项目:这一列留空,表示"这是某个单位的一条团体报名",队员写在 member_names 里。
  • 姓名为空的行,系统只建一条单位报名,不会去建运动员档案。

id_card 证件号 / bib 号码布 —— 有姓名就至少填一个

只要有姓名,证件号与号码布至少要填一个,否则无法确认是哪一个人,这一行会被跳过,提示「填写了 athlete_name 就必须填 id_card 或 bib」。

  • 证件号是系统认人的第一依据:先按证件号找人;证件号为空、或库里的档案还没登记证件号时,再按号码布找;两者都没找到,才按「姓名 + 单位」找(完整顺序见本节的「系统怎么认人」)。
  • 一个证件号在系统里只能属于一个人。表里给的证件号如果已经登记在别人名下,系统会按这个证件号去认那个人,姓名 / 单位对不上就进「冲突」列表让你逐条决定——不会把证件号抢过来,也不会静默改档。证件号填错是最容易认错人的地方,请照抄身份证,不要凭记忆写。
  • 没有身份证的人只填号码布也行(外聘人员、临时工常见):此时系统按号码布认人,下次导入也要带同样的号码布。
  • 同一个证件号在同一份表里重复出现不报错(同一个人报多个组别时本来就会重复):系统当作同一个人,每个组别各落一条报名,并在导入结果里给一条提示「证件号 XXXX 在本表中出现 N 次(同一人报名多个组别)」。但同一小项同一个组别里出现两次就是真重复,会进「冲突」列表,由你决定保留已有还是改用表里这条。
  • 号码布不是唯一标识,但两个人不能共用一个号码布:把同一个号码布给了两个不同的人,这一行会报错并跳过。(同一个人报多个组别时号码布可以重复。)
  • 号码布会同时写进人员档案和报名记录。

gender 性别

只认「男」「女」两个字。留空没问题;写「男性」「女 」等其它写法会被当成没填(不报错,但也不记录)。

age 年龄

0–120 的整数,可以留空。填了「二十六」「26岁」这种会被跳过,提示「age 需要是 0-120 的整数」。

seed 道次 / 种子

自由填写,可以留空。系统只做记录,不参与算分、不影响名次。

heat 批次 —— 可以留空

给同一组别的人分批用的号:填 1–999 的正整数,留空表示「未分批」。现场分批比赛(例如 100 米跑道只有 8 条、一组 30 人要分 4 场跑)时,填上批次,录入员就能在「成绩录入」页按批筛选,只在自己这一批里找人录成绩。

  • 批次不参与算分:名次与积分仍然按「小项 + 组别」整体计算,分批与否不会改变任何分数与名次;批次只是录入 / 展示分组;
  • 同一小项、同一组别里,批次号相同的人就是同一批;批次号不要求连续,也不要求从 1 开始;
  • 格子留空就是未分批,不报错;
  • 填了不是整数、或超出 1–999(例如 第1批、0、1000),这一行会被跳过并提示「heat 需要是 1-999 的整数(留空表示未分批)」,其余行照常导入;
  • 重新上传同一份表会把这一列整条覆盖:表里留空就会把这行原来的批次清掉(见第七节第 2 条)。

不想在报名表里写批次也行:导入后到「成绩录入」页勾选若干行点「设为第 N 批」,或用「一键均分」按人数自动分批(见使用手册 · 4.1)。

status 报名状态 —— 英文词或中文别名都认

大小写不敏感(registered、Registered、DNS 都认),也可以直接写中文:

英文写法 等价的中文别名 含义
registered 正常 / 正常参赛 / 参赛 正常参赛
scratched 退赛 / 弃赛 / 请假 退赛 / 弃赛
dq 取消资格 / 犯规 取消资格
dns 未出场 / 未到 / 缺席 未出场

留空 = registered(正常参赛),拿不准就留空,特殊情况再填。

真正认不出的写法(例如「已报到」「未参赛」):这一行会被跳过,并给出中文行级提示,其余行照常导入。

第 12 行:status「已报到」无法识别,只能填 registered / scratched / dq / dns(或留空)

member_names 队员名单

团体项目用这一列写队员,多人之间用 /、, 或 , 分开:

张三/李四/王五
张三,李四,王五
  • 团体项目可以只报单位、不写队员(这一列留空即可),队员名单以后还能补。
  • 系统界面里会把这条名单显示成「张三、李四、王五」。

想让队员真正「上场」——这一列要写号码布

这一列有两种内容,系统按段(用 /、,、, 分开的每一段)分别处理:

这一段写的是 系统怎么处理
某个运动员的号码布(例如 101、A001) 认成那个人:把这条团体报名与他关联起来(这一格也原样保留成文字)。关联上的队员才能拿个人分、上个人积分榜、拿个人奖牌(该项目配了「个人通道」时)
只有姓名(例如 张三) 只当文字:名单照常显示,不会关联到人(姓名可能重名,认错的分已经上了榜——所以系统故意不按姓名认人),也不报错
101/102          ← 推荐写法:号码布,两个队员都能拿到个人分
张三/李四         ← 只当文字:名单会显示,但这两个人没有身份(拿不到个人分)
101/李四          ← 混着写也行:101 关联到人,李四只当文字

几条要记住的:

  • ⚠️ 号码布要单独成一段:张三(101) 这种「姓名和号码布写在同一段」的写法认不出人(系统只拿整段去比对号码布),要写成 张三/101,或者干脆只写 101。推荐只写号码布;
  • 号码布是运动员的唯一标识,不看单位:号码布认到的是别的单位的人时,照常关联,并在导入结果里给一条提示让你核对号码布是不是写错了(不是冲突、不拦截);
  • 认不出人的段不报错:没录档案的临时队员、写错的名字,都只当文字留在名单里(这条报名仍然只有单位、没有队员身份);
  • 同一格里同一个号码布写两次:只关联一次,并给一条提示(同一条报名里一个人只占一个位置);
  • 个人行(填了姓名的那几行)这一列只当文字:个人报名自己就是那个人的身份,不存在「队员」。这一格里写了号码布也不关联,只会给一条提示;
  • 一条报名最多关联 30 个人:超过的那一行会被整行拦下(多半是把号码布写错了位置);
  • 老数据的人要补挂:升级前已经报好的团体报名,如果当时只写了姓名(或连姓名都没写),升级时会尽力按「号码布 → 姓名 + 单位」回填一次;回填不上的,要重新导入一份写着号码布的名单,或到录入页手动挂人(见使用手册 · 4.13)。

squad 队伍 —— 可选(表的最后一列)

这一列只在「同一个单位在同一个组别派了不止一支队」时才需要填,比如羽毛球双打:一个单位报了一队、二队,两队可能各占一个名次。

一队
二队
青年队
  • 队名随便写(一队 / 二队 / 青年队 / A 组 都行),就是给现场看的一个标签;
  • 留空 = 不区分队伍:一个单位在这个组别只有一支队(绝大多数情况)时,整列留空、整列不写、表头里没有这一列,三种都合法,与升级前的行为完全一样;
  • 只对团体项目有效:这一列只认「姓名那一格留空」的团体行。个人行(填了姓名的行)如果也填了队名,这一格不会写进库里,导入结果里会给你一条提示:第 N 行填了队伍「一队」,但这一行有运动员姓名、按个人报名处理:队伍只对团体报名(不填姓名那几行)生效,这一格没有写进库里;
  • 同一个单位、同一个组别、同一个队名只能有一条(要派两支队就写两个不同的队名)。撞上了会逐行拦下并说清是哪个单位、哪个队(见第六节);
  • 队名只影响显示与查重,不影响成绩与算分:两个队的成绩、名次、积分各算各的,最后都汇总到同一个单位的总分上;显示上写成「单位名 + 队名」,例如 第一分公司二队(队名留空时仍然只写 第一分公司)。单位总分榜 / 单位奖牌榜 / 个人积分榜上不写队名(分与牌本来就归到单位);
  • 队名改起来不用删掉重建:到「成绩录入」页点那一行的「单位」格,在弹窗里改(见使用手册 · 4.12)。⚠️ 改完记得把报名表里的队名也改成一样——以后再导一份还写着旧队名的表,会因为认不出来而新增出旧队名那一条。

系统怎么认人(证件号 → 号码布 → 姓名 + 单位)

有姓名的行,系统按下面的顺序认人。证件号是唯一标识,号码布是它的替补,最后才靠「姓名 + 单位」兜底回填:

情况 系统怎么处理
表里的证件号在系统里已有 认作同一个人;若表里的姓名 / 性别 / 年龄 / 单位 / 号码布与他的档案对不上,会进「冲突」列表等你逐条决定(保留哪一侧),该行本轮不写入
证件号为空,或系统里还没有人有这个证件号 再看号码布:号码布在系统里已有 → 认作同一个人(差异同样进「冲突」列表)
证件号与号码布都没找到 按「姓名 + 单位」找:
· 找不到 → 新建人员档案;
· 恰好一人、两边给的证件号(或号码布)对得上或有一边没填 → 认定是同一人,表里给的证件号 / 号码布 / 年龄会回填到他的档案(不算冲突);
· 恰好一人、但他已有另一个证件号(或号码布)且与表里不同 → 按「同名的另一个人」新建档案,并在导入结果里单独列出(姓名 / 单位 / 原证件号或号码布 / 新证件号或号码布)提醒你核对,不拦截、不报错;
· 多人 → 分不清是谁,进「冲突」列表等逐条决定

「同名的另一个人」多半是证件号(或号码布)写错了。收到这条提醒时,先核对表里那个号是不是本人:是别人(真的同名),确认无误即可;是本人写错了,到「基础数据 → 运动员」把档案里的号改回来,并把多出来的那条新档案删掉。


四、六个完整例子

例 1:个人项目(七单位 × 若干人)

表头那一行照抄,下面每人一行。假设 M100 是按年龄分组的男子100米,F1/F2 是两个单位:

event_code category team_code athlete_name id_card gender age bib seed heat status member_names
M100 男子30岁以下 F1 张伟 110101199001011234 男 26 101 1 registered
M100 男子31岁以上 F1 李强 110101198505054321 男 41 102 1 registered
M100 女子组 F2 王芳 女 202 2 registered
W100 女子组 F2 王芳 110101199203031234 女 34 202 2 registered

要点:同一个人报多个项目,就写多行(如上面的王芳报了两项);每行的 event_code 不同。

例 2:团体项目(七单位 × 两组)

BB 是「多人抓杆蛇形跑」,七家单位各出基层组和领导组两支队伍:

event_code category team_code athlete_name id_card gender age bib seed heat status member_names
BB 基层组 F1 registered 张三/李四/王五/赵六
BB 基层组 F2 registered 钱七/孙八
BB 领导组 F1 registered 周九
BB 领导组 F3 registered

要点:athlete_name 一列全部留空;不参赛的单位不写行(不写就是没报名);最后一行是不写队员的纯单位报名,也是允许的。

例 3:「个人 + 团体」项目

这类项目(比如团体引体向上)按个人报名填:每人一行、填姓名和单位。系统会自己算两份成绩——个人的名次分记在个人身上,团体分按各队成员的平均成绩排名后算给单位。不需要再单独写团体行。

例 4:两个单位联合参赛(联队)

本届运动会 6 项球类比赛里,F2 与 F5 因参赛人数不足,合并出一个队参赛。BALL 是篮球、男子组:

event_code category team_code athlete_name id_card gender age bib seed heat status member_names
BALL 男子组 F1 registered 张三/李四
BALL 男子组 F2+F5 registered 王五/赵六/钱七
BALL 男子组 F3 registered 孙八

要点:

  • 写一条 F2+F5 的报名就够了,不要 F2、F5 各写一条(那会变成两队人上场);也不要新建一个叫「F2F5」的单位;
  • F2 在加号左边,所以 F2 是主单位:这一条的名次与榜单以它为主体。写成 F5+F2 是另一条报名(主单位变成 F5),同一组别里只写一种;
  • 默认均分:这条成绩拿到的分,F2 与 F5 各一半(团体第 1 名 15 分 → 各 7.5 分);奖牌两边各记一枚整枚(一块金牌,F2 榜上 1 枚、F5 榜上 1 枚);
  • 要改成 2:1 这类非均分:不能在这张表里写,导入后到「成绩录入」页点那一行的「单位」格改(见使用手册 · 4.11);
  • 大屏与导出件里写的是 第二分公司+第五分公司联队,报名名单导出的「单位编码」列回写成 F2+F5(可以直接拿去重导)。

例 5:同一个单位派两个队(团体项目多队)

羽毛球双打,F1 派出「一队」和「二队」两支队伍,两队都可能拿名次。BD 是羽毛球双打、男子组:

event_code category team_code athlete_name id_card gender age bib seed heat status member_names squad
BD 男子组 F1 registered 张三/李四 一队
BD 男子组 F1 registered 王五/赵六 二队
BD 男子组 F2 registered 孙八/周九
BD 男子组 F3 registered 吴十/郑十一

要点:

  • 同一个单位、同一个组别写两行,靠**最后一列「队伍」**区分开:一队、二队。一个单位两个队都进前三时,这个单位会拿 2 枚牌(两支队各算各的名次);
  • F2、F3 只有一支队,队伍列留空即可(也可以整列不填、或表头里干脆没有这一列);
  • 列都写对了才有多队的效果:两行的 event_code / category / team_code / squad 必须都不一样的那一格正好是 squad——如果两行队名也写成一样的(都写 一队),第二行会被拦下(「同一个单位同一个组别的同一个队只能报一条」);如果两行队名都留空,第二行也会被拦下(「一个单位在一个组别只能有一条不分队的报名」);
  • 显示上写成 第一分公司一队 / 第一分公司二队(单位名后面直接跟队名,不加括号不加分隔符);单位总分榜、单位奖牌榜、个人积分榜上只写 第一分公司(两队的分数都已经算进这个单位的总分);
  • 报了之后想改队名不用删掉重建:到「成绩录入」页点那一行的「单位」格,在弹窗里改(见使用手册 · 4.12)。⚠️ 改完记得把这张表里的队名也改成一样——以后再导一份还写着旧队名的表,会新增出旧队名那一条报名(导入是按「小项 + 组别 + 单位 + 队名」认人的)。

例 6:同一支队里的两个队员(队员名单写号码布)

BD 羽毛球双打、男子组,F1 的「一队」是张三(号码布 101)与李四(号码布 102);F2 那支队只报了单位、没写队员:

event_code category team_code athlete_name id_card gender age bib seed heat status member_names squad
BD 男子组 F1 registered 101/102 一队
BD 男子组 F2 registered

要点:

  • 队员名单里写号码布,系统才认得出队里坐着谁:101/102 → 这条报名关联到张三、李四两个人。该项目配了「个人通道」时,两个人各拿一份完整的个人分、各一枚个人奖牌,都上个人积分榜(是「每人各一份」,不是两个人分同一份);
  • 单位总分与单位奖牌不受影响:上不上的开关在「计分通道」里(计入单位总分 / 个人奖牌是否并入单位榜)。双打现场通常都设成「不计入」——个人分给到人,单位那本账不变;
  • 只写姓名(张三/李四)也合法:名单照常显示,但这两个人没有身份——拿不到个人分、上不了个人榜,也不报错。要让他们上榜,把这一格改成他们的号码布(101/102),或到录入页手动挂人(见使用手册 · 4.13);
  • ⚠️ 号码布要单独成段:写成 张三(101)/李四(102) 认不出人(系统拿整段去比号码布)。要「名字 + 号码布」都看得见,就先写号码布(101/102)——导出件与录入页会自己显示成 张三(101)、李四(102);
  • 号码布写错成别的单位的人:照号码布关联,并给一条提示让你核对(号码布是唯一标识,系统不按单位猜);
  • F2 那一行留空:只报单位、没有队员身份,这是合法的,也是升级前所有团体报名的样子。

五、导入前请先检查(自检清单)

  • 第一行是那 13 个列名(英文一套、中文一套都行,也可以中英混着写,见第二节),没有被合并单元格、同一列没有写两遍
  • 表头上方没有多余的标题行或空行
  • event_code、team_code 都是从系统里抄的编码,没有空格
  • category 与系统里的组别名一字不差
  • 个人行都有姓名,且都有证件号或号码布
  • 证件号优先填、填准(它是系统认人的第一依据,填错最容易认错人)
  • 一份表里没有把同一个号码布给两个不同的人(同一个人报多个组别时可以重复)
  • 同一小项同一个组别里没有把同一个人写两遍(真重复会进「冲突」列表等决策)
  • 每个证件号在系统里只属于一个人,别和别人的档案重号
  • status 只用那 4 个英文词(大小写都行)或第三节列的中文别名,不写别的词;拿不准就留空
  • heat 要么留空,要么是 1–999 的整数(不参与算分,只是录入分组)
  • 联队(两个单位联合参赛)写的是 F1+F2 这种形状:加号两边都有编码、同一个单位没写两遍、成员不超过 5 个;加号左边那个是主单位(见第三节)
  • 「队伍」列(最后一列)只在同一个单位派了不止一支队时才填:两队写了两个不一样的队名(都写一样或都留空会被拦下);只有一支队的单位留空即可;个人行(有姓名的行)没有填队名(填了也不会写进库里,只给一条提示)
  • 要让队员拿到个人分:member_names(队员名单)里写的是单独的号码布(101/102),不是姓名、也不是 张三(101) 这种混写;号码布抄对(写错会关联到别人,系统会提示但不会拦)
  • 全表没有因为"怕麻烦"把某些列删掉——表头 8 个必须列一个都不能少(哪怕整列是空的)
  • 用的是分工作表模板时:每张工作表的名字都是「小项名称@组别名称」、没有多余的工作表;「项目编码 / 组别」两列要么整列留空、要么与表名一字不差(见第八节)

六、常见报错怎么办

提示 原因 怎么办
第 N 行:event_code / team_code 必填 这两格至少有一格是空的 每行都必须有小项编码和单位编码
报名表缺少列 xxx(yyy) 表头少了这一列,或者列名有错别字 / 上面多了一行标题行。括号里的中文与前面的英文是同一列的两种写法(例:报名表缺少列 athlete_name(姓名)) 对照第二节的对照表逐字核对(中英两套都认,混着写也行);最稳的是重新下载模板,把数据粘进去
报名表表头重复:第 1 行里同一列出现了两种写法 同一列在表头里写了两次(例如既有 event_code 又有「项目编码」)——两列都可能带着数据,系统不知道该信哪一列 删掉多余的那一列(同一列只留一种写法),再重新上传
中文变成乱码 编码问题,现在已修好:Excel 另存的 GB18030 / GBK / UTF-8(带 BOM) / UTF-16(带 BOM) 都认 直接传原文件即可,不用转码。唯一例外见下面两条
报名表编码无法识别:文件里混有无法解码的字节 这个文件本身坏了(复制粘贴、转换工具、半路截断都会这样):坏字节会被静默解成 �,导进去就是一串乱码人名,比报错更危险,所以系统直接拦下 用 Excel 打开原文件,另存为「CSV UTF-8」后再上传;如果另存后仍报同一句,说明原文件已经损坏,请找原始数据重新导出一份
文件像 UTF-16 但缺 BOM 用记事本「另存为 Unicode」会产出不带 BOM 的 UTF-16;这种文件以前会被误报成「缺少列 event_code」,指向完全错误的方向 多数情况系统能自动认出字节序并正确导入;仍报此提示时,用 Excel 另存为「CSV UTF-8」
无法解析 CSV:表格里多半有没配对的双引号 格子里手工写了双引号,或只有一个引号没配对 让 Excel 重新另存一次(引号由 Excel 按规则加,别手工写);确实需要引号的,写成 "" 转义
第 N 行:小项 XXX 不存在 event_code 写错,或该小项还没在系统里配 到「基础数据 → 大项 / 小项」核对编码;没配的先配
第 N 行:单位 XX 不存在 team_code 写错,或该单位还没配 到「基础数据 → 参赛单位」核对
第 N 行:单位 ZZ 不存在(来自联队编码 F1+ZZ) 这一格写的是联队 F1+ZZ,其中 ZZ 没配 核对加号右边那个编码(括号里把整格原样打出来了,一眼看出是哪一段没对上);不改联队写法的话,就照单单位的办法核对编码
第 N 行:单位编码 F1+ 里有一段是空的:联队要写成两个单位编码用 + 连起来(例如 A+B) 加号有一边是空的(F1+、+F2、F1++F2 都是这一条)。多半是填一半或多了个加号 补上缺的那个编码,或删掉多余的加号;联队至少两个单位
第 N 行:单位编码 F1+F1 里同一个单位出现了两次:联队的每个单位只能写一次 同一个单位在联队里写了两遍(F1+F1) 一个单位只写一次;两个单位联合参赛就是 F1+F2
第 N 行:单位编码 … 里写了 6 个单位:一个联队最多 5 个单位 加号太多、成员超过 5 个 一个联队最多 5 个单位;现场最多见过三个单位合并,超过 5 个多半是这一格填错了东西(例如整格都是加号)
第 N 行:单位 A 在本组别已经有一条队伍「一队」的报名:「同一个单位同一个组别的同一个队」只能报一条;要派两个队请换一个队伍名(例如 二队) 同一个单位、同一个组别、同一个队名写了两遍(两支队要写两个不同的队名) 把其中一行的「队伍」列改成另一个队名(一队 / 二队);如果本来就是同一支队、只是想把队员名单补全,改完重导不会新增(同一单位同一队名是更新)
第 N 行:单位 A 在本组别已经有一条不分队的团体报名:队伍列留空就是不区分队伍,一个单位在一个组别只能有一条;要派两个队请在队伍列分别写清(例如 一队 / 二队) 两行的队伍列都留空(等于都说「这个单位在这个组别只有一支队」),或者库里以前报过一条不分队的、这行又留空 要派两支队就在两行的「队伍」列分别写 一队 / 二队;确实只有一支队,就把多余的那一行删掉
第 N 行:单位 A 在本组别已经有这个人的报名:同一个人在同一组别只能报一条,请把重复行合并后再导入 个人行(填了姓名的行)在同一个小项同一个组别里写了两次。个人报名按「人」唯一,队伍列不参与(也不影响)这件事 把两行合并成一行;同一个人要参加两个项目就写在不同小项里,不能靠队名分成两条
第 N 行:队员名单里认出了 31 名运动员,超过一条报名最多 30 人:请检查这一格是不是把号码布写错了位置 这一格里能对上号码布的段超过 30 个(多半是把别的内容写进去了) 核对这一格:一条报名最多 30 个队员;只有一支队时这一格留空即可。这一行整行未导入
第 N 行:队员名单里的号码布 101 写了两次,只关联一个人(同一条报名里一个人只占一个位置) 同一格里同一个号码布写了两次 不算错误(照常导入、只关联一次);把这一格里重复的那个号码布删掉即可
第 N 行的队员名单里有 2 个号码布认得出人,但这一行有运动员姓名、按个人报名处理:队员只对团体报名(不填姓名那几行)生效,这一格只作文字名单保留,没有关联到人 个人行(有姓名的行)里写了号码布。个人报名自己就是那个人的身份,不存在「队员」 不算错误(这一行照常导入,只是没有建立队员关联);团体报名的那一行才需要写号码布
第 N 行:队员名单里的号码布 205 是单位 F3 的 李四,本行报名挂在单位 F1 名下 —— 号码布是运动员的唯一标识,已按它关联为队员,请核对号码布是否写错 号码布认到的是别的单位的人。号码布是唯一标识,系统照它认、不看单位 先核对号码布有没有抄错:抄错了改成正确的号码布;确实就是借调/跨单位的人,这条提示可以忽略(关联已经生效)
(没有报错,但名单里的人上不了个人榜) 队员名单里写的是姓名(例如 张三/李四),或号码布写成了 张三(101) 这种「姓名 + 号码布写在同一段」的形式 —— 系统拿整段去比号码布,认不出人 这是正常行为(不报错):把这一段改成单独的号码布(101/102),队员才会被关联、才会拿到个人分。要「姓名 + 号码布」都显示,直接写号码布即可(导出件与录入页会显示成 张三(101))
第 N 行:组别 XXX 不存在 组别名和系统里不一致,或该小项还没有这个组别 到「基础数据 → 组别」核对名称(注意别多字少字)
第 N 行:小项 XXX 没有组别 该小项一个组别都没配 先在「组别」里配好,再导入
第 N 行:填写了 athlete_name 就必须填 id_card 或 bib 个人行缺两项标识 补证件号或号码布;确实都没有的,请先在「运动员」里登记
第 N 行:号码布 XX 在报名表内重复出现 同一份表里,两个不同的人用了同一个号码布 删掉重复行或改成各自的号码布。(同一个人报多个项目时号码布可以重复;不同的人不能共用。)
第 N 行:证件号 X 已被另一个人占用(姓名 Y,号码布 Z) 表里给的证件号已经登记在另一个人名下,而这一行又没法按证件号认到那个人(例如同时又给了别人的号码布) 先核对证件号是不是抄错了:不是这个人的,把这一格留空即可(只填号码布也能导入);是他的,先到「基础数据 → 运动员」把另一条档案里的证件号清掉或改对,再重新上传这一步列出的行
第 N 行:status「xxx」无法识别 status 填了系统不认的词(4 个标准词以外的英文,或第三节没列的中文) 改成 registered / scratched / dq / dns(大小写都行)或第三节列的中文别名,也可以留空(= 正常参赛);改完重新上传
第 N 行:heat 需要是 1-999 的整数(留空表示未分批) heat 填了非整数、0、负数或超过 999 的值(如 第1批、一组、1000) 改成 1–999 的整数,或者整格留空(= 未分批);批次只影响录入分组,不参与算分
提示「冲突」,人员没有写入 按证件号(或号码布、「姓名 + 单位」唯一命中)的人在系统里已有记录,但姓名 / 证件号 / 性别 / 年龄 / 单位 / 号码布跟表里对不上 在导入结果里逐条选「保留已有数据」或「使用新数据」,选完再提交
文件传不上去 超过 32MB 拆分上传,或改用 xlsx
工作表「XXX」没能定出是哪个小项、哪个组别 这是一份分工作表模板(有工作表名里带 @),但工作簿里混进了别的表(备注表、说明表),或者表名写得不合规 删掉多余的工作表,或把表名改成「小项名称@组别名称」(见第八节);只有一张表、数据都在里面时,把它存成 CSV 用单表模板导
本行项目编码 XXX 不是工作表名里那个小项 / 本行组别 XXX 与工作表名里的组别不一致 分工作表模板里范围由工作表名决定,而这一行的「项目编码 / 组别」两格又填了别的值 把那两格清空(留空即按工作表名走),或改成与工作表名一致的值
工作表「XXX」是隐藏表,按约定不参与导入 工作簿里有隐藏工作表 要在它里面导数据就先取消隐藏并改名成「小项名称@组别名称」,否则忽略这条提示即可

七、导入以后

  1. 系统会显示新增 / 更新 / 跳过的数量:
    • 新增:这次新建的报名;
    • 更新:这个人本来就有这个项目的报名,用表里的信息覆盖了(不会产生重复报名);
    • 跳过:没能导入的行,会带着行号列出来,改好那几行重新上传即可。
    • 另有一份**「按同名的另一个人新建了档案(证件号 / 号码布不同)」清单,单独列出姓名 / 单位 / 原证件号或号码布 / 新证件号或号码布。它不是错误:这些行已经导入成功**,只是提醒你核对证件号与号码布有没有写错(见第三节的「系统怎么认人」)。
    • 同一证件号在本表里出现多次时,还会给一条**「证件号 XXXX 在本表中出现 N 次(同一人报名多个组别)」**的提示:这是正常的,只提醒你别把不同的人写成同一个证件号。
  2. 重复上传同一份表是安全的,不会把名单变成两份。改完再传一遍就行。
    • ⚠️ 但要注意「更新」是整条覆盖:表里空着的格会把系统里原来的值清掉(队员名单、道次、号码布、批次都会被清空),status 空着会被重置成「正常参赛」。如果之前手工调整过某些人的状态或批次,重传前请在表里把 status、heat 写清楚。
  3. 名单导入后,到「成绩录入」里录成绩、发布,积分榜就会自动更新。
  4. 被「彻底删除」的人,导入时会以新人员建档:管理员彻底删除某个人时,他的档案连同他名下的报名与成绩会一起从库里删掉;之后表里再出现同一个证件号(或同一个号码布、同一「姓名 + 单位」),系统匹配不到旧档案,会把他当作新人员重新建档——名单里多出一条「以前删过的人」通常就是这么来的。新档案是全新的,他以前的报名、成绩与积分不会回来,需要重新录。
  5. 被「彻底删除」的单位则相反,导入时会「复活」:管理员彻底删除某个单位,只是把它从单位列表里移除,它的报名与成绩一条都没删;表里再出现这个 team_code,系统按编码复用原来那条单位记录,清掉删除标记并让它重新出现在列表里,原有的报名、成绩与积分都还在,也不会新建第二个同名单位。
  6. 别一口气连传几十次:写操作限 120 次/分钟/用户,超了会返回「操作过于频繁,请稍后再试」。正常一次导入只算一次;真被限了就等一分钟再传,不要连点。

八、分工作表模板(一个小项组别一张表)

前面几节讲的都是单表模板:一份表装下全部报名,「项目编码」与「组别」两列每行都要抄一遍。 小项一多(几十个小项 × 几个组别),抄这两列又累又容易串行——所以系统还提供一种 分工作表模板(xlsx):一个小项 × 一个组别 = 一张工作表,范围写在表名上,数据区只填人。

两种模板都能导入,谁也替代不了谁:单表 CSV 老填表人照旧用,分工作表模板给「一个小项组别再抄串了」的场合。 「基础数据 → 报名导入」里四个下载按钮分别对应:中文表头 / 英文表头(单表 CSV)、 分工作表 · 中文表头 / 分工作表 · 英文表头(xlsx)。

8.1 工作表怎么命名

规则 说明
表名 = 小项名称 @ 组别名称 例如小项「100 米跑」+ 组别「男子组 30岁以下」→ 工作表名 100 米跑@男子组 30岁以下
用的是名称,不是编码 就是「基础数据 → 大项 / 小项」里的小项名、「组别」里的组别名,一字不差
一张表只能对一个组合 一个小项组别一张表;两列都不用填——范围由表名说了算
表名里不能有 @ 以外的花样 : \ / ? * [ ] 会被系统自动换成同形的全角字符(Excel 不允许工作表名里有它们)

小项名称与组别名称里禁止使用 @(全角 @ 也不行)。 理由是它就是表名里的分隔符: 名字里再出现一个 @,系统就分不清哪个 @ 是分隔符、哪一个是名字的一部分。

  • 界面(新建 / 编辑小项、编辑组别)会当场拦下并说明原因;
  • 规则包里的小项名同样拦;服务端接口也拦(改接口、导 Excel 都绕不过去);
  • 已经存在的历史名字里若带 @:不影响任何报名、成绩与积分,但分工作表模板会生成不出来—— 下载时会明确告诉你「哪一个小项 / 组别带 @,请先改名」,改名后再下载即可(改名不丢数据)。

8.2 数据怎么填

  • 每张工作表第 1 行就是表头(与单表模板同样的 13 列、中英两套都认),从第 2 行开始填人;
  • 「项目编码」「组别」两列可以整列留空——表名已经说明了是哪个小项、哪个组别; 一旦填了,就必须与表名一致,不一致的那一行会报错并跳过(系统不猜、也不会挑一个用);
  • 其余列与单表模板完全一样(第三节逐列说明照样适用);
  • 下载下来的模板自带「联队怎么写」的说明:分工作表模板里,「单位编码」表头那一格有单元格批注(鼠标停上去弹出,右边带一个小红三角),该列每一格还有输入提示(点中格子就弹出来);中文表头、英文表头各一份,内容就是 A+B 这套写法(加号左边是主单位、积分平均分、奖牌两边各记一枚)。说明只挂在批注与输入提示上,不占任何一格数据、也不改表头与列序——填好的表原样传回来照样导入;
  • 只填了表头、没填人的那张表会被跳过并给一条提示(= 这个组别没人报名),其余表照常导入;
  • 不要在工作簿里加「说明」之类的工作表:只要工作簿里有一张表名带 @,整份文件就按分工作表模板处理, 其它表名(例如 Sheet1、备注)必须也是「小项名称@组别名称」的形状,否则整份拒绝并点名是哪张表—— 静默跳过意味着你填在第 3 张表里的几十行数据无声消失,结果面板上却还显示「导入成功」。

8.3 表名太长、或者两个组合撞名了怎么办

Excel 对工作表名有硬限制:最长 31 个字符,同一份工作簿里不能重名。系统的处理是确定的,不用你操心:

  • 太长:小项名与组别名各保留开头的一段(小项名优先保留,组别名至少留 8 个字符),拼起来不超过 31 字符。 截断后的表名仍是原名的一段开头(保留头部、去掉尾巴),人一眼能认出是哪一项:小项名 第三届全国职工运动会田径比赛男子甲组100米跑决赛 + 组别名 30岁以下公开组,算出来是 第三届全国职工运动会田径比赛男子甲组100米@30岁以下公开组(小项名留下 22 个字符,组别名留下 8 个);
  • 撞名:截断后如果两张表名字一样,后一张会自动加 (2)、(3) 后缀(Excel 里重名会让后一张把前一张覆盖掉,数据无声消失,所以这一步必须做);
  • 下载下来的模板里这些名字是最终名字,照原样填、原样传回来即可;不要手工改工作表名,改了就对不上号了。

小项或组别改过名字(或改了截断规则之后重新下载)时:旧模板里的表名对不上新名字,导入会报 「工作表『XXX』没能定出是哪个小项、哪个组别」。这时重新下载一份模板、把数据粘过去最稳。

8.4 与单表模板的关系

单表模板(CSV / XLSX) 分工作表模板(XLSX)
文件形态 一张表装全部报名 一个小项组别一张工作表
范围从哪来 每行的「项目编码 / 组别」两列 工作表名(「项目编码 / 组别」可留空)
表名限制 随便(Sheet1、报名表 都行) 必须「小项名称@组别名称」
多张工作表的文件 只读第一张,其余在导入结果里提示「没有读」 每张表各导各的
适合 零散补报、小规模、沿用老表格 小项组别多、按项目分工填表

两种模板解析口径完全一致:表头、认人顺序、冲突处理、行级报错都共用同一套代码, 只有「范围从哪来」这一点不同。


九、给填写人的最短提示(一页版)

  1. 用系统里下载的模板(中文表头 / 英文表头都能用,见第二节),第一行不要动、同一列不要写两遍;
  2. 一个人一行;一个人报几项就写几行;
  3. event_code(小项)、team_code(单位)、category(组别)照抄系统里配好的,不自己编;
  4. 每人要有证件号或号码布,至少一个;证件号是系统认人的第一依据(有就优先填、填准、别和人重号);没有证件号时号码布顶替它认人,号码布也不能给两个人;
  5. 团体项目:姓名列留空,队员写进 member_names,多人用 / 隔开——写号码布(101/102)才会关联到人、才拿得到个人分,只写姓名就只是文字名单;
  6. 拿不准的列留空,不要写「无」「/」「—」这类符号;
  7. 表里不要合并单元格、不要加标题行、不要插图;
  8. 填完先对着第五节的清单自查一遍,再发给收表人;
  9. **批次(heat)**可以不填;要分批比赛就填 1–999 的整数,它只影响录入时怎么分组找人,不影响成绩与名次;
  10. 两个单位联合参赛(联队):team_code 那一格写 F1+F2(加号左边是主单位,默认均分,最多 5 个单位),不要新建一个「联队单位」、也不要两个单位各写一行;非均分(例如 2:1)要在导入后到「成绩录入」页点那一行的「单位」格改;
  11. 同一个单位派两支队(羽毛球双打的一队 / 二队那种):在**最后一列「队伍」**里分别写队名(一队 / 二队);只有一支队的单位这一列留空,整列不写也行。个人项目不用管这一列;
  12. 存成什么格式:Excel →「另存为」→「CSV UTF-8 (逗号分隔) (*.csv)」最稳;中文 Excel 默认的「CSV (逗号分隔)」也能用。别用「Unicode 文本」(UTF-16),别手工改名或把两个文件拼起来,也别在格子里手写双引号(让 Excel 自己加)。

一句话:下载模板 → 只往下面粘数据 → 另存为 CSV UTF-8 → 上传。中间任何一个"顺手改一下"都可能让整份表被拦下。