影刀RPA Excel的Sheet管理:新增、复制、重命名、删除

发布时间:2026/7/8 19:08:27
影刀RPA Excel的Sheet管理:新增、复制、重命名、删除 影刀RPA Excel的Sheet管理新增、复制、重命名、删除作者林焱一个Excel文件往往不止一个Sheet。采集数据按日期分Sheet存储、报表按部门分Sheet展示、原始数据和清洗结果放在不同Sheet里。很多新手只会操作固定的Sheet1一旦Sheet结构变了流程就崩了。这篇文章把Excel Sheet管理的各种操作讲全——新增、复制、重命名、删除、遍历让你能灵活管理多Sheet工作簿。一、获取Sheet列表1.1 获取所有Sheet名在做任何Sheet操作前先知道文件里有哪些Sheetimportopenpyxl wbopenpyxl.load_workbook(D:\\data\\product.xlsx)sheet_nameswb.sheetnames# 返回Sheet名列表# 例如[Sheet1, Sheet2, 销售数据]set_variable(sheet_names,sheet_names)或者用影刀指令【获取Excel Sheet列表】 文件路径D:\data\product.xlsx → 输出到变量 sheet_list1.2 判断Sheet是否存在wbopenpyxl.load_workbook(D:\\data\\product.xlsx)if销售数据inwb.sheetnames:print(Sheet存在)else:print(Sheet不存在)坑Sheet名大小写敏感销售数据和销售数据 末尾有空格是两个不同的Sheet名。从Excel复制Sheet名时注意不要带多余空格。二、新增Sheet2.1 基本新增wbopenpyxl.load_workbook(D:\\data\\product.xlsx)# 在末尾新增Sheetwswb.create_sheet(新Sheet)# 在指定位置新增index0表示最前面wswb.create_sheet(新Sheet,0)# 新增Sheet并填充表头ws[A1]商品名ws[B1]价格ws[C1]库存wb.save(D:\\data\\product.xlsx)2.2 新增Sheet并写入数据wbopenpyxl.load_workbook(D:\\data\\product.xlsx)wswb.create_sheet(今日数据)# 写入表头headers[商品名,价格,库存,状态]forcol,headerinenumerate(headers,1):ws.cell(row1,columncol,valueheader)# 写入数据dataget_variable(today_data)forrow_idx,row_datainenumerate(data,2):forcol_idx,valueinenumerate(row_data,1):ws.cell(rowrow_idx,columncol_idx,valuevalue)wb.save(D:\\data\\product.xlsx)2.3 按日期自动创建Sheet店群矩阵自动化突破运营极限每天采集的数据存到以日期命名的Sheet里fromdatetimeimportdatetimeimportopenpyxl todaydatetime.now().strftime(%Y%m%d)filepathD:\\data\\daily_collection.xlsx# 文件不存在则创建importosifnotos.path.exists(filepath):wbopenpyxl.Workbook()wb.remove(wb.active)# 删除默认Sheetelse:wbopenpyxl.load_workbook(filepath)# 如果今天的Sheet不存在创建它![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d631229a4be34a7f8771e46b071b34e8.png#pic_center)iftodaynotinwb.sheetnames:wswb.create_sheet(today)# 写入表头ws.append([序号,商品名,价格,采集时间])else:wswb[today]# 写入数据dataget_variable(collected_data)forrowindata:ws.append(row)wb.save(filepath)坑Sheet名不能包含特殊字符Excel Sheet名不能包含\ / ? * [ ] :这些字符。如果用日期做Sheet名用20260701格式而不是2026/07/01斜杠非法。坑Sheet名最多31个字符Excel限制Sheet名最多31个字符。超长名称会被截断或报错。三、复制Sheet3.1 在同一文件内复制wbopenpyxl.load_workbook(D:\\data\\product.xlsx)# 复制Sheet1为新SheetSheet1副本ws_sourcewb[Sheet1]ws_copywb.copy_worksheet(ws_source)ws_copy.titleSheet1副本wb.save(D:\\data\\product.xlsx)坑copy_worksheet只复制值和格式不复制图表和图片openpyxl的copy_worksheet只复制单元格的值、格式、公式。图表、图片、数据验证等不会被复制。如果需要完整复制用其他方案。3.2 跨文件复制Sheet把一个文件的Sheet复制到另一个文件importopenpyxlfromcopyimportcopy# 源文件和目标文件wb_sourceopenpyxl.load_workbook(D:\\data\\source.xlsx)wb_targetopenpyxl.load_workbook(D:\\data\\target.xlsx)ws_sourcewb_source[销售数据]ws_targetwb_target.create_sheet(销售数据)# 逐单元格复制值和格式forrowinws_source.iter_rows():forcellinrow:new_cellws_target.cell(rowcell.row,columncell.column,valuecell.value)ifcell.has_style:new_cell.fontcopy(cell.font)new_cell.bordercopy(cell.border)new_cell.fillcopy(cell.fill)new_cell.number_formatcell.number_format new_cell.alignmentcopy(cell.alignment)# 复制列宽forcol_letter,diminws_source.column_dimensions.items():ws_target.column_dimensions[col_letter].widthdim.width# 复制行高forrow_num,diminws_source.row_dimensions.items():ws_target.row_dimensions[row_num].heightdim.height wb_target.save(D:\\data\\target.xlsx)3.3 用pandas跨文件复制importpandasaspd# 读取源文件的Sheetdfpd.read_excel(D:\\data\\source.xlsx,sheet_name销售数据)# 写入目标文件的新Sheetwithpd.ExcelWriter(D:\\data\\target.xlsx,engineopenpyxl,modea)aswriter:df.to_excel(writer,sheet_name销售数据,indexFalse)用pandas更简洁但只复制数据不复制格式。四、重命名Sheet4.1 基本重命名wbopenpyxl.load_workbook(D:\\data\\product.xlsx)wswb[Sheet1]ws.title原始数据wb.save(D:\\data\\product.xlsx)4.2 批量重命名wbopenpyxl.load_workbook(D:\\data\\product.xlsx)# 给所有Sheet加前缀2026_forwsinwb.worksheets:ws.titlef2026_{ws.title}wb.save(D:\\data\\product.xlsx)坑重命名后引用失效重命名Sheet后之前代码中用旧Sheet名引用的地方需要全部更新。建议用变量管理Sheet名sheet_name原始数据wswb[sheet_name]# 一处定义到处引用五、删除Sheet5.1 基本删除wbopenpyxl.load_workbook(D:\\data\\product.xlsx)# 删除指定Sheetwswb[临时数据]wb.remove(ws)wb.save(D:\\data\\product.xlsx)5.2 删除多个Sheet# 删除所有以临时开头的Sheetsheets_to_delete[wsforwsinwb.worksheetsifws.title.startswith(临时)]forwsinsheets_to_delete:wb.remove(ws)wb.save(D:\\data\\product.xlsx)5.3 只保留指定Sheet# 只保留最终结果Sheet删除其他所有keep_sheet最终结果forwsinwb.worksheets:ifws.title!keep_sheet:wb.remove(ws)wb.save(D:\\data\\product.xlsx)坑删除最后一个Sheet报错Excel文件至少要有一个Sheet。如果你删除了所有Sheet保存会报错。删除前检查是否是最后一个Sheet。坑删除Sheet是不可逆的删除Sheet后保存文件数据就真的没了。删除前先备份文件或者把要删除的Sheet数据先复制到其他Sheet。六、遍历所有Sheet6.1 遍历读取数据wbopenpyxl.load_workbook(D:\\data\\multi_sheet.xlsx)all_data{}forwsinwb.worksheets:sheet_data[]forrowinws.iter_rows(values_onlyTrue):sheet_data.append(list(row))all_data[ws.title]sheet_data set_variable(all_data,all_data)6.2 用pandas读取所有Sheetimportpandasaspd# 读取所有Sheet返回字典{Sheet名: DataFrame}all_sheetspd.read_excel(D:\\data\\multi_sheet.xlsx,sheet_nameNone)[video(video-pgyUGAyv-1783502244785)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]forsheet_name,dfinall_sheets.items():print(fSheet:{sheet_name}, 行数:{len(df)})# 处理每个Sheet的数据6.3 合并所有Sheet的数据importpandasaspd# 读取所有Sheetall_sheetspd.read_excel(D:\\data\\multi_sheet.xlsx,sheet_nameNone)# 合并所有Sheet假设结构相同df_allpd.concat(all_sheets.values(),ignore_indexTrue)# 写入新文件df_all.to_excel(D:\\data\\merged.xlsx,indexFalse)坑不同Sheet的列结构不一致合并时如果列结构不同列名不同、列数不同合并后会有大量NaN。合并前统一列名或用映射表对齐。七、Sheet的实用管理策略7.1 按月分Sheet存储fromdatetimeimportdatetimeimportopenpyxl monthdatetime.now().strftime(%Y-%m)filepathD:\\data\\monthly_report.xlsxwbopenpyxl.load_workbook(filepath)ifos.path.exists(filepath)elseopenpyxl.Workbook()ifmonthnotinwb.sheetnames:wswb.create_sheet(month)ws.append([日期,收入,支出,利润])else:wswb[month]# 追加今日数据ws.append([datetime.now().strftime(%Y-%m-%d),10000,6000,4000])wb.save(filepath)7.2 数据分类分Sheetimportpandasaspd dfpd.read_excel(D:\\data\\all_sales.xlsx)# 按地区分Sheetwithpd.ExcelWriter(D:\\data\\sales_by_region.xlsx)aswriter:forregionindf[地区].unique():df_regiondf[df[地区]region]df_region.to_excel(writer,sheet_nameregion,indexFalse)7.3 Sheet数量管理数据积累太多Sheet会影响文件大小和打开速度。定期归档旧Sheetimportopenpyxlfromdatetimeimportdatetime,timedelta wbopenpyxl.load_workbook(D:\\data\\daily_collection.xlsx)# 删除3个月前的Sheetcutoff(datetime.now()-timedelta(days90)).strftime(%Y%m%d)forwsinwb.worksheets:# 假设Sheet名是日期格式如20260401ifws.title.isdigit()andws.titlecutoff:wb.remove(ws)print(f已删除旧Sheet:{ws.title})wb.save(D:\\data\\daily_collection.xlsx)八、避坑清单坑1操作后忘记save所有Sheet操作新增、删除、重命名等都需要调用wb.save()才生效。很多人操作完了忘了保存关闭后发现什么都没变。坑2文件被占用无法保存Excel文件正被打开wb.save()报错文件被占用。保存前确保文件没被其他程序打开。坑3Sheet名冲突创建Sheet时用了已存在的Sheet名会报错或者覆盖。创建前先检查ifsheet_nameinwb.sheetnames:# 已存在选择覆盖或改名wb.remove(wb[sheet_name])wswb.create_sheet(sheet_name)坑4pandas写入时Sheet名包含特殊字符pandas的to_excel中Sheet名不能超过31个字符也不能包含特殊字符。写入前清洗Sheet名。坑5大量Sheet导致文件打开极慢一个文件有几十上百个Sheet时打开和保存都很慢。定期归档把旧Sheet移到归档文件中。