影刀RPA Python openpyxl高级操作:样式合并拆分超越内置Excel指令 影刀RPA Python openpyxl高级操作样式合并拆分超越内置Excel指令作者林焱影刀内置的Excel指令覆盖了基本的读写和简单格式设置。但当你需要给表格加边框、合并单元格、设置条件格式、复制Sheet、生成带图表的报表时内置指令就力不从心了。openpyxl是Python最常用的Excel操作库这篇文章讲清楚它和影刀内置指令的互补关系。openpyxl能做什么影刀做不到的事单元格样式字体、颜色、边框、对齐、填充色——精确到每个单元格合并单元格影刀没有合并单元格的指令列宽行高自动调整列宽影刀做不到条件格式数值大于100标红openpyxl一行代码复制Sheet把一个Sheet的内容复制到另一个拼多多店群自动化报活动上架图表柱状图、折线图、饼图公式写入直接写入Excel公式实战模板把影刀采集的数据写成漂亮报表importopenpyxlfromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Side# 创建新工作簿wbopenpyxl.Workbook()wswb.active ws.title销售数据汇总# 写表头加粗、居中、蓝底白字headers[日期,商品,销量,金额,环比]header_fontFont(boldTrue,colorFFFFFF,size11)header_fillPatternFill(start_color4472C4,end_color4472C4,fill_typesolid)header_alignmentAlignment(horizontalcenter,verticalcenter)forcol,headerinenumerate(headers,1):cellws.cell(row1,columncol,valueheader)cell.fontheader_font cell.fillheader_fill cell.alignmentheader_alignment# 写数据从影刀变量中获取data[[2024-06-01,商品A,100,9900,5%],[2024-06-02,商品B,85,8415,-2%]]forrow_idx,row_datainenumerate(data,2):forcol_idx,valueinenumerate(row_data,1):ws.cell(rowrow_idx,columncol_idx,valuevalue)# 加边框thin_borderBorder(leftSide(stylethin),rightSide(stylethin),topSide(stylethin),bottomSide(stylethin))forrowinws.iter_rows(min_row1,max_rowws.max_row,max_col5):forcellinrow:cell.borderthin_border# 自动调整列宽注意中文宽度forcolinws.columns:max_length0col_lettercol[0].column_letterforcellincol:ifcell.value:# 中文算2个字符宽度lengthsum(2iford(c)127else1forcinstr(cell.value))max_lengthmax(max_length,length)ws.column_dimensions[col_letter].widthmax_length4wb.save(销售报表.xlsx)合并单元格和跨Sheet操作# 合并单元格ws.merge_cells(A1:C1)ws[A1]合并后的标题# 复制整个Sheetsourcewb[Sheet1]targetwb.copy_worksheet(source)target.title备份![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d8db4d24ed564402abce7f2d0a9eaf24.png#pic_center)# 同时操作多个Sheetforsheet_namein[1月,2月,3月]:wswb[sheet_name]# 对每个Sheet做统一处理踩坑实录坑1openpyxl不能操作.xls文件openpyxl只支持.xlsx格式。如果你的文件是旧版.xls需要用xlrd/xlwt或者先用Excel打开另存为.xlsx。影刀自带的Excel指令支持.xls但openpyxl不行。坑2行和列的索引从1开始openpyxl的单元格索引从1开始不是从0开始。ws.cell(row1, column1)是A1单元格。这和Python的零基索引直觉冲突经常写循环时搞错边界。坑3文件被占用时保存失败TEMU店群矩阵自动化运营核价报活动如果Excel文件正在被打开wb.save()会报权限错误。解决方法是先检查文件是否被占用或者用try/except捕获异常并提示用户关闭Exceltry:wb.save(报表.xlsx)exceptPermissionError:print(文件被占用请关闭Excel后重试)坑4样式和数据类型互相覆盖如果你先设置了单元格样式再通过ws.cell().value修改了内容样式不会丢。但如果你用ws.append()整行写入之前设置的样式会被重置。建议先用value写入数据再统一设置样式。和影刀内置指令怎么配合原则影刀内置指令做简单读写openpyxl做复杂格式。常见流程影刀读取Excel文件路径 → openpyxl打开 → 复杂样式和数据处理 → openpyxl保存 → 影刀通知或上传。如果你整个流程都只有简单的读写需求别上openpyxl——用影刀内置指令更快更稳。一旦涉及格式美化、复杂计算、多Sheet联动果断切到openpyxl。