700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Excel重设格式并自动截图保存为图片

Excel重设格式并自动截图保存为图片

时间:2020-09-05 07:05:29

相关推荐

Excel重设格式并自动截图保存为图片

使用Pandas模块生成的数据,在导出保存为Excel 时,是一种默认的格式,常常遇到列宽无法完整显示单元格中的文本、文字大小、行距不是预期的,无边框、无行背景色等问题,必须手动重设格式。

而且,现在不仅需要美化表格,还要实现自动截图,将数据表保存为一张图片。这一张新生成的图片拟自动插入到 Word 文档中。全过程都由Python自动化完成,我太懒了。

处理前的Excel 表格如下:

最终,程序运行后生成了下面的图片,本人不是专业人士,过程有点曲折,请别见怪。实现了第一行即表头高亮显示浅红色;第一列列宽为20,其他数据行的列宽为10,所有列文字居中对齐;奇数行高亮显示背景色为天蓝色;表头文字调为红色;第二列到最后一列的数据,每一列的最大值标为红色。自动保存为一张png图片,先看看效果怎样:

代码如下:

from openpyxl import Workbook,load_workbook #导入所需的库from openpyxl.styles import *from openpyxl.utils import get_column_letter, import pandas as pdfrom PIL import ImageGrab, Imageimport xlwings as xwdf= pd.read_excel('D:\测试数据\本月数据表.xlsx',sheet_name=0,header=0,dtype=object,na_rep="")rows = df.shape[0]#不计表头的行数cols = df.shape[1]print('行数 :%s,列数:%s'% (rows,cols))def highlight_max(s): #Styler.applymap: 作用于元素;Styler.apply:作用于行、列或整个表is_max = s == s.max() #取列最大值#is_max = s > 200 #取列大于200的值 return ['color : red' if v else '' for v in is_max] #对列最大值(红色)处理df_styled =df.style.applymap(lambda x: 'color:black',subset=["地区"]).apply(highlight_max,subset=['销售量', '未整改', '已超时', '未更正'])writer = pd.ExcelWriter('D:\测试数据\本期统计表.xlsx', engine='xlsxwriter')df_styled.to_excel(writer, sheet_name='Sheet1',index=None)workbook = writer.bookworksheet = writer.sheets['Sheet1']# 期望的设定格式format0 = workbook.add_format({'bg_color': '#F5DEB3','bold': True, 'font_color': 'red'})#表头颜色,'align': 'center'水平居中。'valign': 'vcenter'垂直居中format1 = workbook.add_format({'bg_color': '#B0E0E6','border':1,'border_color': '#000000'})#背景色'font_color': '#9C0006',天蓝色#87CEEB,'#ADD8E6',border=1是加边框format2 = workbook.add_format({'border':1,'border_color': '#000000'})#加边框,#FF0000是红色,#000000是黑色# 对奇数行设置颜色worksheet.conditional_format(0,0,0,cols-1, {'type': 'formula','criteria': '=mod(row(),2)=1','format': format0})#表头格式worksheet.conditional_format(1,0,rows,cols-1, {'type': 'formula','criteria': '=mod(row(),2)=1','format': format1})#对奇数行设置颜色格式,#'A2:E13'worksheet.conditional_format(1,0,rows,cols-1, {'type': 'formula','criteria': '=mod(row(),2)=0','format': format2})#对偶数行的格式worksheet.set_column("A:A" , 20)#第1列列宽度20#worksheet.set_column(0,0,8)worksheet.set_column(1,cols-1,10)#第2列至y-1列的宽度为10writer.save()writer.close()wb=load_workbook(r'D:\测试数据\本期统计表.xlsx') #载入excel文件,仅支持.xlsxsheetname=wb.sheetnames #获取所有的sheet名称sheet1=wb[sheetname[0]] #获取其中第一个sheetfor row in sheet1.rows: #循环每一行for i in range(0,sheet1.max_column): row[i].alignment = Alignment(horizontal='center', vertical='center') #对齐方式(centor、left、right) wb.save(r'D:\测试数据\本期统计表.xlsx')print('表格已美化并保存为excel,OK')def excel_catch_screen(shot_excel,shot_sheetname,img_name):app = xw.App(visible=True, add_book=False) # 使用xlwings的app启动wb = app.books.open(shot_excel) # 打开文件sheet = wb.sheets(shot_sheetname) # 选定sheetall = sheet.used_range # 获取有内容的range all.api.CopyPicture() # 复制图片区域sheet.api.Paste() # 粘贴 pic = sheet.pictures[0] # 当前图片pic.api.Copy() # 复制图片img = ImageGrab.grabclipboard() # 获取剪贴板的图片数据 if img.mode == "P":img = img.convert('RGBA')else:passimg.save("D:\测试数据\\"+img_name + ".png") # 保存图片 im = Image.open("D:\测试数据\\"+img_name + ".png")p = Image.new('RGB', im.size, (255,255,255))x, y = im.sizep.paste(im, (0, 0, x, y), im)p.save("D:\测试数据\\"+img_name + ".png") # 保存图片 pic.delete() # 删除sheet上的图片wb.close() # 不保存,直接关闭app.quit()shot_excel='D:\测试数据\本期统计表.xlsx'shot_sheetname=1img_name = '表格截图1'excel_catch_screen(shot_excel,shot_sheetname,img_name)print('美化的excel已截图并保存为图片,OK')

现在,只要数据处理完毕,就完美输出了一张统计图表,无论这个统计表是多少行、多少列,都一个模样的效果截图出来。这张图怎样播入到Word 文档中,就不在这里描述了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。