利用 Python 处理 Excel 文件

作者: 匠人案牍 | 来源:发表于2020-01-14 13:53 被阅读0次

使用场景

日常办公的大多数场景都可能和数据打交道,此时我们第一个想到的便可能是 Excel,方便,简洁,拥有各种集合在一起的功能,相对而言其学习成本低一些。但对于一些专业性较强的行业来说,可能打开一个表格文件的时间已经可以喝一杯咖啡了,此时如果我们会使用脚本语言来处理文件,在时效上要快得多,本文将展示利用 openpyxl 来处理 excel 文件的功能,并且会结合一个小例子给出具体分析。

功能展示

基本准备工作

首先是 openpyxl 的安装,查看 python 的官方网站,我们可以用 pip 安装:

pip install openpyxl

当然如果你用的是 Python 3,也可以这样:

pip3 install openpyxl

安装好 openpyxl 库后,我们可以新建一个 .py 文件,并做好一些初始化的准备:

from openpyxl import load_workbook
import datetime
kaggleData = “Your_Excel_file_path” # 此处需要替换为你自己电脑上相应 excel 文件的位置
wb = load_workbook(filename=kaggleData,read_only=True) # 请注意,如果只是读取文件,尽量把 read_only 这个参数设置为 True,这对于较大的 excel 文件来说会有很大的性能提升
sheetNames = wb.sheetnames # 这将返回表格的所有表单名称,以列表形式

写入一个 Excel 文件

读取一个 Excel 文件的工作表,工作薄,每行每列及每个单元格

读取一个 Excel 文件的工作簿

“””读取每个工作表的名字,最大最小的行和列”””
def sheetRange(sheetName):
    minRow = sheetName.min_row
    minCol = sheetName.min_column
    maxRow = sheetName.max_row
    maxCol = sheetName.max_column
    rowRange = 0
    columnRange = 0
    if minRow >= 1:
        rowRange = maxRow - minRow + 1 
    if minCol >= 1:
        columnRange = maxCol - minCol + 1
    print(sheetName.title + “ rowRange: “ + str(rowRange) + “,columnRange: “ + str(columnRange))

读取某个指定的行
对于数据的提取,有时可能需要用到某个指定的行,可以按照下面的方法操作:

def typicalRow(sheetName,RowNumber): # sheetName 是工作簿的名字,RowNumber 是指要读取的指定行
    rowList = []
    minRow = sheetName.min_row
    minCol = sheetName.min_column
    maxRow = sheetName.max_row
    maxCol = sheetName.max_column
“””以下是一些简单的保护代码,在实际操作时可能要考虑到更具体的意外情况”””
    if maxRow < 1:
        errorMessage = sheetName.title + “ 没有内容”
        print(errorMessage)
    elif RowNumber not in range(minRow,maxRow+1):
        errorMessage = “您要查找的第 “ + str(RowNumber) + “ 行超出工作表范围”
        print(errorMessage)
    else:
        for column in range(minCol,maxCol+1):
            cell = sheetName.cell(RowNumber,column)
            rowList.append(cell.value)
    if len(rowList):
        return rowList

读取某个指定的列
就像刚才提到的,有时需要读取某个指定的列,可参考下面的方法:

def typicalColumn(sheetName,ColumnNumber):
    columnList = []
    minRow = sheetName.min_row
    minCol = sheetName.min_column
    maxRow = sheetName.max_row
    maxCol = sheetName.max_column   
    if maxCol < 1:
            errorMessage = sheetName.title + “ 没有内容”
            print(errorMessage)
    elif ColumnNumber not in range(minCol,maxCol+1):
        errorMessage = “您要查找的第 “ + str(ColumnNumber) + “ 列超出工作表范围”
        print(errorMessage)
    else:
        for row in range(minRow,maxRow+1):
            percentProcess = ‘{:.2%}’.format(row/maxRow) # 测试的文件有太多行,加入这一段代码显示进度
            message = "正在获取 " + sheetName.title + " 中的第 " + str(row) + " 行第 " + str(ColumnNumber) + " 列数据,共 " + str(maxRow) + "行,进度为 " + str(percentProcess) 
            print(message,end="\r")
            cell = sheetName.cell(row,ColumnNumber)
            columnList.append(cell.value)
    if len(columnList):
        return columnList

案例分析

自己用 Faker 库创建一些数据写入表格

关注我,第一时间获取更多有意思的 Python 内容.

匠人案牍.jpg

相关文章

网友评论

    本文标题:利用 Python 处理 Excel 文件

    本文链接:https://www.haomeiwen.com/subject/fzxaactx.html