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') #保存工作簿
  1. 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))
  1. 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()
  1. 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')
  1. 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导入导出相关推荐

  1. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

  2. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出

    为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...

  3. SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

    导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...

  4. 开发指南专题十五 JEECG微云快速开发平台EXCEL导入导出

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!  开 ...

  5. Java实现Excel导入导出操作详解

    前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...

  6. SpringBoot中使用Easyexcel实现Excel导入导出功能(一)

    目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期.数字及其他自定义格式的转换 5.表头有多行的表格读取 6.表头数据的读取 7.单元格内的备注内容读取 前言 exce ...

  7. Excel 导入导出、样式设计、Excel各种工具类整合,FileUtil、ExcelUtil

    2022-12-09 今天整理一下最近的excel导入导出经验,整理出了几个工具类,放心使用,可应付8成需求 excel导入导出现实需求可能很复杂,但基本都可以通过原生和easyexcel配合实现,开 ...

  8. 注解+反射优雅的实现Excel导入导出(通用版)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...

  9. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

最新文章

  1. Java多线程中的Runnable和Thread
  2. 什么时候出python4_Python4要来了?快来看看Python之父怎么说
  3. 查看oracle 的数据文件的版本信息
  4. 使用jupyter notebook连接服务器进行远程写代码
  5. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”
  6. docker 不包含依赖 打包_Docker容器技术(概念篇)
  7. [Java基础]比较器排序Comparator的使用
  8. mongoose更新数据,如果这条记录不存在,则直接变为新增
  9. 论文浅尝 | 动态词嵌入
  10. Android同屏或摄像头RTMP推送常用的数据接口设计探讨
  11. 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...
  12. java for 变量赋值_Java 如何引用变量赋值?
  13. 计算机网络(自顶向下方法)-网络层
  14. 圆你导演梦:5款主流视频制作软件横评
  15. 数据安全对物联网越来越重要
  16. android 点赞源码,【Ctrl.js】微信给最新一条消息点赞源码
  17. 网线水晶头接法和线序(图文详解)
  18. 三公到底指太师太傅太保还是…
  19. 第二章第一节 能把梳子卖给和尚吗
  20. 9.1 使用QPxmap类加载图片

热门文章

  1. Excel-算术平均分析(差异分析)
  2. 谷歌 android one,谷歌安卓官网重新设计:Android One消失
  3. 如何在edius里创建4K的工程预设
  4. c语言已知某班男生有n1,C语言程序设计–第10章课后习题.pdf
  5. 橱柜高度与身高对照表_装修血泪史:厨柜高度到底要多高才合适【技术帖】
  6. 微软Azure建站系列-免费SSL证书
  7. [转]朴素贝叶斯分类器的应用
  8. 1.3 Swift语言演进
  9. 2020年Vue面试题汇总
  10. Windows 解决 git push Filename too long 问题