影刀RPA 用Python在影刀中做Excel高级处理pandas vs openpyxl的选择影刀内置的Excel动作能覆盖70%的场景。剩下的30%大数据量、复杂筛选、多表关联、透视汇总得靠Python节点。这篇不教Python语法只讲一个核心问题什么场景用pandas什么场景用openpyxl。选错了库十万行数据能让你等到天荒地老。pandas vs openpyxl 一句话区分pandas处理数据内容和结构的像SQL操作数据表。读取、筛选、分组、聚合、合并——它擅长。openpyxl操作Excel文件和格式的像Excel应用程序。样式、图表、合并单元格、行高列宽——它擅长。你要算月销售额总和 → pandas 你要给销售额那列标红 → openpyxl 你要把两个表按客户名关联 → pandas 你要设置表头加粗白字蓝底 → openpyxl ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9fcb46093f33481295e8e55b6745d0ae.png#pic_center) 你要从100万行里筛选出金额10000的 → pandas 你要给符合条件的行加条件格式 → openpyxl场景一数据筛选与计算 → pandas拼多多店群自动化上架方案importpandasaspd# 读取Exceldfpd.read_excel(rC:\data\orders.xlsx,dtype{订单号:str})# pandas的筛选操作 # 单条件筛选high_valuedf[df[金额]10000]# 多条件筛选ANDresultdf[(df[金额]1000)(df[状态]已完成)]# 多条件筛选ORresultdf[(df[地区]北京)|(df[地区]上海)]# 按列值筛选INprovinces[广东,浙江,江苏]resultdf[df[省份].isin(provinces)]# 模糊筛选包含关键字resultdf[df[客户名].str.contains(科技,naFalse)]# pandas的聚合计算 # 按客户分组汇总金额summarydf.groupby(客户名)[金额].agg([sum,count,mean])summary.columns[总金额,订单数,平均金额]# 按日期和地区分组pivotdf.pivot_table(values金额,index日期,columns地区,aggfuncsum,fill_value0)# 排序df_sorteddf.sort_values(金额,ascendingFalse)df_top10df_sorted.head(10)# 保存结果summary.to_excel(rC:\data\summary.xlsx)场景二格式与样式操作 → openpyxlfromopenpyxlimportload_workbookfromopenpyxl.stylesimportFont,PatternFill,Alignment wbload_workbook(rC:\data\report.xlsx)wswb.active# openpyxl的格式操作 # 遍历单元格设置样式forrowinws.iter_rows(min_row2):amountrow[4].value# E列金额ifamountandamount10000:row[4].fontFont(colorFF0000,boldTrue)# 合并单元格ws.merge_cells(A10:C10)ws[A10]汇总ws[A10].alignmentAlignment(horizontalcenter)# 冻结窗格ws.freeze_panesA2# 设置打印区域ws.print_areaA1:F50wb.save(rC:\data\report_styled.xlsx)场景三数据量大 → pandas唯一选择当数据超过几万行时openpyxl会变得很慢——因为它要逐行逐列操作Excel的XML结构。importpandasaspd# 读取大文件10万行以上dfpd.read_excel(rC:\data\huge_file.xlsx)# 筛选filtereddf[df[金额]1000]# 指定列类型加速读取dfpd.read_excel(huge_file.xlsx,dtype{订单号:str,金额:float},usecols[订单号,客户名,金额]# 只读需要的列加快速度)filtered.to_excel(rC:\data\filtered.xlsx,indexFalse)pandas在大数据下的性能碾压openpyxl10万行数据pandas筛选保存大概2-3秒openpyxl逐行遍历可能需要几十秒到一分钟。组合使用获取最佳效果实际场景中两个库组合使用是最佳实践importpandasaspdfromopenpyxlimportload_workbookfromopenpyxl.stylesimportFont,PatternFill# 步骤1pandas处理数据内容和结构 dfpd.read_excel(rC:\data\raw_data.xlsx)# 数据清洗、筛选、计算dfdf[df[金额].notna()]# 去掉金额为空的行df[利润率]df[利润]/df[金额]# 按客户分组汇总summarydf.groupby(客户名).agg({金额:sum,利润:sum,订单号:count}).reset_index()summary.columns[客户名,总金额,总利润,订单数]summary[利润率]summary[总利润]/summary[总金额]# 写入ExceloutputrC:\data\final_report.xlsxsummary.to_excel(output,indexFalse,sheet_name汇总)# 步骤2openpyxl美化格式 wbload_workbook(output)wswb.active# 表头样式forcellinws[1]:cell.fontFont(boldTrue,colorFFFFFF)cell.fillPatternFill(start_color2F5496,end_color2F5496,fill_typesolid)# 数据列格式forrowinws.iter_rows(min_row2):row[1].number_format¥#,##0.00# 总金额row[2].number_format¥#,##0.00# 总利润row[4].number_format0.00%# 利润率wb.save(output)流程总结pandas做内容openpyxl做好看。常见操作对应的库选择操作推荐库原因读取大文件5万行pandas速度快筛选、排序、分组pandas语法简洁性能好两个表关联类似VLOOKUPpandas mergepd.merge跟SQL join一样直观设置字体颜色、背景色openpyxlpandas做不到合并单元格openpyxlpandas做不到TEMU店群如何管理运营| 添加图表 | openpyxl | 支持但不完美复杂图表用xlsxwriter || 设置数据验证下拉选项 | openpyxl | DataValidation || 修改已有文件的样式 | openpyxl | pandas只能覆盖写入 || 读取特定Sheet/区域 | 两者都可 | 看后续操作需求 |坑pandas写入会覆盖已有的格式这是一个经常踩的坑。你有一个人工做好的带格式的Excel模板想用pandas写入数据保留格式——不行。pandas的to_excel()是完全覆盖Sheet。之前的所有格式、图表、条件格式全部丢失。解决方案用openpyxl加载模板然后逐行写入数据。fromopenpyxlimportload_workbook# 加载带格式的模板wbload_workbook(rC:\data\template.xlsx)wswb.active# 从第2行开始写入数据第1行是表头模板fori,row_datainenumerate(data,start2):forj,valueinenumerate(row_data,start1):ws.cell(rowi,columnj,valuevalue)wb.save(rC:\data\filled.xlsx)# 模板的格式、图表、条件格式都保留一句话数据计算用pandas格式美化用openpyxl。超过5万行数据强制用pandas需要保留模板格式用openpyxl增量写入。作者林焱