欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

你精通excel吗?不,我精通python操控excel!

程序员文章站 2022-06-15 11:54:05
过去,在很多金融、市场、行政的招聘中,面试官都会问一句:“你精通 EXCEL 吗?” 但今天,他们可能更喜欢问:“你会 Python 吗?” 越来越多的企业开始用 Python 处理数据,特别是金融、证券、商业、互联网等领域。在*公司的高端职位中,Python 更是成为了标配: Python 究竟 ......

过去,在很多金融、市场、行政的招聘中,面试官都会问一句:“你精通 excel 吗?”

但今天,他们可能更喜欢问:“你会 python 吗?”

越来越多的企业开始用 python 处理数据,特别是金融、证券、商业、互联网等领域。在*公司的高端职位中,python 更是成为了标配:

你精通excel吗?不,我精通python操控excel!

你精通excel吗?不,我精通python操控excel!

python 究竟有什么法力能让大家如此青睐?

举个例子:在过去,如果老板想要获取 a 股所有股票近 2 年的数据,你可能需要 查询-下载-记录到excel 循环数百次,即使你是一个没有感情的复制机器人,也需要一两天的时间。

但如果你掌握了 python,只需要写个脚本,泡杯咖啡的功夫 数据就全部下载好了。再加上 python 强大的绘图功能,你可以一次性完成 数据收集 — 整理 — 分析 — 绘图的过程,直接把分析结果用图表呈现出来。

你精通excel吗?不,我精通python操控excel!

今天本篇文章,我们就总结了一下利用 python 操作 excel 文件的第三方库和方法。内容出自课程——《openpyxl 处理 excel 基础入门》,欢迎大家来实验边敲代码边学习~

课程地址:

你精通excel吗?不,我精通python操控excel!

首先,我们来学习一下,如何 用 python 创建和保存 excel 文档。

对于经常与数据打交道的人来说,excel 是经常使用的工具;对于与数据打交道的程序员来说,openpyxl 库是一个利器。python 官方提供了这样一个库,让我们可以直接通过 python 代码实现对 excel 文件的操作,操作文件格式包括 xlsx、xlsm、xltx、xltm。

知识点

  • 创建/打开工作簿
  • 访问工作表单元及其值
  • 保存工作表

让我们先来学习简单的创建和保存功能。

创建/打开工作簿

首先,下载实验所需 shiyanlou.xlsx 示例文件,同时安装指定版本的 openpyxl 库。

!wget -nc "https://labfile.oss.aliyuncs.com/courses/1585/shiyanlou.xlsx"
!pip install openpyxl==3.0.3

使用 openpyxl 不需要在文件系统上创建文件,只需导入 workbook 类并开始工作:

教学代码:

from openpyxl import workbook

wb = workbook()  # 实例化一个工作簿对象

print(wb)

也可以打开本地已有的工作簿进行实验操作:

from openpyxl import load_workbook

wb = load_workbook(filename='shiyanlou.xlsx')

print(wb)

load_workbook 中可以使用以下几个参数:

  • data_only:带有公式的单元格是否具有公式(默认具有)或上一次 excel 读取工作表时存储的值。
  • keep_vba:设置是否保留任何 visual basic 元素(默认保留),可选择保留但是不支持编辑。

工作簿创建时总是会默认创建一个名为 sheet 工作表,可以通过使用workbook.active 属性获取:

ws = wb.active  # 获取当前活跃的工作表
print(ws)

也可以通过 workbook.create_sheet() 创建工作表并命名,若不设置名字参数则默认命名为 sheet,sheet1,sheet2...创建的工作表位置默认总是插入到最后:

ws = wb.create_sheet() # sheet
ws1 = wb.create_sheet("mysheet")  # 命名为 mysheet
ws2 = wb.create_sheet("mysheet1", 0)  # 新建 mysheet1 工作表插入到第一个位置
ws3 = wb.create_sheet("mysheet2", -1)  # 新建 mysheet2 工作表插入到倒数第二个的位置
ws.title = "shiyanlou"  # 将上述 ws 工作表重命名为 shiyanlou

print("success")

默认情况下,工作表的标签背景颜色为白色。我们可以通过worksheet.sheet_properties.tabcolor 属性改变颜色:

ws.sheet_properties.tabcolor = "1072ba"  # rgb 格式
print(ws.sheet_properties.tabcolor)

你精通excel吗?不,我精通python操控excel!

 

我们给工作表取名后,可以把它作为该工作簿的一个键,简化后续代码,例如:

ws = wb["shiyanlou"]
print(ws)

若想查看该工作簿下的所有工作表,可以通过函数 workbook.sheetname

print(wb.sheetnames)

也可以通过迭代的方式打印所有工作表

for sheet in wb:
    print(sheet.title)

我们可以通过 workbook.copy_worksheet() 方法在单个工作簿中创建工作表的副本:

source = wb.active  # 获取活跃的工作表
target = wb.copy_worksheet(source)  # 上述获取的工作表为其创建副本

print(target)

访问工作表单元及其值

前面我们已经知道了如何创建获取工作簿及工作表,接下来我们将学习修改单元格的内容。以下操作基于 shiyanlou.xlsx 工作簿中的 shiyanlou 工作表进行。单元格可以直接作为工作表的键进行访问赋值,用 value 属性进行值访问:

c = ws['a4']  # 将访问 a4 单元格
ws['a4'] = 4  # 对 a4 单元格进行赋值

c.value  # 访问 a4 单元格的值,同 ws['a4'].value

注意:在内存中创建工作表时,它不包含任何单元格,单元格都是在首次访问时自动创建的。以上代码也可以通过更简便的代码实现:

d = ws.cell(row=4, column=2, value=10)  #  b4 进行赋值

ws['b4'].value  # 访问单元格的值

访问多个单元格

可以使用切片访问范围为 a1 到 c2 的所有单元格:

cell_range = ws['a1':'c2']

cell_range

行或列的范围可以类似地获得:

# 访问列
colc = ws['c']
col_range = ws['c:d']

# 访问行
row10 = ws[10]
row_range = ws[5:10]

print(col_range, row_range)

也可以使用 worksheet.iter_rows() 返回行:

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell_row in row:
        print(cell_row)

使用 worksheet.iter_cols() 返回列:

for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
    for cell_col in col:
        print(cell_col)

如果需要遍历工作表的所有行或列,则可以使用 worksheet.rows 属性。出于性能原因,该属性在只读模式下不可用:

ws['c9'] = 'hello world'
tuple(ws.rows)

或者使用 worksheet.columns 属性。出于性能原因,该属性在只读模式下不可用:

tuple(ws.columns)

访问值

如果只需要工作表中的值,则可以使用该 worksheet.values 属性。遍历工作表中的所有行,但仅返回单元格值:

for row in ws.values:
    for value in row:
        print(value)

worksheet.iter_rows() 和 worksheet.iter_cols() 可以用 values_only 参数,只返回单元格的值:

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=true):
    print(row)

保存工作表

将我们之前创建的工作簿保存格式为 xlsx 的文件,若已存在则覆盖:

wb.save("shiyanlou.xlsx")