第三篇

首页新闻博问专区闪存云上钜惠                          我的博客我的园子账号设置退出登录注册登录AirPython 公号「AirPython」,每周分享 Python 爬虫、自动化、数据分析、Web、高效率工具等原创干货,欢迎关注。 博客园首页新随笔联系订阅管理随笔 - 21  文章 - 0  评论 - 3最全总结 | 聊聊 Python 办公自动化之 Excel(下) 1. 前言前面谈到 Python 处理 Excel 文件最常见的两种方式,即:xlrd/xlwt、openpyxl​其中,xlrd/xlwt 这一组合,xlrd 可以负责读取数据,而 xlwt 则负责写入数据,缺点是不支持 xlsxopenpyxl 同时支持对 Excel 文档的读取、写入操作,缺点是不支持 xls本篇文章将继续聊聊 Python 操作 Excel 文档的其他几种方式2. xlsxwriterxlsxwriter 主要用于将数据、图表写入到 Excel 文件中,可以配置使用较小的内存快速写入数据它的缺点是:无法读取、修改已有的 Excel 文件;如果需要读取修改 Excel 文件,只能搭配其他依赖库使用,比如:xlrd首先安装 xlsxwriter 的依赖包# 安装依赖包
pip3 install xlsxwriter
xlsxwriter 提供了 Workbook(filename) 方法,用于创建一个工作簿对象使用工作簿对象的 add_worksheet(sheet_name) 函数,就可以在工作簿中创建 Sheet 了def create_workbook_and_worksheet(filename, worksheet_names):
“”"
创建工作簿和Sheet
:param filename: 文件名称
:param worksheet_names: sheet名称列表
:return:
“”"
wb = xlsxwriter.Workbook(filename)

sheets = []

# 新增sheet
for worksheet_name in worksheet_names:
    sheets.append(wb.add_worksheet(worksheet_name))

return wb, sheets

接着,就可以往某个 Sheet 单元格中写入数据了如果需要定制单元格的样式,比如:字体大小、字体、颜色、背景、是否加粗等,可以使用工作簿对象的 add_format() 方法创建一个样式def create_format_styles(wb, format_stuyles):
“”"
创建一个样式,包含:字体大小、字体、颜色、背景、是否加粗等
:param wb:
:param format_stuyles:
:return:
“”"
return wb.add_format(format_stuyles)

单元格字体样式

self.title_style = {‘bold’: True, ‘bg_color’: ‘#B0C4DE’, ‘font_size’: 10,‘font_name’: ‘Microsoft yahei’}

创建标题字体样式

title_font_style = create_format_styles(self.wb, self.title_style)

Sheet 对象的 write(…) 函数用于向单元格中写入数据,参数包含:行索引、列索引、值、字体样式等需要注意的是,默认 xlsxwriter 的行索引、列索引都是从 0 开始,即: 0 代表第一行写入数据的同时配置单元格样式的写法如下:def write_to_cell(sheet, row_index, column_index, value, format_styles=None):
“”"
往单元格中写入数据
:param row_index: 行索引,1:第一行
:param column_index: 列索引,1:第一列
:param format_styles 字体样式
:return:
“”"
if row_index < 1 or column_index < 1:
print(‘参数输入不正确,写入失败!’)
else:
# 注意:默认xlsxwriter的行索引、列索引从0开始
sheet.write(row_index - 1, column_index - 1, value, format_styles)

往worksheet中写入数据

第一行

write_to_cell(self.current_sheet, 1, 1, “姓名”, title_font_style)
write_to_cell(self.current_sheet, 1, 2, “年龄”, title_font_style)

第二行

write_to_cell(self.current_sheet, 2, 1, ‘xingag’)
write_to_cell(self.current_sheet, 2, 2, 23)
xlsxwriter 同样支持在单元格中插入图片,包含:本地图片和网络图片使用的方法是:insert_image()参数包含:单元格行索引(索引从 0 开始)、单元格列索引、图片文件、可选参数(图片位置、缩放、url 超链接、image_data 图片字节流等)以插入一张网络图片为例首先,定义一个图片展示可选参数,指定图片的缩放比、url 超链接def create_image_options(x_offset=0, y_offset=0, x_scale=1, y_scale=1, url=None, tip=None, image_data=None,
positioning=None):
“”"
插入图片的参数配置
包含:偏移量、缩放比、网络图片链接、超链接、悬停提示灯
:param x_offset:
:param y_offset:
:param x_scale:
:param y_scale:
:param url:
:param tip:
:param image_data:
:param positioning:
:return:
“”"
image_options = {
‘x_offset’: x_offset,
‘y_offset’: y_offset,
‘x_scale’: x_scale,
‘y_scale’: y_scale,
‘url’: url,
‘tip’: tip,
‘image_data’: image_data,
‘positioning’: positioning,
}
return image_options

image_options = create_image_options(x_scale=0.5, y_scale=0.5, url=‘https://www.jianshu.com/u/f3b476549169’)
接着,将网络图片转为字节流from io import BytesIO
import ssl

def get_image_data_from_network(url):
“”"
获取网络图片字节流
:param url: 图片地址
:return:
“”"
ssl._create_default_https_context = ssl._create_unverified_context
# 获取网络图片的字节流
image_data = BytesIO(urlopen(url).read())
return image_data
最后,将图片插入到单元格中def insert_network_image(sheet, row_index, column_index, url, filepath, image_options=None):
“”"
插入网络图片
:param sheet:
:param row_index:
:param column_index:
:param url:
:param filepath:
:param image_options:
:return:
“”"
if row_index < 1 or column_index < 1:
return “参数输入有误,插入失败!”

# 获取图片字节流
image_data = get_image_data_from_network(url)

if image_options:
    image_options['image_data'] = image_data
print(image_options)

sheet.insert_image(row_index - 1, column_index - 1, filepath, image_options)

insert_network_image(self.current_sheet, 1, 1, url, ‘1.png’, image_options4)
使用 set_column() 方法可以设置列宽和 openpyxl 类似,有 2 种使用方式,分别是:字符串索引、列索引数字索引def set_column_width(sheet, index_start, index_end, width):
“”"
设置列宽
:param sheet:
:param index_start: 开始位置,从1开始
:param index_end: 结束位置
:param width: 宽度
:return:
“”"
# 方式二选一
# self.current_sheet.set_column(‘A:C’, width)

# 默认0代表第一列
sheet.set_column(index_start - 1, index_end - 1, width)

设置列宽度

设置第1列到第3列的宽度为:100

set_column_width(self.current_sheet, 1, 3, 100)
行高使用 set_row() 方法,传入行索引和高度即可def set_row_height(sheet, row_index, height):
“”"
设置行高
:param sheet:
:param row_index: 行索引,从1开始
:param height:
:return:
“”"
sheet.set_row(row_index - 1, height)

设置行高

set_row_height(self.current_sheet, 1, 50)
set_row_height(self.current_sheet, 2, 100)
写入数据完毕之后,将工作簿关闭,文件会自动保存到本地def teardown(self):
# 写入文件,并关闭文件
self.wb.close()
xlsxwriter 还支持插入图表,比如:条形图、柱状图、雷达图等,受限于篇幅,这部分内容就不展开说明了3. 其他方式还有一种比较常见的方式是:xlwingsxlwings 是一款开源免费的依赖库,同时支持 Excel 文件的读取、写入、修改它功能非常强大,还可以和 Matplotlib、Numpy 和 Pandas 无缝连接,支持读写 Numpy、Pandas 数据类型;同时,xlwings 可以直接调用 Excel 文件中 VBA 程序需要注意的是,xlwings 依赖于 Microsoft Excel 软件,所以使用 WPS 的用户建议直接使用 openpyxl官方文档:https://docs.xlwings.org/zh_CN/latest/quickstart.html另外,还有一个操作 Excel 比较强大的方式,即:Pywin32其中,Pywin32 相当于调用 Win 下的系统 API 来操作 Excel 文件优点是:可以处理复杂图表的数据表缺点也非常明显,包含:速度慢、占用 CPU 高,仅支持 Win 系统4. 最后综合发现,xlrd/xlwt、openpyxl、xlsxwriter 基本上可以满足大部分的日常 Excel 文档操作要获取全部源码,关注公众号「 AirPython 」,后台回复「 excel 」即可获得全部源码如果你觉得文章还不错,请大家 点赞、分享、留言下,因为这将是我持续输出更多优质文章的最强动力!推荐阅读最全总结 | 聊聊 Python 办公自动化之 Excel(上)最全总结 | 聊聊 Python 办公自动化之 Excel(中)分享 Python 自动化及爬虫、数据分析实战干货,欢迎关注。 分类: 自动化 标签: 办公软件, 办公, Python, Excel, 办公自动化, 高效, 高效率, 工具, 工作, 自动化好文要顶 关注我 收藏该文 AirPython
关注 - 1
粉丝 - 4 +加关注 0 0

« 上一篇: 最全总结 | 聊聊 Python 办公自动化之 Excel(中) posted @ 2020-11-11 23:13  AirPython  阅读(53)  评论(0)  编辑  收藏

刷新评论刷新页面返回顶部

发表评论 【福利】注册AWS账号,立享12个月免费套餐 编辑预览 7693b08a-a8f6-49f3-f45a-08d88556cc23 Markdown 帮助自动补全 不改了退出 订阅评论 [Ctrl+Enter快捷键提交]

首页 新闻 博问 专区 闪存 班级 【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】博客园 & 陌上花开HIMMR 给单身的程序员小哥哥助力脱单啦~
【推荐】博客园x示说网联合策划,AI实战系列公开课第二期
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】 阿里云双十一返场继续,云服务器0.73折起
【推荐】年薪100w+的技术人,都做对了什么?
相关博文:
· pythonexcel
· pythonexcel
· python操作excel
· python操作excel——新建、加载、访问基本操作
· python操作excel表
» 更多推荐…最新 IT 新闻:
· 网络“奔现师”为啥火了?
· 中芯国际第三季度收入10.8亿美元,净利润2.56亿美元
· 为什么平台采购成受贿案高发地?
· 换“芯”的苹果,换了新的打法
· 虎牙第三季度净利润3730万美元 同比增长105.3%
» 更多新闻…

公告 昵称: AirPython
园龄: 8个月
粉丝: 4
关注: 1 +加关注

< 2020年11月> 日一二三四五六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12

搜索    常用链接 我的随笔我的评论我的参与最新评论我的标签我的标签Python(15) 自动化(11) 高效率(8) 工具(5) 工作(5) 办公(5) 软件(4) 数据处理(4) 数据库(4) 办公软件(3) 更多 随笔分类 工具插件(3) 自动化(10) 随笔档案 2020年11月(2) 2020年10月(4) 2020年9月(3) 2020年8月(4) 2020年7月(4) 2020年6月(3) 2020年5月(1) 最新评论1. Re:App 自动化,Appium 凭什么使用 UiAutomator2?@luckdv 哈哈,对的…–AirPython2. Re:App 自动化,Appium 凭什么使用 UiAutomator2?竟然是meizu–luckdv3. Re:再推荐 5 款私藏的优质 Chrome 插件六一儿童节快乐–凯哥xyz阅读排行榜 1. 推荐 iOS 上的一款黑科技自动化脚本:捷径(1664) 2. 带你用 Python 实现自动化群控设备(689) 3. 如何利用 Python 爬虫实现给微信群发新闻早报?(详细)(418) 4. 最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)(344) 5. 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)(336) 评论排行榜 1. App 自动化,Appium 凭什么使用 UiAutomator2?(2) 2. 再推荐 5 款私藏的优质 Chrome 插件(1) 推荐排行榜 1. 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)(2) 2. 带你用 Python 实现自动化群控设备(2) 3. 再推荐 5 款私藏的优质 Chrome 插件(1)

Copyright © 2020 AirPython
Powered by .NET 5.0.0 on Kubernetes

你可能感兴趣的:(第三篇)