Python操作Excel:如何追加数据且不跳过空行?
解决Excel追加数据时跳过空行的问题
问题原因
sheet.append() 方法的逻辑是找到整个工作表已使用区域的最后一行(即所有列中最靠下的非空行),再在其下方追加数据。如果其他列存在比目标列(比如你的ID列)更靠下的非空数据,就会导致目标列出现空行,和你期望的“在指定列末尾追加”不符。
解决方法
不要依赖append(),而是定位到目标列(ID列)的最后一个非空行的下一行,然后逐个单元格写入数据。
步骤1:找到ID列的最后非空行
假设ID列是工作表的第1列(A列),可以通过遍历该列找到最后一个有值的行号:
# 找到ID列(第1列)最后一个非空行的行号 last_id_row = 0 for row in range(1, sheet.max_row + 1): cell_value = sheet.cell(row=row, column=1).value if cell_value is not None and cell_value != "": last_id_row = row # 新数据要写入的行号 target_row = last_id_row + 1
步骤2:计算新ID并写入数据
注意不要用len(sheet['ID'])计算ID,因为它会包含空行,应该基于ID列最后一个非空值加1:
# 计算新ID:如果ID列已有数据,取最后一个值+1;否则从1开始 new_id = sheet.cell(row=last_id_row, column=1).value + 1 if last_id_row > 0 else 1 # 逐个单元格写入数据 sheet.cell(row=target_row, column=1, value=new_id) sheet.cell(row=target_row, column=2, value=MedS.get()) sheet.cell(row=target_row, column=3, value=QuanS.get()) sheet.cell(row=target_row, column=4, value=HosS.get()) sheet.cell(row=target_row, column=5, value=ExpS.get()) sheet.cell(row=target_row, column=6, value=time_stamp)
完整示例代码
# 找到ID列最后非空行 last_id_row = 0 for row in range(1, sheet.max_row + 1): cell_val = sheet.cell(row=row, column=1).value if cell_val is not None and cell_val != "": last_id_row = row target_row = last_id_row + 1 new_id = sheet.cell(row=last_id_row, column=1).value + 1 if last_id_row > 0 else 1 # 写入数据 sheet.cell(row=target_row, column=1, value=new_id) sheet.cell(row=target_row, column=2, value=MedS.get()) sheet.cell(row=target_row, column=3, value=QuanS.get()) sheet.cell(row=target_row, column=4, value=HosS.get()) sheet.cell(row=target_row, column=5, value=ExpS.get()) sheet.cell(row=target_row, column=6, value=time_stamp) # 保存工作簿 wb.save("your_excel_file.xlsx")
补充说明
- 如果你的ID列是用列名(比如Excel中设置了表头“ID”),可以先找到表头所在行,再从表头下一行开始遍历找最后非空行。
- 这种方法完全基于目标列的位置写入,不会受其他列数据的影响,确保数据始终追加在目标列的末尾,不会出现空行。
内容的提问来源于stack exchange,提问作者Ultio
相关产品推荐
相关产品推荐

