Python 操作 Excel 可能是自动化办公最火热的需求了,看一看公众号文章底部的视频广告就知道了,里面尽是一些 5 分钟搞定 excel,将数据生成漂亮的图表。

5 分钟虽然有些夸张,但是快速操作 Excel 的需求确是真的。今天就来分享如何使用 Python 玩转 Excel。

主要内容:

  • Python 操作 Excel 的轮子对比

  • xlwings 读 Excel

  • xlwings 写 Excel

  • Excel 中插入图表

  • Excel 转 Pdf

  • Excel 拆分与合并

  • Excel 转 REST API

Python 操作 Excel 的轮子

Python 操作 Excel 的轮子有很多,导致选择困难症,为了帮你做选择,我这里放个对比图:

从上面的表格中可以看出,xlwings 是唯一一个全部都支持️的,是 Python 最强大的处理 Excel 的库,今天的主角就是它,它有以下优点

  • 1、Windows、Mac 都能用,Excel、WPS 也都能用。

  • 2、功能齐全,支持 Excel 的新建、打开、修改、保存,pandas、xlsxwriter 不能全做到。

  • 3、语法简单,用过一次后我就记住了。

  • 4、可以调用 VBA,有丰富的 API。

  • 5、可以与 pandas 等类库集成使用。

xlwings 安装

pip install xlwings

需要注意的是,请使用操作系统自带的终端来运行 xlwings 程序,否则可能遇到权限不足的问题。

xlwings 读取 Excel

读取 excel 比较简单,比如现在有这样一个 excel:

先确定范围,这里是 A1 到 F4,多读一些也没关系,没有数据的格子会显示为 None。

import xlwings as xwwork_book = xw.Book('测试.xlsx')sheet1 = work_book.sheets[0]print(sheet1.book)c = 0
for cell in sheet1.range('A1','E6'):c += 1print(cell.value, end ='\t')if c % 5 == 0:print("")

执行结果如下图所示:

假如无法预知数据的范围,可以使用 last_cell 方式获取最下边且最右边的一个单元格。

比如更好的方式是这样写:

import xlwings as xwwork_book = xw.Book('测试.xlsx')sheet1 = work_book.sheets[0]print(sheet1.book)last_cell = sheet1.used_range.last_cell
last_row = last_cell.row
last_col = last_cell.columnc = 0for cell in sheet1.range((1,1),(last_row, last_col)):c += 1print(cell.value, end ='\t')if c % last_col  == 0:print("")

还有各种灵活的单元格访问方式:

# A1单元格
rng=sheet1['A1']
rng=sheet1['a1']# A1:B5单元格
rng=sheet1['A1:B5']# 第一行的第一列即a1
rng=sheet1[0,0] # B1单元格
rng=sheet1[0,1]

在读取到每一行,每一列的数据之后,我们就可以对这些数据进行加工,然后写回 excel 了。

xlwings 写入 Excel

现在来实现一个小小的需求:针对上述读取的 Excel,我们现在来统计分数的总和及平均数,并写入 Excel 的最后行。

import xlwings as xwwork_book = xw.Book('测试.xlsx')sheet1 = work_book.sheets[0]print(sheet1.book)#last_cell = sheet1.used_range.last_cell
last_row = 4
last_col = 5## 获取分数的列索引
score_col_index = ""for cell in sheet1.range((1,1),(1,last_col)):if cell.value == '分数':score_col_index = cell.column## 将分数存入列表
score_list = []for row in range(2,last_row+1):cell = sheet1.range((row,score_col_index))score_list.append(cell.value)print(score_list)
sum_score = sum(score_list)
avg_score = sum(score_list) / len(score_list)## 计算出结果后写入 excelsheet1.range((last_row + 1,1)).value = "合计"
sheet1.range((last_row + 1,last_col)).value = sum_scoresheet1.range((last_row + 2,1)).value = "平均值"
sheet1.range((last_row + 2,last_col)).value = round(avg_score,2)work_book.save()
work_book.close()

代码的逻辑非常简单,首先获取分数所在的列,然后将所有的分数取出来保存在列表中,对其求和,求平均值,然后写回 Excel 的最后一行。

Excel 中插入图表

生成图表在 Excel 也是很常见的需求,除了可以用 Excel 本身的图表之外,还可以借助 Python 来插入图表。

比如说现在有一个股票的数据,我们用 Python 生成该股票的走势图,并插入到 Excel 中。

这里借助了 pandas 库,使用前请 pip install pandas 安装一下。

import xlwings as xw
import pandas as pdwb = xw.Book('300369.xlsx')sheet1 = wb.sheets[0]
print(sheet1.range('A1:D3').value)data_frame = sheet1.range('A1:D354').options(pd.DataFrame).value
data_frame.drop(columns = ["股票代码","名称"],inplace = True)
print(data_frame.head())ax = data_frame.plot()
fig = ax.get_figure()
sheet1.pictures.add(fig, name = '绿盟科技', update = True)
wb.save()

最终的效果如下:

Excel 转 Pdf

将一个工作簿转换为 Pdf 非常简单,一行代码就可以搞定:

import xlwings as xwwb = xw.Book('300369.xlsx')
sheet1 = wb.sheets[0]
sheet1.to_pdf(path= '300369.pdf')

拆分与合并

现在,我们来解决这个问题:如何快速地批量处理内容相似的 Excel?

批量拆分: 假设你是公司的财务人员,你需要使用 Excel 对员工工资进行核算,之后再打印出来。但是公司要求员工薪水保密,所以每个员工的工资需要拆分成一个独立的文件,最后再转成 pdf 通过邮件发送出去。

excel 内容大致如下:

拆分后:

代码如下:

import xlwings as xwwork_book = xw.Book('excel拆分练习.xlsx')sheet1 = work_book.sheets[0]print(sheet1.book)last_cell = sheet1.used_range.last_cell
last_row = last_cell.row
last_col = last_cell.column"""
定义缓存
"""
head_titles = []
rows_content = []
for i in range(last_row - 1):rows_content.append([])"""
读取 excel 内容至缓存
"""
for cell in sheet1.range((1,1),(1, last_col)):head_titles.append(cell.value)col_index = 0
row_index = 0
for cell in sheet1.range((2,1),(last_row, last_col)):rows_content[row_index].append(cell.value)col_index += 1if col_index % last_col == 0:row_index += 1col_index = 0"""
将缓存写入 excel
"""# 遍历 rows_contentfor index, row in enumerate(rows_content):work_book = xw.Book()sheet1 = work_book.sheets[0]for col_index, col in enumerate(row):sheet1.range((1,col_index + 1)).value = head_titles[col_index]sheet1.range((2,col_index + 1)).value = colwork_book.save(f'{row[0]}.xlsx')work_book.close()

批量合并。假设你需要对某些工作内容进行问卷调查,这时你用 Excel 做了调查问卷模版。我想你会这样做:先把 Excel 通过工作群分发给所有员工,再把群里收集到的反馈附件汇总成一个文件。

现在你可以仿照上面拆分的方法来进行批量合并。

将 excel 内容转为 REST API

执行:

xlwings restapi run -host 0.0.0.0 -p 5000

就可以将已打开的 excel 文件内容转换为  REST API 接口:

然后就可以远程访问:

最后的话

xlwings 很强大,本文抛砖引玉,如果经常使用的话,还是到官方文档[1]去获取更多方法。

另外本文的代码及样例文件:https://gitee.com/somenzz/code-example/tree/master/excel[2]

都看到这里来了,说明你也是个爱学习的人,点赞在看支持一下吧,如果还没关注的话,可以关注一下,顺手学个 Python 实用技巧。感谢关注。

留言讨论

参考资料

[1]

官方文档: https://docs.xlwings.org/en/stable/

[2]

https://gitee.com/somenzz/code-example/tree/master/excel: https://gitee.com/somenzz/code-example/tree/master/excel

Python自动化办公-让 Excel 飞起来相关推荐

  1. python自动化办公:excel篇,从此做表不加班。

    表格讲解 表格格式 表格分为:工作簿,工作表,单元格 如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表. xlrd +xlwt读写表格 因为电脑右键新建的 ...

  2. Python 自动化办公之 Excel 对比工具

    作者 | 周萝卜 来源丨萝卜大杂烩 今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于 ...

  3. Python 自动化办公之 Excel 拆分并自动发邮件

    作者 | 周萝卜 来源 | 萝卜大杂烩 今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 ...

  4. Python自动化办公之Excel对比工具

    今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于工作当中经常需要对比前后两个 Exc ...

  5. Python自动化办公之Excel拆分并自动发邮件

    今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要向大约 500 名用户发送带有 E ...

  6. Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

    前言 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在自动化办公方面具有极大的优 势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定办公需求.快速下班回 ...

  7. python与word交互_[Python] 自动化办公 邮件/Excel/Word交互快速生成介绍信

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: imbox 读取邮件解析附件 openp ...

  8. Python 自动化办公:Excel 自动绘制图表

    今天的主题是 Excel,相信大家都比较熟悉吧.而且我相信,大家在日常使用 Excel 的时候,肯定会遇到很多重复繁琐的工作,因为我也同样遇到过.这个时候我通常都会思考下,有没有办法让繁琐的事情变得简 ...

  9. Python自动化办公之 Excel 自动绘制图表

    今天的主题是 Excel,相信大家都比较熟悉吧.而且我相信,大家在日常使用 Excel 的时候,肯定会遇到很多重复繁琐的工作,因为我也同样遇到过.这个时候我通常都会思考下,有没有办法让繁琐的事情变得简 ...

最新文章

  1. Learning by doing 系列文章(之一)如何在 Python 中使用 epoll ?
  2. Servlet跳转到jsp页面的几种方法
  3. 在ubuntu下安装memcache
  4. python连接sqlite数据库的代码_Python3实现连接SQLite数据库的方法
  5. python实现用线程爬虫 快速高效爬数据
  6. python 查找IP地址归属地
  7. 打开eclipse报错 Version 1.7.0_80 of JVM is not suitable for this product
  8. 微信公众平台开发中提示“该公众号提供的服务出现故障”问题解决
  9. 黑苹果驱动_黑苹果目前已可以完美驱动内置intel WiFi
  10. Android 如何隐藏应用程序的图标
  11. 【萌新教学】ESP8266项目初试网页聊天室(附源码)
  12. HTML5之帆布(canvas)(一)
  13. 验证码(CAPTCHA)
  14. 公司信贷基础知识介绍
  15. 【Django】settings
  16. 修改Windows 8中文输入法切换方式
  17. 互联网早报:阿里巴巴淘菜菜发布“本地菜”计划,直连近300个菠菜种植基地
  18. 学计算机电脑屏幕小可以吗,电脑显示器大小怎么调整
  19. 炒股流程|开户流程|如何炒股
  20. 企业微信小程序开发者登录结果不对问题

热门文章

  1. 我最喜欢的油猴脚本——可以追跑某盘SVIP
  2. 面对山西黑砖窑虐待窑工 谁还在无动于衷
  3. 专业文件对比工具:Beyond Compare 4.2.7
  4. BOLL指标与KDJ指标的综合运用
  5. 【剑指金九银十】今天来谈一下一份高质量「简历」是如何撰写出来的
  6. 【Google Colab】使用手册、教程;使用 Google Colab 免费使用 python 服务器
  7. ZZULIOJ--1227: 漂亮菱形
  8. phpStudy基本用法
  9. phpstudy 丢失php5ts_phpstudy添加PHP
  10. C#CAD二次开发视频全套介绍及基础环境搭建