|
Excel 中 2 个单元格合并后,数据在第 1 个单元格,第 2 个单元格为空。
而第 1 个单元格数据中的 '\n' 是为了将数据显示成 2 行。
以 A3:A4 为例:
A3 的数据为 '1# 1550\n2# 1550'
A4 的数据为 None
在保存到数据库之前需要将这 2 行(第 3 行和第 4 行)的数据进行“扩展”。
在读到的数据中,第1列(产线号)有 3 种情况:
① 'dd#dddd\ndd#dddd'
② None
③ 'dd#dddd'
其中:d 代表 1 位数字。
第 ①、② 种情况在相邻的 2 个列表中,表示是合并的单元格。
因此,需要生成 4 条数据记录(“扩展”)。
设这相邻的 2 个列表分别为 row1 和 row2,则产线号可由下列语句得到:
lines = row1[0].split('\n')。
如果 row1[0] = '1# 1550\n2# 1550',则上述语句相当于:
lines = '1# 1550\n2# 1550'.split('\n')
这时 lines[0] = '1# 1550',lines[1] = '2# 1550'
而相应的产线数据可由下列语句得到:
data1 = row1[1:]
data2 = row2[1:]
生成的 4 条数据记录分别为:
record1 = data1.insert(0, lines[0])
record2 = data2.insert(0, lines[0])
record3 = data1.insert(0, lines[1])
record4 = data2.insert(0, lines[1])
然后,依次将这 4 条记录保存到数据库中。
第 ③ 种情况是正常的一条记录,直接保存到数据库中即可。
根据上述语句:
lines = row1[0].split('\n')
的结果可由下列语句判断是 3 种情况的哪一种:
size = len(lines)
如果 lines = None,上述语句(lines = row1[0].split('\n'))将导致一个 AttributeError 异常。
否则
size = 1 是正常的一条数据记录;
size = 2 是合并的单元格,需要与下一行数据(列表)一起做数据“扩展”。 |
|