在日常办公中,我们经常有这样的需求,需要重复的合并表格数据,如果数据表不多,通常复制粘贴就足够了,要是有成百上千的表格需要合并,普通的Ctrl+C、Ctrl+V已经难以实现,那么就要考虑用代码去合并。

这里给大家介绍两个Python库,用于表格的数据合并,以及解决代码合并后,图表样式固定的问题,第一个OS库,用于遍历文件目录,第二个openpyxl库用来操作表格,下面逐一介绍这两个库的功能。

OS模块

这里先介绍OS模块的功能,因为在调用的时候,涉及的参数不多,通常都只有一行代码,总结常用的功能如下。

os.getcwd()

得到当前工作目录,即当前Python脚本工作的目录路径。

os.listdir()

返回指定目录下的所有文件和目录名。

os.remove()

用来删除一个文件。

os.removedirs(r”c:\python”)

删除多个目录。

os.path.isfile()

检验给出的路径是否是一个文件。

os.path.isdir()

检验给出的路径是否是一个目录。

os.path.exists()

检验给出的路径是否真地存在。

os.path.dirname()

获取路径名。

os.path.abspath()

获得绝对路径。

os.path.basename()

获取文件名。

os.system()

运行shell命令。

os.rename(old,new)

重命名。

os.makedirs(r”c:\python\test”)

创建多级目录。

os.mkdir(“test”)

创建单个目录。

os.stat(file)

获取文件属性。

os.path.getsize(filename)

获取文件大小。

openpyxl模块

openpyxl库用于操作表格,功能包括新建一个空的表格、给表格添加数据、导入数据表、遍历数据表内容、合并多个表格以及修改单元格格式等。

创建一个空的表格

如何使用python创建一个空的表格,这里使用openpyxl库,包含创建表格,更改表名以及保存空表。

from openpyxl import Workbook
#创建表格
wb=Workbook()#获取当前active的sheet
sheet=wb.active#查看sheet名
sheet.title#改sheet名
sheet.title="表格一"#保存表
wb.save(r"C:\Users\尚天强\Desktop\测试.xlsx")

通过上面的代码,我们成功在桌面新建了一个名叫测试的工作簿,里面有一张名叫表格一的sheet表。

打开已经存在目录中的表

除了新建一张空的表,还可以使用命令打开已经存在的表格数据。

#打开一个存在的表
from openpyxl import load_workbook
wb2=load_workbook(r"C:\Users\尚天强\Desktop\2017年销售明细\销售明细第1季度.xlsx"")

向表格中写入数据

向空表中写入数据有三种方式,可以依次向单元格填写,也可以按照附加行的方式进行填写,填写的效果如下所示。

from openpyxl import Workbook
import datetime
#创建表格
wb=Workbook()
#获取当前active的sheet
sheet=wb.active#方式一:数据可以直接分配到单元格中(可以输入公式)
sheet["A1"]="李明"
sheet["B2"]="小红"
sheet["C3"]="小王"#方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
sheet.append(["张三","李四","王五"])#方式三:Python类型会被自动转换
sheet["A5"]=datetime.datetime.now().strftime("%Y-%m-%d")#保存表
wb.save(r"C:\Users\尚天强\Desktop\测试.xlsx")

获取已有表格中的数据

要打开一张表,可以先查看这张表的所有sheet名,对sheet赋值,然后获取对应的值,这里得出一月这张表中A1单元格中的值。

from openpyxl import load_workbook
wb2=load_workbook(r"C:\Users\尚天强\Desktop\2017年销售明细\销售明细第1季度.xlsx")#查看sheet名
wb2.sheetnames#获取一月这张表
sheet=wb2.get_sheet_by_name("一月")#查看第一张表中A1单元格中的值
sheet["A1"].value
'销售日期'

借助for循环导入A1到A5单元格中的值。

#打印一列值
for cell in sheet["A1:A5"]:print(cell[0].value)

导入全部数据

如果要导入单元格中的全部数据,需要先遍历所有的行,然后遍历所有的单元格,数据导入结果如下所示。

#打印全部值
for row in sheet:for cell in row:print(cell.value,end=",")print()#换行

导入指定行数据

指定导入数据的行数和列数,这里限定导入前五行和前五列数据,数据结果如下所示。

#遍历指定行,第1行开始至第5行,每行打印5列
for row in sheet.iter_rows(min_row=0,max_row=5,max_col=5):for cell in row:print(cell.value,end=",")print()

导入全部列数据

导入全部的列数据,需要先遍历所有的列,然后遍历所有的单元格,数据导入结果如下。

#遍历全部列
for column in sheet.columns:for cell in column:print(cell.value,end=",")print()

导入指定列数据

导入指定的列数据,在参数中限定最小和最大列数,以及最小和最大行数,数据导入结果如下所示。

#遍历指定几列的数据
for col in sheet.iter_cols(min_col=2,max_col=5,min_row=3,max_row=5):for i in col:print(i.value,end=",")print()

删除工作表

若要删除工作表,有remove和del两种方式。

#删除工作表
#方式一
wb.remove(sheet)#方式二
del wb[sheet]

设置表格样式

设置表格的样式,通常会设置表格的字体、字号大小、颜色、表格边框、行高、列宽、字体位置等,这部分的参数设置较为琐碎,这里举例常用的几个参数设置,结果如下所示。

#导入包
from openpyxl.styles import Font,colors,Alignment,Border,Side
from openpyxl import load_workbookwb=load_workbook(r"C:\Users\尚天强\Desktop\测试.xlsx")#获取当前active的sheet
sheet=wb.active
#设置字体样式
sheet['A1'].font=Font(name='微软雅黑',size=10,italic=False,color=colors.BLUE,bold=True)#设置A1中的数据垂直居中和水平居中
sheet['A1'].alignment=Alignment(horizontal='center',vertical='center')#第2行行高
sheet.row_dimensions[2].height=15#C列列宽
sheet.column_dimensions["C"].width=20#设置边框
border=Border(left=Side(border_style='medium',color=colors.BLACK),right=Side(border_style='medium',color=colors.BLACK),top=Side(border_style='medium',color=colors.BLACK), bottom=Side(border_style='medium',color=colors.BLACK), diagonal=Side(border_style='medium',color=colors.BLACK), diagonal_direction=0, outline=Side(border_style='medium',color=colors.BLACK),vertical=Side(border_style='medium',color=colors.BLACK), horizontal=Side(border_style='medium',color=colors.BLACK))              sheet["B4"].border=border   #保存表
wb.save(r"C:\Users\尚天强\Desktop\测试.xlsx")

分析实例

以上部分,逐一介绍了openpyxl部分库的功能,下面举一个实例进行表格的合并以及格式的设置,如下是2017年的销售明细,包含2017年4个季度的销售数据明细。

且每一个季度销售数据里又包含三个月的具体明细,现在需要批量合并4个工作簿,共计12张表,使用Ctrl+C、Ctrl+V功能已经不能很好的解决这里的问题,需要用代码解决。

这里首先使用os库,循环遍历该文件下的目录,使用openpyxl库循环遍历单元格中的数据,并且导入,合并结果如下,共计合并14283行记录。

from openpyxl import Workbook,load_workbook
import osdef concat_data(file_path,save_path):files_name=os.listdir(file_path)#创建新表格new_wb=Workbook()new_ws=new_wb.activeheader=['销售日期', '员工工号', '销售员', '货号', '销售单编号', '销量', '销售额']new_ws.append(header)#向新的表格写入数据for file_name in files_name:wb=load_workbook(file_path+"\\"+file_name)for sheet in wb.sheetnames:ws=wb[sheet]for row in ws.iter_rows(min_row=2,values_only=True):new_ws.append(row)#数据保存new_wb.save(save_path+"\\"+"数据合并.xlsx")concat_data(r"C:\Users\尚天强\Desktop\2017年销售明细",r"C:\Users\尚天强\Desktop")

同时给表格设置固定的图表样式,其中的单元格属性值可以直接进行修改。

from openpyxl import Workbook,load_workbook
from openpyxl.styles import Font,PatternFill,Alignment,Border,fills,colors,Side#导入表格数据
wb=load_workbook(r"C:\Users\尚天强\Desktop\数据合并.xlsx")#操作单元格
ws=wb.active#调整列宽
ws.column_dimensions["A"].width=25
ws.column_dimensions["B"].width=10
ws.column_dimensions["C"].width=10
ws.column_dimensions["D"].width=13
ws.column_dimensions["E"].width=35
ws.column_dimensions["F"].width=8
ws.column_dimensions["G"].width=10#设置单元格格式
#设置字体格式
font=Font("微软雅黑",size=12,color=colors.BLACK,bold=False)#单元格颜色填充
fill=PatternFill(fill_type="solid",start_color="CDCDCD",end_color="CDCDCD") #CDCDCD浅灰色#单元格对齐方式
alignment=Alignment(horizontal="center",vertical="center",indent=0) #wrap_text=True文字换行,shrink_to_fit=True自适应宽度#单元格边框
bd=Border(left=Side(border_style="thin",color=colors.BLACK),right=Side(border_style="thin",color=colors.BLACK),top=Side(border_style="thin",color=colors.BLACK),bottom=Side(border_style="thin",color=colors.BLACK),outline=Side(border_style="thin",color=colors.BLACK),vertical=Side(border_style="thin",color=colors.BLACK),horizontal=Side(border_style="thin",color=colors.BLACK))#遍历数据
for irow,row in enumerate(ws.rows,start=1):font=fontfill=fillalignment=alignmentborder=bdfor cell in row:cell.font=fontcell.fill=fillcell.alignment=alignmentcell.border=bd#设置表头字体格式
ft=Font("宋体",size=12,color=colors.BLUE,bold=True)#italic=True斜体
ws["A1"].font=ft
ws["B1"].font=ft
ws["C1"].font=ft
ws["D1"].font=ft
ws["E1"].font=ft
ws["F1"].font=ft
ws["G1"].font=ft#保存数据
wb.save(r"C:\Users\尚天强\Desktop\[格式调整]数据合并.xlsx")


各位伙伴们好,詹帅本帅假期搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读

牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

openpyxl库,1秒合并多张表格并设置图表格式相关推荐

  1. python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...

    Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...

  2. Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)

    Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...

  3. python的openpyxl模块合并单元格,浅谈openpyxl库,遇到批量合并单元格的问题

    我就废话不多说了,大家还是直接看代码吧~ from openpyxl import Workbook from openpyxl import load_workbook from openpyxl. ...

  4. 使用openpyxl库,遇到批量合并单元格问题

    from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.styles import NamedSt ...

  5. Python3-excel文档操作(一):利用openpyxl库处理excel表格:excel表格的创建和数据的写入和读取excel

    1. 简介 在最初处理excel表格时,我用的是xlwt和wlrd,表格后缀是.xls.但是,在处理时发现,一个sheet的记录长度如果超过65535,就写入不进去了. 后来,就采用openpyxl库 ...

  6. excel几个表合成一张_Excel中怎样把多张表格中的数据合并到一张表格中

    由于各种需要,我们往往会需要把多张表格中的数据内容合并成一张表格,那么应该怎么操作呢?我们以下为例: 下图中Sheet1是2011年的数据,sheet2是2012年的数据,最后要把它们合并在一张新表上 ...

  7. 表格大小设置_系统地学习Excel第18课,设置单元格字体格式

    上一篇:系统地学习Excel第17课,设置单元格格式 本篇内容结构如下: 本篇在章节中的位置 单元格字体格式包括字体.字号.字形.颜色等.Excel中文版默认单元格: 字体为[宋体]或[等线]: 字号 ...

  8. antd动态隐藏表格中的一列_有很多excel表格,如何快速合并到一张表格里?

    excel的多表格合并 比如说你有20几家门店的数据,每个门店一个表格,难道要重复复制吗?如果有100家门店怎么办? 我们的数据表往往是从不同人员,不同部门不同门店或者子公司收集到的统一格式数据.这些 ...

  9. python openpyxl库读写更新excel表格

    安装openpyxl库 pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple # 清华镜像源 1.读取excel文件内容 d ...

最新文章

  1. 56.4 AP!超越YOLOv4,更快更强的CenterNet2来了!
  2. java packetmaster_TCP中间件_java_server
  3. php和python交互-浅析PHP与Python进行数据交互
  4. Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码
  5. 自己写了一个多行文本溢出文字补全的小库, 说不定你会用得到的
  6. android 编译sdk,android编译sdk
  7. 【java】对学生成绩进行排序
  8. Linux——Django 开发环境部署(二)python版本控制器pyenv
  9. 手机恶意软件激增,使用代码签名证书防范恶意侵害
  10. 洛谷P2258 子矩阵——题解
  11. python制作翻译器代码_翻译器(3)
  12. [Azure][PowerShell][ASM][04]Storage
  13. 计算机组成原理课程要求及目的,计算机组成原理-教学大纲
  14. java batik 乱码_Batik渲染png图片异常的bug修复
  15. 网易云音乐ncm文件格式转mp3格式教程
  16. 液压系统管路流速推荐表_(整理)液压系统油管选择.
  17. 《深入浅出WPF》学习笔记
  18. Chrome最新版如何安装代理Proxy SwitchyOmega
  19. 美国防部应改进人工智能战略和加强协作指导
  20. php文字转语音amr,Android插件,TTS语音合成(文字转化语音)。

热门文章

  1. Python学到什么程度可以面试工作?
  2. git commit Please tell me who you are it config --global user.email you@example.com
  3. 在Linux上安装Memcached服务(自己测试过了)
  4. uni-app组件之间的传值
  5. PHP实现10亿个商品编码ing
  6. Git的commit之后的撤销reset
  7. altera fpga 型号说明_基于FPGA的USB2.0接口通信
  8. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
  9. rabbitmq延迟队列实现
  10. json与java反射_Java 对象的 Json 化与反 Json 化