用Python读取excel文件的指定单元格

结论

常用的读取Excel文件数据的Python库有3种:
(1)xlrd
(2)openpyxl
(3)pandas

读取xlsx或者xlsm文件,选择openpyxl和pandas提供的接口;如果是xls文件,可以选择xlrd。

这里记录一下我在读取.xlsm文件过程中遇到的问题、以及验证通过的代码。

代码示例

准备工作:

通过PyCharm的[File - Settings]分别下载了xlrd、openpyxl、pandas的最新版本。

用Python读取excel文件的指定单元格_第1张图片

1.xlrd

【遇到的问题】

用xlrd的方法来读取.xlsm文件:

Workbook = xlrd.open_workbook("D:\\Test\\src1.xlsm")

报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported

【解决方案】

下面这篇文章里提到:“xlrd包的版本过高(2.0.1),不支持xlsx格式,只支持xls格式。”

https://blog.csdn.net/qq_45975931/article/details/128379809

里面提供了2种解决方法:

一、调低xlrd版本
二、调低excel版本

方法1我不想尝试,因为不知道低版本会不会引来其他问题。

方法2就是把xlsm文件另存为.xls格式,读取.xls文件的数据。结果是可行的。

下面是运行OK的代码:

import xlrd

def read_data():

    # 指定xls文件路径
    workbook = xlrd.open_workbook("D:\\Test\\src1.xls")

    # 指定sheet名称
    sheet = workbook.sheet_by_name('SampleSheet')

    # 从0开始计数,5行3列,相当于'D6'单元格
    row = 5
    col = 3
    value = sheet.cell_value(row,col)

    print(value)

但是这样做代码逻辑就变成了①先把xlsm转存为xls,②读取数据,③删除临时文件。我觉得太多余了,所以试了另外两个库。

2.openpyxl

用openpyxl的load_workbook方法读取.xlsm文件,结果可行。

代码如下:

from openpyxl import load_workbook


def read_data():

    # 指定文件路径,data_only属性作用是取值,不取公式
    workbook = load_workbook(filename="D:\\Test\\src1.xlsm", data_only=True)

    # 指定sheet页
    sheet = workbook["SampleSheet"]

    # 取D6单元格的值
    result = sheet["D6"].value
    print('Result:'+result)

    workbook.close()

3.pandas

用pandas的read_excel方法读取.xlsm文件,结果可行。

代码如下:

import pandas as pd

def read_data():

    # 指定文件路径和sheet名称,不设置header
    df = pd.read_excel("D:\\Test\\src1.xlsm",sheet_name='SampleSheet',header=None)

    # 从0开始计数,5行3列,相当于D6单元格
    result = df.iloc[5,3]

    print('result:'+result)

另外,pandas还有read_csv方法用于读取csv文件,to_csv用于生成csv文件。

最后选择用pandas库来实现我需要的功能。

你可能感兴趣的:(Python学习,python,开发语言,pandas)