同福

Python使用openpyxl读取excel文档数据的技巧【20211206】

介绍

介绍

福哥今天要带着大家学习使用Python读取Excel文档的方法,Python读取Excel文档推荐使用openpyxl库,这个库接口友好、效率高,可以让我们简简单单地将Excel里面的数据读取出来使用。

安装

安装openpyxl库。

使用的是openpyxl库,直接通过pip安装即可。

pip install openpyxl

home/topic/2021/1206/17/a2ca71291dc44be88896cee76d9c1530.png

读文档

这里有一个测试用的excel文档,我们等下会用openpyxl读取它的数据。

home/topic/2021/1207/16/a9325b57c03d10114d429b8066c5552b.png

默认格式

我们使用最简单的方式读取这个报表的内容,遍历过程没有进行特别的加工,很直观~~

福哥整理了步骤:load_workbook > worksheets > worksheet > rows > row > cell > cell.coordinate, cell.value,大家可以记住这个层级关系!

import openpyxl

workbook = openpyxl.load_workbook("openpyxl.xlsx")

allSheetDatas = None
if workbook is not None and workbook.worksheets is not None:
    # cycle sheets
    allSheetDatas = []
    for d in range(0, len(workbook.worksheets)):
        mySheet = workbook.worksheets[d]

        # cycle rows
        sheetDatas = []
        for row in mySheet.iter_rows():

            # cycle cell
            sheetRow = {}
            for cell in row:
                sheetRow[cell.coordinate] = cell.value

            # save row
            sheetDatas.append(sheetRow)

    # save sheet
    allSheetDatas.append(sheetDatas)

# dump
if allSheetDatas is not None:
    for d in range(0, len(allSheetDatas)):
        for e in range(0, len(allSheetDatas[d])):
            print(d, e, allSheetDatas[d][e])

home/topic/2021/1207/16/353d221c4cf207d5cb8b61770d729c05.png

数据表格式

大家可以看到这个导出的格式和Excel上面看到的是颠倒的,列头在最左边,数据在右边,很不方便查看。

福哥整理了一个排列的代码,可以将这个颠倒的格式“正”过来!

import openpyxl
import re

workbook = openpyxl.load_workbook("openpyxl.xlsx")

allSheetDatas = None
if workbook is not None and workbook.worksheets is not None:

    # cycle sheets
    allSheetDatas = []
    for d in range(0, len(workbook.worksheets)):
        mySheet = workbook.worksheets[d]

        # cycle rows
        dataTableField = []
        dataFieldRow = None
        sheetDatas = []
        for row in mySheet.iter_rows():

            # cycle cell
            sheetRow = {}

            if dataFieldRow is None:
                dataFieldRow = {}
                for cell in row:
                    colChar = re.sub(r"\d+", "", cell.coordinate)
                    dataFieldRow[colChar] = cell.value

                continue
            else:
                dataRow = {}
                for cell in row:
                    colChar = re.sub(r"\d+", "", cell.coordinate)
                    sheetRow[dataFieldRow[colChar]] = cell.value

            # save row
            sheetDatas.append(sheetRow)

    # save sheet
    allSheetDatas.append(sheetDatas)

# dump
if allSheetDatas is not None:
    for d in range(0, len(allSheetDatas)):
        for e in range(0, len(allSheetDatas[d])):
            print(d, e, allSheetDatas[d][e])

home/topic/2021/1207/16/69c13eec393e55590a25b8e8dcf2173b.png

总结

今天福哥带着童鞋们学习了Python的openpyxl库的使用方法,通过openpyxl库可以快速地将Excel当中的数据读取出来,形成一个二维的dict结构,便于我们进行加工处理。

下一课,我们会学习使用openpyxl库创建、编写Excel文档的技巧,敬请期待~~