Excel处理利器之openpyxl(内含实战代码)

前言

   最近工作中接触excel比较多,很多重复性的工作搞得我非常不爽,于是想先学习一下excel处理,方便在后面的工作中用脚本取代手工处理,这样又可以多出几个小时用来摸鱼。🤩🤩🤩
   至于为什么要用python去处理而不是java,说实话python写起来确实要比java简洁很多,说到底还是为了省事,哈哈哈哈哈。

简介

   我们简单说一下python能处理excel的三方类库,通过下面表格可以看出各个类库适配的不同内容。根据我的需求,我选择了opepyxl。
   openpyxl是一个用于读取/编写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它是由于缺乏从Python中读取/编写Office Open XML格式的现有库而诞生的。所有这些都归功于PHPExcel团队,因为openpyxl最初是基于PHPExcel的。
在这里插入图片描述

Openpyxl函数简介

   学习东西,笔者一般是本着用多少学多少得原则,坚决不学毫无用处得东西,因此介绍时,笔者也会从实战得角度去介绍一些常用得api,其他内容请移步官方文档进行资料查询。😜😜😜

1.安装

pip install openpyxl

2.引入模块

import openpyxl
from openpyxl.workbook import Workbook

3.获取workbook

   这里面我们不需要在文件系统中创建一个workbook,直接引入就可以使用。还有一种常用的方式就是读取一个文件。

# 引入wb
wb = Workbook()
# 读取一个文件
wb = openpyxl.load_workbook(excel_url)

4.获取工作簿

 # insert at the end (default)
 ws1 = wb.create_sheet("Mysheet")
 # insert at first position
 ws2 = wb.create_sheet("Mysheet", 0)
 # insert at the penultimate position
 ws3 = wb.create_sheet("Mysheet", -1) 
 # 同样我们可以读取已经存在的工作簿
 ws = wb['Sheet1']
 # 我们还能对工作簿名称进行设置
 ws.title = "Sheet999"

5.根据工作簿获取行列

 # 获取sheet页最大行数
 ws.max_row
 # 获取sheet页最大列数
 ws.max_column

6.操作行数据、列数据

# 获取A4单元格
c = ws['A4']
# 直接给A4单元格赋值
ws['A4'] = 4
# 还可以通过行列索引去设置对应单元格的值
ws.cell(row=4, column=2, value=10)

7.遍历

# 通过起始行 最大行 最大列 遍历
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell in row:
        print(cell)
        
# 通过最大行数去逐行遍历
 for row in max_row:

# 通过最大列数去逐列遍历
 for cell in max_column:

8.保存表格

wb.save('~/tmp/excel.xlsx')

实战

   我们通过一个简单得例子来运用上面学到的方法去操作excel,进行excel的读写。

场景说明

   我们有个字典表格sheet2,里面标明了编号对应的部门,另外一个表格sheet1中第一列列出了很多的编号,我想通过脚本把sheet1表中编号对应的部门进行补全。表格如下图
在这里插入图片描述
在这里插入图片描述

代码实战

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet

def read_excel(excel_url):
    return openpyxl.load_workbook(excel_url)


 # 获取sheet页最大行数
def get_max_row(ws):
    return ws.max_row

# 获取sheet页最大列数
def get_max_columns(ws):
    return ws.max_column

def rows_all(ws):
    return ws.rows

def cols_all(ws):
    return ws.columns

if __name__ == '__main__':
    wb = read_excel("/Users/scott/tmp/test.xlsx")

    s1 = wb['Sheet1']
    s2 = wb['Sheet2']
    s1_cols = s1['A']

    all_rows_s1 = rows_all(s1)

	# 将sheet2中对应关系进行key value存储
    dict_map = {}
    s2_all_rows = rows_all(s2)
    for row in s2_all_rows:
        cell_a = row[0]
        value_a = cell_a.value
        cell_b = row[1]
        value_b = cell_b.value
        dict_map[value_a] = value_b


    s1_max_col = 2
    s1_max_row_num = get_max_row(s1)+1
    # 遍历sheet1 通过编号取出对应部门然后依次写入
    for row_index in range(1, s1_max_row_num):
        col1_val = s1.cell(row=row_index, column=1).value
        value = dict_map.get(col1_val)
        s1.cell(row=row_index, column=s1_max_col, value=value)
	# 保存工作簿
    wb.save("/Users/scott/tmp/test.xlsx")

执行结果

在这里插入图片描述
可以看到,我们通过字典对应关系,已经在sheet1中将编号对应的部门全部填充完毕。
讲到这里,关于openpyxl类库的实战就告一段落了,一些基础的excel操作基本都能通过这些api实现。想要深入学习还需要自行去官网挖掘。感谢各位大佬观看!
点赞收藏,富婆包养✋✋

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码大师麦克劳瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值