主人反馈:导出页「报名名单」卡片导出的表格与导入模板对不上,没法拿回去重导。
核对属实(旧导出是给人看的报表):列序与 importColumns 不同、缺「种子 / 队员名单 / 队伍」
三列、姓名列被拼成「姓名(号码布)」、队名拼在单位名后面、状态列写「已退赛」而
normalizeImportStatus 不认 —— 整体错位 + 状态列报错,重导必炸。
- 新增 GET /api/export/entries-import.xlsx?format=flat|sheets&lang=zh|en&<四个筛选>
· flat(缺省)= 所有行汇总在一张工作表;表名不含 @(导入侧见到带 @ 的表名就整份按
分工作表模板解析,汇总表定不出「小项@组别」会被拒)
· sheets = 按「小项@组别」分工作表,表名走 entrySheetName(与模板、导入解析三处同源,
31 字符截断与撞名去重都跟着一起走)
· 权限与筛选参数与 /api/export/entries.xlsx 完全一致(访客可读);空结果回 200 + 只有表头
· 列序不写常量:按 importColumns 逐列取值,表头走 entryTemplateHeader(lang),
加列/改序时测试当场红(TestEntryImportRecordCoversImportColumns)
- 取值口径(重导的关键):团体行的「姓名」留空、队员写「队员名单」列(中文逗号分隔;
以库里 token 为底,再补上 entry_athletes 里后加的队员号码布,只增不减)、
队伍独立成列、状态写导入器认的四个中文说法(正常参赛/退赛/取消资格/未出场)、
联队照旧写 A+B、未分批留空、证件号/性别/年龄来自运动员档案(团体行空)
- 新增 internal/export/entries_import.go(读库层,与报表导出同源 SQL、取值口径刻意不同)
与 internal/httpapi/entries_import_export.go(工作簿组装 + handler)
- 原有报表导出(/api/export/entries.xlsx 与 internal/export/entries.go)一个字没动;
导出页新增两个按钮与中文/英文表头选择(只影响这两个导入格式)
测试:往返测试把导出件直接喂回报名导入解析器,flat 与 sheets 各断言四条(解析零错误 /
行数与 13 列逐项一致 / 团体行没被变成个人报名 / 两种格式都跑);另做变异验证 —— 状态改回
「已退赛」、给团体行填姓名,守卫当场变红。四套自检 ×2 全绿(finalcheck_0514.log:
前端 996 例 / Console 96 例 / 服务端 16 包,EXIT=0)。
无数据库迁移;已有成绩、名次与榜单不变。
文档:使用手册 §11.1(并订正「不要拿导出件重导」的旧话)、报名名单导入规范 新增第九节、
升级说明 新增 dev_0.5.14、常见问题 新增 Q104。
555 lines
62 KiB
Markdown
555 lines
62 KiB
Markdown
# 报名名单导入规范
|
||
|
||
> 这份文件说明**报名名单应该做成什么样子、每一列怎么填**,用于把各单位报上来的名单一次性导入积分榜系统。
|
||
> 给负责收表、填表的同志看即可,不需要懂系统内部。
|
||
>
|
||
> 配套模板可在系统里直接下载:**基础数据 → 报名导入 →「中文表头」/「英文表头」**(两个文件列数与列顺序完全一样,只有表头语言不同,按手上表格的样子选)。
|
||
> 小项与组别很多时,同一处还有**「分工作表 · 中文表头 / 分工作表 · 英文表头」**:一个小项组别再抄串——**一个小项 × 一个组别一张工作表**,表名写成「小项名称@组别名称」,详见第八节。
|
||
|
||
---
|
||
|
||
## 一、先看懂三件事
|
||
|
||
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](./使用手册.md#411-联队两个单位合并参赛));
|
||
- **一个联队最多 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` 里。
|
||
- 姓名为空的行,系统只建一条单位报名,不会去建运动员档案。
|
||
|
||
> ⚠️ **这一格「填了 / 没填」就是系统区分「个人报名」和「团体报名」的唯一判据**——最容易踩的坑:把团体报名的队员姓名填在了这一列。填了就按**个人报名**处理,那一行的「队伍」「队员名单」都**不会生效**(只会得到一条提示)。**团体报名请把这一列留空**,队员写进[「队员名单」](#member_names-队员名单)。
|
||
|
||
#### 个人报名 vs 团体报名:同一条表里怎么填
|
||
|
||
同一份表里两种报名**可以混着写**(一人一行),差别只在下面这几格:
|
||
|
||
| 列 | **个人报名**(一个人一条) | **团体报名**(一个单位一支队一条) |
|
||
| --- | --- | --- |
|
||
| `athlete_name` 姓名 | **必填**(这一段报名的归属人) | **留空**(填了就变成个人报名) |
|
||
| `id_card` 证件号 / `bib` 号码布 | **至少填一个**(认人用;证件号优先) | 可以不填(这一行没有"人") |
|
||
| `member_names` 队员名单 | **留空**(个人报名没有队员) | 写队员的**号码布**(`A001/A002`);写姓名只当文字、不关联人 |
|
||
| `squad` 队伍 | **留空**(个人报名没有队) | 同一个单位派两支队时写队名(一支队留空) |
|
||
| `team_code` 单位编码 | 这个人所属单位 | 这支队的单位(联队写 `A+B`) |
|
||
|
||
> **一句话**:**姓名列填了 = 个人报名,姓名列留空 = 团体报名**。现场最常错的是「想报一支队,却把队里最出名的那个人填进了姓名列」——那样只会落成他的个人报名,队名与队员名单被忽略(导入结果里会给提示,见第六节)。
|
||
|
||
### `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](./使用手册.md#41-选择项目与批次))。
|
||
|
||
### `status` 报名状态 —— 英文词或中文别名都认
|
||
**大小写不敏感**(`registered`、`Registered`、`DNS` 都认),也可以直接写中文:
|
||
|
||
| 英文写法 | 等价的中文别名 | 含义 |
|
||
|---|---|---|
|
||
| `registered` | `正常` / `正常参赛` / `参赛` | 正常参赛 |
|
||
| `scratched` | `退赛` / `弃赛` / `请假` | 退赛 / 弃赛 |
|
||
| `dq` | `取消资格` / `犯规` | 取消资格 |
|
||
| `dns` | `未出场` / `未到` / `缺席` | 未出场 |
|
||
|
||
留空 = `registered`(正常参赛),拿不准就留空,特殊情况再填。
|
||
|
||
真正**认不出**的写法(例如「已报到」「未参赛」):这一行会被跳过,并给出中文行级提示,其余行照常导入。
|
||
|
||
> 第 12 行:status「已报到」无法识别,只能填 registered / scratched / dq / dns(或留空)
|
||
|
||
### `member_names` 队员名单
|
||
|
||
团体项目用这一列写队员,**多人之间用 `/`、`,`(英文逗号)或 `,`(中文逗号)分开,三种都认、可以混用**:
|
||
|
||
```
|
||
A001/A002 ← 推荐:写号码布,队员会被关联到人
|
||
A001,A002
|
||
A001,A002
|
||
张三/李四/王五 ← 只写姓名:名单照常显示,但拿不到个人分
|
||
```
|
||
|
||
- ⚠️ **空格不是分隔符**:`A001 A002` 会被当成**一段**(认不出人);
|
||
- ⚠️ **每一段要单独是一个号码布**:`张三(A001)` 这种「姓名 + 号码布写在同一段」**认不出人**——那是**导出件**的显示格式,不是导入接受的写法(要名字也看得见,写号码布就行);
|
||
- 团体项目**可以只报单位、不写队员**(这一列留空即可),队员名单以后还能补。
|
||
- 系统界面里会把这条名单显示成「张三、李四、王五」。
|
||
|
||
**想让队员真正「上场」——这一列要写号码布**
|
||
|
||
这一列有**两种内容**,系统按段(用 `/`、`,`、`,` 分开的每一段)分别处理:
|
||
|
||
| 这一段写的是 | 系统怎么处理 |
|
||
| --- | --- |
|
||
| **某个运动员的号码布**(例如 `101`、`A001`) | **认成那个人**:把这条团体报名与他**关联**起来(这一格也原样保留成文字)。**关联上的队员才能拿个人分、上个人积分榜、拿个人奖牌**(该项目配了「个人通道」时) |
|
||
| **只有姓名**(例如 `张三`) | **只当文字**:名单照常显示,**不会关联到人**(姓名可能重名,认错的分已经上了榜——所以系统**故意不按姓名认人**),也**不报错** |
|
||
|
||
```
|
||
101/102 ← 推荐写法:号码布,两个队员都能拿到个人分
|
||
张三/李四 ← 只当文字:名单会显示,但这两个人没有身份(拿不到个人分)
|
||
101/李四 ← 混着写也行:101 关联到人,李四只当文字
|
||
```
|
||
|
||
几条要记住的:
|
||
|
||
- ⚠️ **号码布要单独成一段**:`张三(101)` 这种「姓名和号码布写在同一段」的写法**认不出人**(系统只拿整段去比对号码布),要写成 `张三/101`,或者干脆只写 `101`。**推荐只写号码布**;
|
||
- **号码布是运动员的唯一标识,不看单位**:号码布认到的是**别的单位**的人时,**照常关联**,并在导入结果里给一条提示让你核对号码布是不是写错了(不是冲突、不拦截);
|
||
- **认不出人的段不报错**:没录档案的临时队员、写错的名字,都只当文字留在名单里(这条报名仍然只有单位、没有队员身份);
|
||
- **同一格里同一个号码布写两次**:只关联一次,并给一条提示(同一条报名里一个人只占一个位置);
|
||
- **个人行(填了姓名的那几行)这一列只当文字**:个人报名自己就是那个人的身份,不存在「队员」。这一格里写了号码布也不关联,只会给一条提示(提示里会直接告诉你团体该怎么填,见第六节);
|
||
- **一条报名最多关联 30 个人**:超过的那一行会被**整行拦下**(多半是把号码布写错了位置);
|
||
- **老数据的人要补挂**:升级前已经报好的团体报名,如果当时只写了姓名(或连姓名都没写),**升级时会尽力按「号码布 → 姓名 + 单位」回填一次**;**回填不上的,要重新导入一份写着号码布的名单,或到录入页手动挂人**(见[使用手册 · 4.13](./使用手册.md))。
|
||
|
||
### `squad` 队伍 —— 可选(表的最后一列)
|
||
|
||
**这一列只在「同一个单位在同一个组别派了不止一支队」时才需要填**,比如羽毛球双打:一个单位报了一队、二队,两队可能各占一个名次。
|
||
|
||
```
|
||
一队
|
||
二队
|
||
青年队
|
||
```
|
||
|
||
- **队名随便写**(`一队` / `二队` / `青年队` / `A 组` 都行),就是给现场看的一个标签;
|
||
- **留空 = 不区分队伍**:一个单位在这个组别只有一支队(绝大多数情况)时,**整列留空、整列不写、表头里没有这一列**,三种都合法,与升级前的行为完全一样;
|
||
- **只对团体项目有效**:这一列只认「姓名那一格留空」的团体行。**个人行(填了姓名的行)如果也填了队名,这一格不会写进库里**,导入结果里会给你一条提示:`第 N 行填了队伍「一队」,但这一行有运动员姓名、按个人报名处理:队伍只对团体报名(不填姓名那几行)生效,这一格没有写进库里`;
|
||
- **同一个单位、同一个组别、同一个队名只能有一条**(要派两支队就写两个不同的队名)。撞上了会逐行拦下并说清是哪个单位、哪个队(见第六节);
|
||
- **队名只影响显示与查重,不影响成绩与算分**:两个队的成绩、名次、积分各算各的,最后都汇总到同一个单位的总分上;显示上写成「单位名 + 队名」,例如 `第一分公司二队`(队名留空时仍然只写 `第一分公司`)。**单位总分榜 / 单位奖牌榜 / 个人积分榜上不写队名**(分与牌本来就归到单位);
|
||
- 队名**改起来不用删掉重建**:到「成绩录入」页点那一行的「单位」格,在弹窗里改(见[使用手册 · 4.12](./使用手册.md))。⚠️ 改完记得**把报名表里的队名也改成一样**——以后再导一份还写着旧队名的表,会因为认不出来而**新增出旧队名那一条**。
|
||
|
||
### 系统怎么认人(证件号 → 号码布 → 姓名 + 单位)
|
||
有姓名的行,系统按下面的顺序认人。**证件号是唯一标识,号码布是它的替补,最后才靠「姓名 + 单位」兜底回填**:
|
||
|
||
| 情况 | 系统怎么处理 |
|
||
|---|---|
|
||
| 表里的**证件号**在系统里已有 | 认作**同一个人**;若表里的姓名 / 性别 / 年龄 / 单位 / 号码布与他的档案对不上,会进「冲突」列表等你逐条决定(保留哪一侧),该行本轮不写入 |
|
||
| 证件号为空,或系统里还没有人有这个证件号 | 再看**号码布**:号码布在系统里已有 → 认作同一个人(差异同样进「冲突」列表) |
|
||
| 证件号与号码布都没找到 | 按「**姓名 + 单位**」找:<br>· 找不到 → 新建人员档案;<br>· 恰好一人、两边给的证件号(或号码布)对得上或有一边没填 → 认定是同一人,表里给的证件号 / 号码布 / 年龄会**回填**到他的档案(不算冲突);<br>· 恰好一人、但他已有**另一个**证件号(或号码布)且与表里不同 → 按「**同名的另一个人**」**新建档案**,并在导入结果里单独列出(姓名 / 单位 / 原证件号或号码布 / 新证件号或号码布)提醒你核对,**不拦截、不报错**;<br>· 多人 → 分不清是谁,进「冲突」列表等逐条决定 |
|
||
|
||
> 「同名的另一个人」多半是证件号(或号码布)写错了。收到这条提醒时,先核对表里那个号是不是本人:是别人(真的同名),确认无误即可;是本人写错了,到「基础数据 → 运动员」把档案里的号改回来,并把多出来的那条新档案删掉。
|
||
|
||
---
|
||
|
||
## 四、六个完整例子
|
||
|
||
### 例 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](./使用手册.md#411-联队两个单位合并参赛));
|
||
- 大屏与导出件里写的是 `第二分公司+第五分公司联队`,报名名单导出的「单位编码」列回写成 `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](./使用手册.md))。⚠️ **改完记得把这张表里的队名也改成一样**——以后再导一份还写着旧队名的表,会**新增出旧队名那一条报名**(导入是按「小项 + 组别 + 单位 + 队名」认人的)。
|
||
|
||
### 例 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](./使用手册.md));
|
||
- ⚠️ **号码布要单独成段**:写成 `张三(101)/李四(102)` **认不出人**(系统拿整段去比号码布)。要「名字 + 号码布」都看得见,就先写号码布(`101/102`)——导出件与录入页会自己显示成 `张三(101)、李四(102)`;
|
||
- **号码布写错成别的单位的人**:照号码布关联,并给一条提示让你核对(号码布是唯一标识,系统不按单位猜);
|
||
- **F2 那一行留空**:只报单位、没有队员身份,这是合法的,也是升级前所有团体报名的样子。
|
||
|
||
---
|
||
|
||
## 五、导入前请先检查(自检清单)
|
||
|
||
- [ ] 第一行是那 13 个列名(**英文一套、中文一套都行**,也可以中英混着写,见第二节),没有被合并单元格、**同一列没有写两遍**
|
||
- [ ] 表头上方没有多余的标题行或空行
|
||
- [ ] `event_code`、`team_code` 都是从系统里抄的编码,没有空格
|
||
- [ ] `category` 与系统里的组别名一字不差
|
||
- [ ] 个人行都有姓名,且都有证件号或号码布
|
||
- [ ] **团体报名的那几行「姓名」列是空的**(填了姓名就会被当成个人报名,那一行的「队伍」「队员名单」都不生效——见第三节的对照表)
|
||
- [ ] 「队员名单」列里写的是**单独的号码布**(多人用 `/`、`,`、`,` 分开,**不要用空格**;`张三(A001)` 这种整段认不出人)
|
||
- [ ] 证件号优先填、填准(**它是系统认人的第一依据**,填错最容易认错人)
|
||
- [ ] 一份表里**没有把同一个号码布给两个不同的人**(同一个人报多个组别时可以重复)
|
||
- [ ] 同一小项同一个组别里没有把同一个人写两遍(真重复会进「冲突」列表等决策)
|
||
- [ ] 每个证件号在系统里只属于一个人,别和别人的档案重号
|
||
- [ ] `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 行填了队伍「一队」,但这一行也填了运动员姓名,系统按个人报名处理:队伍只对团体报名生效,这一格没有写进库里。**要报团体(一支队)请把姓名列留空、把队员的号码布填到「队员名单」列**;**这一行确实是个人报名,把「队伍」这一格删掉即可** | **「姓名」列填了**(= 系统按个人报名处理)却还填了「队伍」。团体报名要**把姓名列留空** | 按提示二选一:**要报这支团体**,把这一行的姓名(以及证件号 / 号码布)**删掉**、队员的号码布写进「队员名单」列,队名留在「队伍」列;**这一行本来就是个人报名**,把「队伍」这一格删掉。⚠️ **注意别把这一行整行删掉了再重报**——按上面改完重传即可(同一小项同组别同单位同队名会更新原报名) |
|
||
| 第 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`、`报名表` 都行) | 必须「小项名称@组别名称」 |
|
||
| 多张工作表的文件 | 只读第一张,其余在导入结果里提示「没有读」 | 每张表各导各的 |
|
||
| 适合 | 零散补报、小规模、沿用老表格 | 小项组别多、按项目分工填表 |
|
||
|
||
两种模板**解析口径完全一致**:表头、认人顺序、冲突处理、行级报错都共用同一套代码,
|
||
只有「范围从哪来」这一点不同。
|
||
|
||
---
|
||
|
||
## 九、导出的名单怎么导回去
|
||
|
||
系统里一共能导出**三份**报名名单,**只有标着「导入格式」的那两份是给导入器看的**(三份都在「导出 → 结果」页签的**报名名单卡片**里,四个筛选完全一样):
|
||
|
||
| 卡片上的按钮 | 导出来是什么 | 文件名 | 对应哪种模板 |
|
||
|---|---|---|---|
|
||
| 导出报名名单 | 给人看的**报表**:另含小项名称、单位名称与备注,姓名列拼了队员,状态写「已退赛」 | `报名名单.xlsx` | **不能导回**(导入器不认它) |
|
||
| 导出(汇总·导入格式) | 13 列,所有行**汇总在一张工作表** | `报名名单(导入格式).xlsx` | **单表模板**(第二、三节) |
|
||
| 导出(分小项·导入格式) | 13 列,按「小项名称@组别名称」**分成多张工作表** | `报名名单(导入格式·分小项).xlsx` | **分工作表模板**(第八节) |
|
||
|
||
- 两个「导入格式」导出的 **13 列与第二节的模板逐列一致,顺序也一致**:项目编码 / 组别 / 单位编码 / 姓名 / 证件号 / 性别 / 年龄 / 号码布 / 种子 / 批次 / 状态 / 队员名单 / 队伍。**没有小项名称、单位名称与备注列**——重导用不着它们(「项目编码 + 组别」已经足够定位);
|
||
- 卡片上的**「表头语言」两个按钮(中文表头 / 英文表头)只影响这两个导出**,与第二节的两套表头同一口径(选英文走规范列名 `event_code` / `category` / `team_code` / `athlete_name` / `id_card` / `gender` / `age` / `bib` / `seed` / `heat` / `status` / `member_names` / `squad`;两条路都能导回来);
|
||
- 筛选(小项 / 组别 / 单位 / 批次)与报表**完全一样**,都可留空(留空 = 不筛这一维度);**访客也能导**;
|
||
- 导出的文件**原样传回「基础数据 → 报名导入」就能导回去**:**不要改表头、不要插列删列、不要把列名换成别的写法**;要改内容就在格子里改;
|
||
- 分小项那种格式的**工作表名仍然是「小项名称@组别名称」**,与模板一字不差(8.1、8.3 的规矩照样适用)——**不要手工改工作表名**,改了就对不上号。本来没人报名的组合不会出一张空表;
|
||
- 两种格式都把**团体报名的姓名列留空**、队员写进「队员名单」列(「姓名」列填了就是个人报名,见第三节)——这正是它与报表件最关键的区别;
|
||
- 「状态」列写的是导入器认的**四个中文说法**:`正常参赛` / `退赛` / `取消资格` / `未出场`。报表件写的是「已退赛」,**那个导入器不认**(会报「status 无法识别」),所以报表件不能重导;
|
||
- 「单位编码」列照旧:联队写 `A+B`(加号左边是主单位);按成员单位筛也能筛出这条报名。
|
||
|
||
### 9.1 往返验证过的(现场也可以自己验一遍)
|
||
|
||
把这两种导出件**原样喂回导入接口**各跑一遍,结论是:**零错误、行数一致、13 列逐项一致、团体行没有被变成个人报名**(队员与那支队的关联还在)。现场自验的办法:导出 → **一个字都不改** → 在「基础数据 → 报名导入」原样上传 → 结果应当是「新增 0 / 更新 N / 错误 0」,名单看不出变化。
|
||
|
||
> ⚠️ 但它**不是"完全无损"的往返**:重导前先看下面三条限制。
|
||
|
||
### 9.2 三条要知道的限制
|
||
|
||
1. **「号码布」列可能撞冲突面板**:导出件里写的是**报名上登记的号码布**;导入时对**个人行**会拿它跟**运动员档案里的号码布**比对,两边都非空且不一样,这一行就进「冲突」列表,等你在导入结果里逐条选「保留已有数据 / 使用新数据」(见第六、七节)。库里这两者通常是**一致**的(一致时是静默幂等,什么都不用做);不一致时重导**不是**静默幂等,会走这套既有的冲突流程;
|
||
2. **联队的份额权重不会被带回来**:13 列里联队只能写成 `A+B`,重导回去是**平均分(各 50%)**。当初设成 `2:1` 这种非均分的联队,重导之后会变成均分——**表格格式本身表达不了这件事**,要保权重只能在界面上改(到「成绩录入」点那一行的「单位」格);
|
||
3. **「队员名单」只增不减**:导出时会**以库里存的名单为底,再把界面上后来补进这支队的队员号码布补上**(否则那些人在重导后就没了)。所以重导后这支队的队员**不会少**,但个别名单的**顺序或写法**可能与最初上传的那张表不完全一样——以系统里现在的名单为准,是正常的。
|
||
|
||
---
|
||
|
||
## 十、给填写人的最短提示(一页版)
|
||
|
||
> 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 → 上传**。中间任何一个"顺手改一下"都可能让整份表被拦下。
|