3.5 KiB
3.5 KiB
发货记录合并单元格处理说明
功能特点
系统现在完全支持 Excel 中出货日期列的合并单元格,这是实际业务中常见的格式。
Excel 文件结构
典型格式
| 出货日期 | 箱号 | SN1 | SN2 | ... | SN20 |
|------------|--------|--------|--------|-----|--------|
| 2025-11-20 | BOX001 | SN0001 | SN0002 | ... | SN0020 |
| ↓ | BOX002 | SN0021 | SN0022 | ... | SN0040 |
| ↓ | BOX003 | SN0041 | SN0042 | ... | SN0060 |
| 2025-11-21 | BOX004 | SN0061 | SN0062 | ... | SN0080 |
| ↓ | BOX005 | SN0081 | SN0082 | ... | SN0100 |
说明:
- 出货日期列可以合并单元格
- 同一天的多个箱号共用一个日期单元格
- 每行代表一个箱号
- 横向包含该箱的 20 个 SN
解析逻辑
1. 合并单元格处理
# 记录上一个有效的日期
last_valid_date = None
for row in rows:
# 如果当前行日期为空(合并单元格的后续行)
if current_date:
last_valid_date = current_date
date = current_date
else:
# 使用上一个有效日期
date = last_valid_date
2. 数据结构
每行解析后的数据:
{
'date': '2025-11-20', # 出货日期
'box': 'BOX001', # 箱号
'sns': ['SN0001', 'SN0002', ...], # SN 列表
'qty': 20 # SN 数量
}
3. Redis 存储
每个 SN 单独存储:
HSET shipment_sn_mapping "SN0001" '{"date":"2025-11-20","box":"BOX001","ts":"..."}'
HSET shipment_sn_mapping "SN0002" '{"date":"2025-11-20","box":"BOX001","ts":"..."}'
...
创建测试模板
运行以下命令创建带合并单元格的测试模板:
python create_shipments_template.py
这将生成:
shipments_template.xlsx- 带示例数据和合并单元格shipments_template_empty.xlsx- 空白模板
导入流程
-
准备 Excel 文件
- 第一列:出货日期(可合并单元格)
- 第二列:箱号
- 第3-22列:SN1-SN20
-
上传文件
- 访问"发货记录"页面
- 选择 Excel 文件
- 点击"验证文件"
-
验证通过后导入
- 点击"导入数据"
- 系统自动解析合并单元格
- 数据存入 SQLite 和 Redis
-
查询验证
- 访问"SN出货查询"页面
- 输入任意 SN 号
- 查看出货日期和箱号
支持的格式
Excel (.xlsx, .xls)
- ✅ 支持合并单元格
- ✅ 自动识别空单元格
- ✅ 按 SN 编号排序(SN1, SN2, ..., SN20)
CSV (.csv)
- ✅ 支持空值(相当于合并单元格)
- ✅ 自动使用上一行的日期
- ⚠️ CSV 不支持真正的合并单元格,但空值会被正确处理
常见问题
Q: 如果日期列第一行就是空的怎么办?
A: 系统会跳过该行,直到遇到第一个有效日期。
Q: 如果某个箱子的 SN 不足 20 个?
A: 没问题,后面的 SN 列可以留空,系统只记录有值的 SN。
Q: 可以一天有多少个箱子?
A: 没有限制,同一天可以有任意多个箱子,都会使用同一个日期。
Q: 箱号可以重复吗?
A: 技术上可以,但建议保持唯一,便于追溯。
数据验证
导入后可以通过以下方式验证:
1. 查看 Redis 记录数
redis-cli HLEN shipment_sn_mapping
2. 查询特定 SN
redis-cli HGET shipment_sn_mapping "SN0001"
3. 通过 Web 界面
- 访问"SN出货查询"页面
- 页面顶部显示总记录数
- 输入 SN 查询详细信息