如何在openpyxl中删除指定单元格?解决坐标与参数类型适配问题
解决openpyxl通过单元格坐标删除行/列的问题
先纠正一个笔误:你写的ws.delte_row(index)应为ws.delete_rows(index)(拼写错误)。
两种可行实现方式:
1. 遍历单元格时直接获取行/列号(推荐)
你通过ws.iter_rows()拿到的cell对象本身就自带row(整数行号)和column(整数列号)属性,完全不用处理cell.coordinate这个字符串格式的坐标。比如要删除指定单元格所在的行:
from openpyxl import load_workbook wb = load_workbook("你的文件.xlsx") ws = wb.active # 先收集要删除的行号,避免删除时行号偏移导致混乱 target_rows = set() for row in ws.iter_rows(): for cell in row: # 替换成你的判断条件,比如匹配指定坐标或单元格值 if cell.coordinate == "A1": target_rows.add(cell.row) # 倒序删除,防止行号变化漏删目标行 for row_num in sorted(target_rows, reverse=True): ws.delete_rows(row_num) wb.save("修改后文件.xlsx")
2. 解析单元格坐标字符串
如果手里只有"A1"这类字符串格式的坐标,可使用openpyxl内置工具解析为整数索引:
from openpyxl.utils import column_index_from_string, coordinate_from_string from openpyxl import load_workbook wb = load_workbook("你的文件.xlsx") ws = wb.active # 解析坐标字符串 coord = "A1" col_name, row_num = coordinate_from_string(coord) col_num = column_index_from_string(col_name) # 删除对应列或行 ws.delete_cols(col_num) # 删除A列 ws.delete_rows(row_num) # 删除第1行 wb.save("修改后文件.xlsx")
关键注意事项
删除行/列时必须倒序处理,如果正序删除(比如先删第2行,原第3行会自动变为新第2行),后续操作会漏掉原本的目标行/列。因此需要先收集所有待删除的索引,再按从大到小的顺序执行删除操作。
内容的提问来源于stack exchange,提问作者Mark Baumann
相关产品推荐
相关产品推荐

