Python基础 - Excel导入导出
Python基础 - Excel导入导出
Excel文件是Microsoft Excel用来存储电子表格的文件格式,对Excel的处理方式与带分隔符的文件非常相似。由于Excel可以读写csv文件,因此从Excel电子表格文件中提取数据的最快捷、最简单的方法,其实往往是在Excel中打开并另存为csv文件。同一个文件包含多张表格、宏、多种单元格式等。事实上,Python的标准库中并没有包含读写Excel文件的模块,需要安装外部模块才能读取Excel格式。
本文使用OpenPyXL的模块来处理Excel,通过pip install openpyxl
命令安装。读取文件相当简单,但还是比csv文件要繁琐一些。首先要载入工作簿,然后要找到指定的表格,然后就可以遍历每一行,开始提取各个单元格中的数据。OpenPyXL不支持老版本的xls格式。
openpyxl模块有三大类,Workbook是对工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象。
# Excel文件的读取
from openpyxl import load_workbook
>>> wb = load_workbook('test.xlsx')
>>> results = []
>>> ws = wb.worksheets[0]
>>> for row in ws.iter_rows():results.append([cell.value for cell in row])
>>> print(results)
[[1, '《阿河》', '朱自清', '朱自清《阿河》', datetime.datetime(2020, 4, 13, 5, 16, 6), datetime.datetime(2020, 4, 13, 5, 16, 9)], [2, '《论自己》', '朱自清', '朱自清《论自己》', datetime.datetime(2020, 4, 13, 5, 17, 7), datetime.datetime(2020, 4, 13, 5, 17, 11)]]
如果电子表格包含的格式具有某种重要含义,如果标签需要忽略或单独处理,如果需要处理公式和引用,就需要深入研究这些部分的处理方式,并且需要编写更加复杂的代码。电子表格通常被限制在约一百万行的规模。建议尽量采用csv或带分隔符的文件,通常没有必要容忍电子表格带来的额外复杂性和格式处理的麻烦。
电子表格文件的写入,与读取过程类似。首先需要创建工作簿或电子表格文件,然后要创建一张或多张表,最后把数据写入合适的单元格中。当然可以由csv数据文件新建电子表格。
# Excel文件的写入
>>> data_rows = [['刘备', '创业者'],['关羽', '高级主管'],['张飞', '高级主管'],['诸葛亮', '最强打工人']]
>>> from openpyxl import Workbook
>>> wb = Workbook() # 实例化工作簿
>>> ws = wb.active # 激活worksheet
>>> ws.title = 'MS' # 设置worksheet名称
>>> for row in range(len(data_rows)):ws.append(data_rows[row])
>>> wb.save('abc.xlsx') #保存工作簿
- python操作Excel写数据
(1)创建、删除工作表
>>> from openpyxl import Workbook
# 创建工作簿
>>> wb = Workbook()
>>> ws = wb.active
>>> print('默认工作表名称', ws.title)
默认工作表名称 Sheet
>>> ws.title = 'mySheet'
# 获取工作簿的所有工作表名称
>>> print(wb.sheetnames)
['mySheet']
>>> print(wb.get_sheet_names)
>>> print('创建工作表')
>>> wb.create_sheet(index = 1, title = 'One Sheet')
<Worksheet "One Sheet">
>>> wb.create_sheet(index = 2, title = 'Two Sheet')
<Worksheet "Two Sheet">
>>> wb.create_sheet(index = 3, title = 'Three Sheet')
<Worksheet "Three Sheet">
>>> print(wb.sheetnames)
['mySheet', 'One Sheet', 'Two Sheet', 'Three Sheet']
>>> print('删除工作表')
>>> wb.remove(wb['Two Sheet'])
(2)使用list写入
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet(title='list写入')
print(wb.sheetnames)
rows = [['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],[1, 2, 3, 4, 5, 6, 7],[4, 2, 3, 4, 2, 3, 3],[5, 2, 4, 4, 2, 1, 3]
]
for row in rows:ws.append(row)
(3)使用range方式写入
>>> ws = wb.create_sheet('Range Sheet')
>>> for row in range(1, 30):ws.append(range(15))
(4)使用cell()方法写入
>>> ws = wb.create_sheet('Cell Sheet')
>>> from openpyxl.utils import get_column_letter # 根据当前列获取该列名称
# 指定数据写入的行列
>>> for row in range(10, 20):for col in range(5, 15):ws.cell(row = row, column=col, value=get_column_letter(col))
- python操作Excel读数据
(1)打开工作簿,获取所有工作表名称
from openpyxl import load_workbook
wb = load_workbook('demo.xlsx')
# 获取所有的工作表名称
print(wb.sheetnames)
# 获取当前激活的工作表
print(wb.active.title)
# 通过工作簿获取所有的工作表名称
for s in wb:print(s.title)
(2)创建工作表
wb = load_workbook('demo.xlsx')
mySheet = wb.create_sheet('mySheet')
print(mySheet)
(3)根据工作名获取工作表
sheet = wb.get_sheet_by_name('mySheet')
sheet = wb['mySheet']
(4)获取单元格对象及单元格的值
wb = load_workbook('demo.xlsx')
ws = wb.active
print(ws['A1'])
print(ws['A1'].value)
(5)获取单元格的行列值
wb = load_workbook('demo.xlsx')
ws = wb.active
# 根据单元格名称获取单元格对象
c = ws['C3']
print('row:{}, column:{}, value:{}'.format(c.row, c.column, c.value))
print('coordinate:', c.coodrinate)
print(ws.cell(row=2, column=2).value)
print('循环遍历获取:')
for r in ws.rows:for c in r:print(c.value, end='\t\t')print()
- python操作Excel修改样式
(1)修改字体样式
from openpyxl import Workbook
from openpyxl.styles import colors, Font
wb = Workbook()
ws = wb.active
ws.title = '修改字体样式'
f_font = Font(name='宋体', size=24, italic=True)
ws['C2'].font = f_font
ws['C2'] = '宋体 24 italic'
(2)设置单元格公式
from openpyxl import Workbook
from openpyxl.styles import colors, Font
wb = Workbook()
ws = wb.active
ws = wb.create_sheet('单元格公式')
ws['B1'] = 200
ws['B2'] = 100
ws['B3'].font = Font('微软雅黑', size=18, bold=True, color=colors.BLUE)
ws['B3'] = '=SUM(B1:B2)'
(3)设置行高和列宽
from openpyxl import Workbook
from openpyxl.styles import colors, Font
wb = Workbook()
ws = wb.active
ws = wb.create_sheet('维度')
ws['A1'] = 'HaLuo'
ws.row_dimensions[1].height = 80
ws['B2'] = 'Hello'
ws.column_dimensions['B'].width = 30
(4)合并单元格
from openpyxl import Workbook
from openpyxl.styles import colors, Font
wb = Workbook()
ws = wb.active
ws = wb.create_sheet('合并单元格')
ws.merge_cells('A1:D3')
ws['A1'] = 'This is a cute cat.'
ws.merge_cells('C5:D5')
ws['C5'] = 'Merged Cells'
(5)拆分单元格
from openpyxl import Workbook
from openpyxl.styles import colors, Font
wb = Workbook()
ws = wb.active
ws = wb.copy_worksheet(wb.get_sheet_by_name('合并单元格'))
ws.title = '未合并单元格'
ws.unmerge_cells('A1:D3')
ws.unmerge_cells('C5:D5')
- python操作Excel图表
(1)饼图
from openpyxl import Workbook
from openpyxl.chart import PieChart, Reference, BarChart, BubbleChart, ScatterChart, Series
# 准备数据
rows = [['Pie', 'Sold'],['Apple', 25],['Xiaomi', 25],['Huawei', 25],['Oppo', 25]
]wb = Workbook()
ws = wb.active
ws.title = '饼图'
for row in rows:ws.append(row)
# 绘制饼图
pie_chart = PieChart()
pie_chart.title = '饼图标题'
# 进行分类,数据在第二列
category = Reference(ws, min_col=1, min_row=2, max_row=5)
data = Reference(ws, min_col=2, min_row=2, max_row=5)
pie_chart.add_data(data)
pie_chart.set_categories(category)
ws.add_chart(pie_chart, 'D2')
wb.save('饼图.xlsx')
(2)条形图和柱形图
在条形图中,值被绘制成水平条或垂直条,通过type属性来设置。
from openpyxl import Workbook
from openpyxl.chart import PieChart, Reference, BarChart, BubbleChart, ScatterChart,Series # Reference:图标所用信息wb = Workbook()
# 绘制柱状图
ws = wb.create_sheet('条形图')
rows = [('第1列', '第2列', '第3列'),(2, 10, 30),(3, 40, 60),(4, 50, 70),(5, 20, 10),(6, 10, 40),(7, 50, 30),
]for row in rows:ws.append(row)
# 绘制柱状图
bar_chart = BarChart()
bar_chart.type = 'col' # col垂直、水平柱状图 bar
bar_chart.title = '条形图'
bar_chart.style = 10 # 设置颜色,10的对比度最强,红色与蓝色
bar_chart.x_axis.title = '示例长度(mm)'
bar_chart.y_axis.title = '测试数值'
# 设置分类
category = Reference(ws, min_col=1, min_row=2, max_row=7)
# 获取数据
data = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=7)
# 柱状图对象添加数据
bar_chart.add_data(data, titles_from_data=True)
bar_chart.set_categories(category)
ws.add_chart(bar_chart, 'E1')
wb.save('条形图.xlsx')
Python基础 - Excel导入导出相关推荐
- excel winform 导入 导出_强大的 Excel 导入导出工具 hutool
" 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...
- easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出
为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...
- SpringBoot中使用Easyexcel实现Excel导入导出功能(三)
导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...
- 开发指南专题十五 JEECG微云快速开发平台EXCEL导入导出
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 开 ...
- Java实现Excel导入导出操作详解
前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...
- SpringBoot中使用Easyexcel实现Excel导入导出功能(一)
目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期.数字及其他自定义格式的转换 5.表头有多行的表格读取 6.表头数据的读取 7.单元格内的备注内容读取 前言 exce ...
- Excel 导入导出、样式设计、Excel各种工具类整合,FileUtil、ExcelUtil
2022-12-09 今天整理一下最近的excel导入导出经验,整理出了几个工具类,放心使用,可应付8成需求 excel导入导出现实需求可能很复杂,但基本都可以通过原生和easyexcel配合实现,开 ...
- 注解+反射优雅的实现Excel导入导出(通用版)
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...
- java超级简单到爆的Excel导入导出(easypoi)
场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...
最新文章
- Java多线程中的Runnable和Thread
- 什么时候出python4_Python4要来了?快来看看Python之父怎么说
- 查看oracle 的数据文件的版本信息
- 使用jupyter notebook连接服务器进行远程写代码
- 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”
- docker 不包含依赖 打包_Docker容器技术(概念篇)
- [Java基础]比较器排序Comparator的使用
- mongoose更新数据,如果这条记录不存在,则直接变为新增
- 论文浅尝 | 动态词嵌入
- Android同屏或摄像头RTMP推送常用的数据接口设计探讨
- 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...
- java for 变量赋值_Java 如何引用变量赋值?
- 计算机网络(自顶向下方法)-网络层
- 圆你导演梦:5款主流视频制作软件横评
- 数据安全对物联网越来越重要
- android 点赞源码,【Ctrl.js】微信给最新一条消息点赞源码
- 网线水晶头接法和线序(图文详解)
- 三公到底指太师太傅太保还是…
- 第二章第一节 能把梳子卖给和尚吗
- 9.1 使用QPxmap类加载图片