Pandas实现自定义Excel格式并导出多个sheet表
作者:黄昏中起飞的猫头鹰 发布时间:2022-10-04 18:46:34
前言
pandas 默认整合XlsxWriter驱动,自动化处理excel操作,提供公式、设置单元格格式、可视化分析图片等操作
XlsxWriter官方使用说明:
XlsxWriter Documentation
1.导入pandas及数据
import pandas as pd
df = pd.read_excel(r"C:\Users\xxx\xxx\XLSX 工作表.xlsx")
2.修改pd.to_excle方法
定义类writer:
class writer():
def __init__(self,df,sheet_name,key,path): #设置对象参数
self.df = df #dataframe数据(列表)
self.sheet_name = sheet_name #sheet名称(列表)
self.key = key #需要上色字段(列表)
self.path = path #excel保存地址
3.构建保存方法save
def save(self):
#设置保存地址,默认桌面
path = "C:/Users/xxx/Desktop/{}{}(导出时间{}).xlsx".format(pd.datetime.now().strftime("%y%m%d"),self.path,pd.datetime.now().strftime("%H时%M分%S秒"))
4.创建pd.ExcelWriter实例
writer = pd.ExcelWriter(path,engine='xlsxwriter') #创建pandas.ExcelWriter实例,赋值给writer
5.创建多个sheet表
for j in range(len(self.sheet_name)): #遍历sheet名称列表
#创建sheet表并写入dataframe数据
self.df[j].to_excel(writer, sheet_name=self.sheet_name[j], index=False #不写入索引index=False
,freeze_panes=(1,2)) #设置固定1、2列(固定列无法左右移动)
workbook = writer.book #工作蒲方法
worksheet = writer.sheets[self.sheet_name[j]] #读取sheet表
6.设置自定义列宽
# 计算每列的合适字符宽度,放到元组中(可以设置最大值)
widths = (self.df[j].astype(str).applymap(lambda x: 40 if len(x)>61 else len(x)+6 if len(x)<8 else len(x)).agg(max).values)
#设置每列宽度大小
[worksheet.set_column(i, i, width) for i, width in enumerate(widths)] #计算的宽度,设置列宽
7.设置列不同颜色
设置颜色列表,给不同列设计喜欢的颜色
color = ['#03A89E','#00C78C','#FFFFCD','#FFC0CB','#808A87','#FFE384','#ED9121','#40E0D0','#FFFFCD']*5 #颜色列表
[worksheet.set_column(i,i,widths[i],workbook.add_format({'fg_color': color[i-11],
'valign': 'vcenter',# 垂直对齐方式
'font_size': 10, #字体大小
'border': 4, #单元格边框宽度
'align': 'left' # 水平对齐方式
})) for
i,x in enumerate(self.df[j].columns) if self.df[j].columns[i] in self.key[0]]
8.设置首行格式
#设置首行宽度
worksheet.set_row(0,20,workbook.add_format({'fg_color':'#40E0D0'#背景颜色
,'bold': True,#字体加粗
'valign': 'vcenter',# 垂直对齐方式
'font_size': 16, #字体大小
'border': 10, #单元格边框宽度
'align': 'left' # 水平对齐方式
}))
writer.save()
writer.close()
9.可以设置隐藏不显示列
worksheet.set_column("A:B",None,None,{'hidden':1}) #A至B列,隐藏
调用方法:
writer1 = writer(df=[数据列表],path='文件名称(保存到桌面)',key=[上色字段列表],sheet_name=['sheet表名列表'])
writer1.save()
10.完整代码
class writer():
def __init__(self,df,sheet_name,key,path):
self.df = df #dataframe数据(列表)
self.sheet_name = sheet_name #sheet名称(列表)
self.key = key #需要上色字段(列表)
self.path = path #excel保存地址
def save(self):
#设置保存地址,默认桌面
path = "C:/Users/xxx/Desktop/{}{}(导出时间{}).xlsx".format(pd.datetime.now().strftime("%y%m%d"),self.path,pd.datetime.now().strftime("%H时%M分%S秒"))
#创建pandas.ExcelWriter实例
writer = pd.ExcelWriter(path,engine='xlsxwriter') #创建pandas.ExcelWriter实例,赋值给writer
for j in range(len(self.sheet_name)): #遍历sheet名称列表
#创建sheet表并写入dataframe数据
self.df[j].to_excel(writer, sheet_name=self.sheet_name[j], index=False #不写入索引index=False
,freeze_panes=(1,2)) #设置固定1、2列(固定列无法左右移动)
workbook = writer.book #工作蒲格式方法
worksheet = writer.sheets[self.sheet_name[j]] #读取sheet表
# 计算每列的合适字符宽度,放到元组中
widths = (self.df[j].astype(str).applymap(lambda x: 40 if len(x)>61 else len(x)+6 if len(x)<8 else len(x)).agg(max).values)
#设置每列宽度大小
[worksheet.set_column(i, i, width) for i, width in enumerate(widths)] #计算的宽度,设置列宽
color = ['#03A89E','#00C78C','#FFFFCD','#FFC0CB','#808A87','#FFE384','#ED9121','#40E0D0','#FFFFCD']*5 #颜色列表
[worksheet.set_column(i,i,widths[i],workbook.add_format({'fg_color': color[i-11],
'valign': 'vcenter',# 垂直对齐方式
'font_size': 10, #字体大小
'border': 4, #单元格边框宽度
'align': 'left' # 水平对齐方式
})) for
i,x in enumerate(self.df[j].columns) if self.df[j].columns[i] in self.key[0]]
#设置首行宽度
worksheet.set_row(0,20,workbook.add_format({'fg_color':'#40E0D0'#背景颜色
,'bold': True,#字体加粗
'valign': 'vcenter',# 垂直对齐方式
'font_size': 16, #字体大小
'border': 10, #单元格边框宽度
'align': 'left' # 水平对齐方式
}))
# worksheet.set_column("A:B",None,None,{'hidden':1}) #A至B列,隐藏
writer.save()
writer.close()
writer1 = writer(df=[df],path='フィロソフィー',key=[df],sheet_name=['sheet表名'])
writer1.save()
输出格式(如图):
文件名:230121フィロソフィー(导出时间21时53分49秒).xlsx
输出多个sheet表时,改为:
writer1 = writer(df=[df1,df2],path='文件名称(路径修改path)',
key=[df.columns,df2.columns],
sheet_name=['sheet表名1','sheet表名2'])
writer1.save()
来源:https://philosophy.blog.csdn.net/article/details/128747437


猜你喜欢
- 官方网站:http://www.extjs.com/演示地址:http://www.yaohaixiao.com/effects/sampl
- 本文实例讲述了Python中dictionary items()系列函数的用法,对Python程序设计有很好的参考借鉴价值。具体分析如下:先
- import java.util.Scanner; public class regexTest { // 新建类
- 我来讲解属性部分, 这是相当有用的, 可要认真上课.首先,jquery中对html标签属性进行操作的关键词是 attr .没错,就4个字母,
- 技术栈win7+python3+selenium之前有个需求需要实现自动化提流程,为了在任何电脑都能实现该功能,特此写了个爬虫,并将其打包成
- 这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1、简介定时 实现对蚂蚁森林能量的自动拾取,以及帮指定好友浇水2、开发环境搭建语言: javaScript开发工具:vcCode. auto
- 这份代码不是那种时间没有改变也输出innerHTML的高消耗代码。innerHTML和style的改变是非常消耗游览器性能的,如果你将来希望
- Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者看不懂的
- 前言由于项目中需要带字的toggle滑动组件,而ionic提供的是这样的:实际项目中需要这样子的:在网上找了下其他的实现,感觉没得类似的,也
- 概述固定长度,数组声明后长度便不能再修改只能存储一种特定类型元素的序列语法编号方式代码示例1直接声明var arr [3]int2makea
- 阅读上一篇:一个完美网站的101项指标.第六部分.性能 符合 W3C 标准是网站的发展趋势,目前,几乎所有的浏览器都使用 W3C 标准,W3
- 一:什么是数据库,为什么要有数据库?数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的四个基本概念。数据库相信大家都耳熟能详了
- 闭包内容:匿名函数:能够完成简单的功能,传递这个函数的引用,只有功能普通函数:能够完成复杂的功能,传递这个函数的引用,只有功能闭包:能够完成
- 简介此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CSS源文件放到了Content文件夹下的bootstr
- 1、打开Sqlserver,选择登录名下的账户右击点击属性2、右击点击属性查看强制过期是否被勾选上,如勾选上,会在一段时间后该账户不能正常使
- 前言本篇给大家分享一下《通过Python的pdfplumber库将pdf转为图片》。一、pdfplumber库是什么?pdfplumber是
- 需求描述数据库中 num字段值为:实现的效果:需要将一行数据变成多行实现的sqlSELECT SUBSTRING_INDEX(SUBSTRI
- 例1、一个简单存储过程游标实例DELIMITER $$ DROP PROCEDURE IF EXISTS getUserInfo $$CRE
- 一、第三方模块的下载与使用1、什么是第三方模块第三方模块是指别人编写的模块第三方模块一般功能都比较强大2、如何安装第三方模块方式一:pip工