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

目录

    • 前言
    • 简介
    • Openpyxl函数简介
      • 1.安装
      • 2.引入模块
      • 3.获取workbook
      • 4.获取工作簿
      • 5.根据工作簿获取行列
      • 6.操作行数据、列数据
      • 7.遍历
      • 8.保存表格
    • 实战
      • 场景说明
      • 代码实战
      • 执行结果

前言

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

简介

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

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表中编号对应的部门进行补全。表格如下图
Excel处理利器之openpyxl(内含实战代码)_第2张图片
Excel处理利器之openpyxl(内含实战代码)_第3张图片

代码实战

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")

执行结果

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

你可能感兴趣的:(python,excel,python,开发语言)