news 2026/7/8 20:20:56

影刀RPA Excel行列操作:插入、删除、隐藏、调整宽高

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA Excel行列操作:插入、删除、隐藏、调整宽高

影刀RPA Excel行列操作:插入、删除、隐藏、调整宽高

作者:林焱


Excel操作不只是读写单元格数据。很多时候你需要操作行列结构——插入一行新数据、删除空行、隐藏辅助列、调整列宽让内容完整显示、冻结首行方便查看。这些操作在手动使用Excel时很简单,但在RPA自动化中,每一步都有坑。

这篇文章把Excel行列操作的常用场景和正确方法讲全。


一、插入行和列

1.1 插入行

【插入Excel行】 文件路径:D:\data\product.xlsx Sheet名:Sheet1 插入位置:第3行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ce27cb18c8ae439386dfc8b51da26d65.png#pic_center) 插入行数:1

用Python操作:

importopenpyxl wb=openpyxl.load_workbook("D:\\data\\product.xlsx")ws=wb["Sheet1"]# 在第3行前插入一行ws.insert_rows(3)# 在第3行前插入3行ws.insert_rows(3,3)wb.save("D:\\data\\product.xlsx")

坑1:插入行后公式引用错位

插入行后,原来引用该区域的公式会自动调整。但有些复杂的公式(特别是跨Sheet引用)可能不会正确调整,需要手动检查。

坑2:插入行后格式不一致

新插入的行没有格式(边框、背景色等),和周围行不统一。插入后需要复制相邻行的格式:

fromcopyimportcopy# 复制第2行的格式到新插入的第3行forcolinrange(1,ws.max_column+1):source_cell=ws.cell(row=2,column=col)target_cell=ws.cell(row=3,column=col)ifsource_cell.has_style:target_cell.font=copy(source_cell.font)target_cell.border=copy(source_cell.border)target_cell.fill=copy(source_cell.fill)target_cell.number_format=source_cell.number_format

1.2 插入列

# 在第B列前插入一列ws.insert_cols(2)# 在第B列前插入2列ws.insert_cols(2,2)

1.3 批量插入多行数据

在数据末尾批量追加多行:

importopenpyxl wb=openpyxl.load_workbook("D:\\data\\product.xlsx")ws=wb["Sheet1"]# 找到最后一行last_row=ws.max_row# 批量追加new_data=get_variable("new_data_list")forrow_datainnew_data:last_row+=1forcol_idx,valueinenumerate(row_data,1):ws.cell(row=last_row,column=col_idx,value=value)wb.save("D:\\data\\product.xlsx")

用pandas更简洁:

importpandasaspd# 读取原有数据df_old=pd.read_excel("D:\\data\\product.xlsx")df_new=pd.DataFrame(get_variable("new_data_list"))# 合并df_all=pd.concat([df_old,df_new],ignore_index=True)# 写回df_all.to_excel("D:\\data\\product.xlsx",index=False)

二、删除行和列

拼多多店群自动化上架方案

2.1 删除行

【删除Excel行】 文件路径:D:\data\product.xlsx Sheet名:Sheet1 起始行:第5行 删除行数:1

用Python:

# 删除第5行ws.delete_rows(5)# 删除第5-7行(3行)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ac67657d67c64af08c222e77094ef21f.png#pic_center)ws.delete_rows(5,3)

2.2 删除空行

数据中间有大量空行需要清理:

importopenpyxl wb=openpyxl.load_workbook("D:\\data\\product.xlsx")ws=wb["Sheet1"]# 从下往上遍历,删除空行forrowinrange(ws.max_row,1,-1):# 检查整行是否为空is_empty=Trueforcolinrange(1,ws.max_column+1):ifws.cell(row=row,column=col).valueisnotNone:is_empty=Falsebreakifis_empty:ws.delete_rows(row)wb.save("D:\\data\\product.xlsx")

坑:从上往下删除导致行号错位

删除一行后,下面的行会上移,行号变化。如果从上往下遍历删除,会跳过一些行。必须从下往上删。

坑:删行后合并单元格错乱

删除包含合并单元格的行,合并范围可能错乱。删行后检查合并单元格的范围是否正确,必要时手动调整。

2.3 按条件删除行

删除满足条件的行(比如删除状态为"已下架"的行):

importpandasaspd df=pd.read_excel("D:\\data\\product.xlsx")# 删除状态为"已下架"的行df=df[df["状态"]!="已下架"]# 写回df.to_excel("D:\\data\\product.xlsx",index=False)

用pandas按条件删除比openpyxl逐行删快得多,适合大数据量。

2.4 删除列

# 删除第C列ws.delete_cols(3)# 删除第C-D列(2列)ws.delete_cols(3,2)

三、隐藏和显示行列

3.1 隐藏行

importopenpyxl wb=openpyxl.load_workbook("D:\\data\\product.xlsx")ws=wb["Sheet1"]# 隐藏第3-5行forrowinrange(3,6):ws.row_dimensions[row].hidden=Truewb.save("D:\\data\\product.xlsx")

3.2 隐藏列

# 隐藏C列和D列ws.column_dimensions['C'].hidden=Truews.column_dimensions['D'].hidden=True

3.3 取消隐藏

# 取消隐藏第3-5行forrowinrange(3,6):ws.row_dimensions[row].hidden=False![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/31b9066e37cd43808acf3fdf89046d8a.png#pic_center)# 取消隐藏C列ws.column_dimensions['C'].hidden=False

坑:隐藏行后max_row不包含隐藏行

openpyxl的max_row包含隐藏行。但pandas的read_excel默认不读取隐藏行。如果你隐藏了行又用pandas读取,数据行数可能不一致。

3.4 什么时候需要隐藏行列

  • 隐藏辅助计算列,让报表更清爽
  • 隐藏不需要展示的数据行
  • 隐藏中间过程数据

四、调整列宽和行高

4.1 设置列宽

# 设置A列宽度为20ws.column_dimensions['A'].width=20# 设置B列宽度为30ws.column_dimensions['B'].width=30

4.2 设置行高

# 设置第1行高度为30ws.row_dimensions[1].height=30

4.3 自适应列宽

Excel本身有"自适应列宽"功能,但openpyxl不支持直接调用。需要手动计算:

importopenpyxlfromopenpyxl.utilsimportget_column_letter wb=openpyxl.load_workbook("D:\\data\\product.xlsx")ws=wb["Sheet1"]# 遍历每列,找到最大内容长度,设置列宽forcolinrange(1,ws.max_column+1):max_length=0col_letter=get_column_letter(col)forrowinrange(1,ws.max_row+1):cell=ws.cell(row=row,column=col)ifcell.value:# 中文字符算2个宽度value=str(cell.value)length=sum(2iford(c)>127else1forcinvalue)max_length=max(max_length,length)# 列宽 = 最大长度 + 2的余量ws.column_dimensions[col_letter].width=min(max_length+2,50)wb.save("D:\\data\\product.xlsx")

坑:中文字符宽度计算

中文字符在Excel中占的宽度大约是英文字符的2倍。如果用len(str)计算列宽,中文内容的列会太窄。用上面的方法,中文字符算2个宽度。

坑:列宽太大

有些单元格内容很长(比如URL),如果按内容设列宽会非常宽。设置一个上限(如50),超过的截断或换行。

4.4 自动换行

内容太长不想列太宽,可以设置自动换行:

fromopenpyxl.stylesimportAlignment# 设置A列所有单元格自动换行forrowinrange(1,ws.max_row+1):ws.cell(row=row,column=1).alignment=Alignment(wrap_text=True)# 设置列宽和行高ws.column_dimensions['A'].width=30

五、冻结窗格

5.1 冻结首行

# 冻结首行(第2行开始可以滚动)ws.freeze_panes="A2"[video(video-5zLktKk2-1783502662097)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]

5.2 冻结首行首列

# 冻结首行和首列ws.freeze_panes="B2"

5.3 冻结多行多列

# 冻结前2行和前3列ws.freeze_panes="D3"

5.4 取消冻结

ws.freeze_panes=None

什么时候用冻结窗格

  • 生成报表时冻结表头行,方便查看
  • 冻结ID列,滚动时始终可见

六、行列操作实战场景

6.1 清理数据表

一个完整的数据清理流程:

importopenpyxlimportpandasaspd# 读取数据df=pd.read_excel("D:\\data\\raw.xlsx")# 1. 删除空行df=df.dropna(how='all')# 2. 删除重复行df=df.drop_duplicates()# 3. 删除指定列(辅助列)df=df.drop(columns=['临时标记','计算用'])# 4. 重置索引df=df.reset_index(drop=True)# 写入新文件df.to_excel("D:\\data\\cleaned.xlsx",index=False)# 5. 用openpyxl调整格式wb=openpyxl.load_workbook("D:\\data\\cleaned.xlsx")ws=wb.active# 自适应列宽forcolinrange(1,ws.max_column+1):max_length=0col_letter=get_column_letter(col)forrowinrange(1,ws.max_row+1):cell=ws.cell(row=row,column=col)ifcell.value:length=sum(2iford(c)>127else1forcinstr(cell.value))max_length=max(max_length,length)ws.column_dimensions[col_letter].width=min(max_length+2,50)# 冻结首行ws.freeze_panes="A2"# 表头加粗fromopenpyxl.stylesimportFontforcolinrange(1,ws.max_column+1):ws.cell(row=1,column=col).font=Font(bold=True)wb.save("D:\\data\\cleaned.xlsx")

6.2 在指定位置插入汇总行

wb=openpyxl.load_workbook("D:\\data\\sales.xlsx")ws=wb["Sheet1"]# 找到最后一行数据last_row=ws.max_row# 插入汇总行summary_row=last_row+1ws.cell(row=summary_row,column=1,value="合计")ws.cell(row=summary_row,column=2,value=f"=SUM(B2:B{last_row})")# 汇总行加粗fromopenpyxl.stylesimportFont,PatternFill bold_font=Font(bold=True)gray_fill=PatternFill(start_color="DDDDDD",end_color="DDDDDD",fill_type="solid")forcolinrange(1,ws.max_column+1):cell=ws.cell(row=summary_row,column=col)cell.font=bold_font cell.fill=gray_fill wb.save("D:\\data\\sales.xlsx")

6.3 转置数据(行变列、列变行)

importpandasaspd df=pd.read_excel("D:\\data\\data.xlsx")# 转置df_transposed=df.T df_transposed.to_excel("D:\\data\\transposed.xlsx")

七、避坑清单

坑1:pandas覆盖格式

pandas的to_excel会覆盖原有格式。需要保留格式的操作用openpyxl逐行逐列修改,不要用pandas覆盖。

坑2:大量insert_rows导致性能差

openpyxl的insert_rows在大数据量时性能很差(因为它要移动所有后续行的数据)。如果需要插入很多行,考虑用pandas处理数据后重新写入。

坑3:隐藏行影响数据读取

pandas的read_excel默认不读隐藏行。如果你隐藏了行又用pandas读取,数据行数会少。设置read_excel的参数来包含隐藏行,或者用openpyxl读取。

坑4:delete_rows后图表引用错位

如果Excel中有图表引用了被删除的行区域,图表数据会错位。删行后检查并更新图表数据源。

坑5:行高列宽单位混淆

openpyxl的列宽单位是字符宽度(大约等于一个数字字符的宽度),行高单位是磅(point)。两者不是像素,不要混用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 20:19:06

【无人机三维路径】基于A星算法实现低空单无人机城市路径规划环境激光雷达仿真 + 3D 占据栅格地图构建附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书…

作者头像 李华
网站建设 2026/7/8 20:13:09

CTFShow Web 1-27 题 intval 绕过实战:7 种方法详解与自动化脚本

CTFShow Web 1-27 题 intval 绕过实战:7 种方法详解与自动化脚本在CTF竞赛中,PHP的弱类型比较和函数特性绕过一直是Web安全方向的热门考点。本文将深入剖析intval()函数的特性,并详细讲解7种绕过intval($id) > 999限制的实战方法&#xff…

作者头像 李华
网站建设 2026/7/8 20:11:18

判定表驱动测试:从4个条件到16条规则的登录安全策略实战解析

判定表驱动测试:从4个条件到16条规则的登录安全策略实战解析登录功能作为系统安全的第一道防线,其测试设计的严谨性直接关系到整个系统的安全性。本文将深入探讨如何运用判定表方法,系统化地构建包含4个条件变量、16条规则的登录安全测试策略…

作者头像 李华
网站建设 2026/7/8 20:08:22

Webpack 5 源码泄露实战:3种检测手法与2款自动化工具对比

Webpack 5 源码泄露实战:3种检测手法与2款自动化工具对比现代前端开发中,Webpack已成为不可或缺的构建工具,但其配置不当可能导致严重的安全隐患。本文将深入探讨Webpack 5项目中源码泄露的检测技术,对比两款主流自动化工具的实际…

作者头像 李华