最近由于工作中 频繁大量 重复操作excel,为了提高工作效率,解放双手 写了几个python小工具; 本文把相关的核心代码记录下来,供大家参考使用;
---------------------------------------------------------------------------------------------
1.对比两个sheet, 并将不同点高亮显示,可以将不同的数值 覆盖掉。
使用场景,一键参数表誊写 ;
from openpyxl.styles import PatternFill
from openpyxl.styles import colors,Font
import openpyxl as vb
#读取 需要对比的excel表
workbook_a = vb.load_workbook(r'source.xlsm',data_only=False)
workbook_b = vb.load_workbook(r'target.xlsm',data_only=False)
sheet_a = workbook_a['sheet1']
sheet_b = workbook_b['sheet1']
#遍历所有的行与列
maxrow = sheet_a.max_row
maxcolumn = sheet_b.max_column
#循环对比表格 TPSSetting 的所有单元格数据
for i in range(1,maxrow):
for j in range(1,maxcolumn):
cell_a = sheet_a.cell(i,j)
cell_b = sheet_b.cell(i,j)
#如果有差异数据,就标识出来(蓝色加粗字体,黄色填充),
if cell_a.value != cell_b.value:
cell_a.fill = PatternFill("solid",fgColor='FFFF00')
cell_a.font = Font(color=colors.BLUE,bold=True)
cell_b.fill = PatternFill("solid",fgColor='FFFF00')
cell_b.font = Font(color=colors.BLUE,bold=True)
print(cell_b.value)
print(cell_a.value)
cell_b.value=cell_a.value
其中 语句 workbook_a = vb.load_workbook(r'source.xlsm',data_only=False) 红底语句置为false 可用来copy excel背后的公式。置为True 则会只读取 由公式计算出来的数值;
2. 抓取Excel 特定sheet 的特定区域,将表格内容放在列表中, 遍历其中的 所有item,执行自己需要的操作/获取自己需要的内容;
import xlwings as xw
###抓取相关内容
workbook=xw.Book('D:\python\test.xlsx')
sheet=workbook.sheets['sheetname']
List01=sheet.range('B1:B80').value
List01=sheet.range('D1:D1000').value
List01=sheet.range('E1:E3000').value
print(List01)
print(List02)
print(List03)
##去除 前后空格,打印目标内容的索引;
for item in List01:
if type(item)==str and item.strip()=='target_content':
item_index=List01.index(item)
print(List01.index(item))
3.将excel表格中的 相关区域复制成照片 贴图到另一个excel 中。使用起来 有时候会报错,大神看出来问题的话 还请留言指点。
def excel_catch_screenTO(file1,file2,screen_area, Phase_area):
excel = DispatchEx("Excel.Application") # 启动excel
excel.Visible = True # 可视化
excel.DisplayAlerts = False # 是否显示警告
pythoncom.CoInitialize() # excel多线程相关
wb_a = excel.Workbooks.Open(file1) # 打开excel
ws_a=wb_a.Sheets("Testorder")
wb_b = excel.Workbooks.Open(file2) # 打开excel
ws_b=wb_b.Sheets("Summary")
# """ 对excel的表格区域进行截图——用例:excel_catch_screen(ur"D:\Desktop\123.xlsx", "Sheet1", "A1:J10")"""
ws_a.Range(screen_area).CopyPicture() # 复制图片区域
ws_b.Paste(ws_b.Range(Phase_area)) # 粘贴 ws.Paste(ws.Range('B1')) # 将图片移动到具体位置 ws.Range('A57')
wb_a.Close(SaveChanges=0)
wb_b.Close(SaveChanges=1) # 关闭工作薄,保存
# excel.Quit() # 退出excel
excel_catch_screenTO('D:\python\test01.xlsx','D:\python\test02.xlsx', area, 'B75')
目前只是工作中用到的 简单记录了一下,本人非程序员 ,只是像学会使用工具 提高工作效率。
大家有什么 想实现的功能,可以品论留言。一起探索未知新大陆!!