我确实找到了针对多行串联(https://stackoverflow.com/questions/60143273/openpyxl-concatenation-of-several-columns-into-one-cell-per-row-multi-row
)的上述问题的解决方案,但是我发现十六进制代码在Excel中无法正确显示。我发现有两种情况,在连接它们之前,我需要更正(格式化列/工作表后导入.csv / .txt无效)在F到M列中只有一位数字的值。Excel将"00"
更改为"0"
,并将"02"
(或其他任何数字而不是2)更改为"2"
。这对我来说很重要,因为这些位将丢失,所有数据都将无用。
所需的输入:
A B C D E F G H .. M
.. 2E .... 0000000000000AA4..
...4A ... 0002478304..
当前输入:
A B C D E F G H .. M
.. 2E .... 0000000AA4..
...4A ... 0247834..
组织:
A B C D E F G H .. M
.. 2E .... 00 00 00 00 00 00 0A A4..
...4A ... 00 02 47 83 04..
我到目前为止使用的代码:
def concat_f_to_m():
for row_value in range(1, sheet.max_row+1):
values=[]
del values[:]
for row in sheet.iter_rows(min_col=6, max_col=14, min_row=row_value, max_row=row_value):
for cell in row:
if cell.value != None:
if cell.value == '0':
values.append("00")
print("zeros", values)
else:
values.append(str(cell.value))
print("non-zeros", values)
sheet[f'E{row_value}'].value= ''.join(values)
else:
del values[:]
break
在解决数字问题之前,我只处理一个零而不是两个零的问题。不知何故该程序甚至没有进入if cell.value == '0'
部分。我不知道问题是什么。你能告诉我为什么我走错了路吗?谢谢!
您可以在字符串值中添加.zfill(x)
,因此长度为至少 x
。由于您需要2个字符,因此您将.zfill(2)
。
def concat_f_to_m():
for row_value in range(1, sheet.max_row+1):
values=[]
del values[:]
for row in sheet.iter_rows(min_col=6, max_col=14, min_row=row_value, max_row=row_value):
for cell in row:
if cell.value != None:
values.append(str(cell.value).zfill(2))
sheet[f'E{row_value}'].value= ''.join(values)
else:
del values[:]
break