python读取Excel指定单元格的值

使用openpyxl实现

只支持xlsx文件,不支持xls

import openpyxl


def read_cell(io, sheet, cell='A2'):
    """
    读取单元格
    :param io: Excel文件路径
    :param sheet: 读取哪一张表,str, int   eg: 'Sheet1' or 0
    :param cell: 读取哪一个单元格
    :return: value --> str
    """
    excel = openpyxl.load_workbook(io)
    if isinstance(sheet, str):
        ws = excel[sheet]
    elif isinstance(sheet, int):
        name = excel.sheetnames[sheet]
        ws = excel[name]
    else:
        raise TypeError('sheet must be int or str, not %s' % type(sheet))
    val = ws[cell].value
    if val:
        return val
    return ''

使用xlrd实现

只支持xls(version > 2.x),既支持xls又支持xlsx(version < 2.x)

import xlrd


def get_index(capital):
    """
    大写字母(Excel列头)转数字
    :param capital: 'A' --> 0, 'AA' --> 26
    :return: int
    """
    number = 0
    capital = capital.upper()
    for char in capital:
        number = number * 26 + ord(char) - ord('A') + 1
    return number - 1


def read_cell(io, sheet, cell='A1'):
    """
    读取单元格
    :param io: Excel文件路径
    :param sheet: 读取哪一张表,str, int   eg: 'Sheet1' or 0
    :param cell: 读取哪一个单元格
    :return: value --> str
    """
    wb = xlrd.open_workbook(io)
    if isinstance(sheet, str):
        ws = wb.sheet_by_name(sheet)
    elif isinstance(sheet, int):
        ws = wb.sheet_by_index(sheet)
    else:
        raise TypeError('sheet must be int or str, not %s' % type(sheet))
    pos_col, pos_row = re.findall('[A-Z]+|[0-9]+', cell)
    col_index = get_index(pos_col)
    value = ws.col_values(col_index, start_rowx=int(pos_row) - 1, end_rowx=int(pos_row))
    if value:
        return value[0]
    return ''
<think>嗯,用户想知道如何用Python的pandas或openpyxl读取Excel中的定单数据。首先,我需要回忆一下这两个库的用法。记得pandas主要是处理数据框,通常用于读取整个表或特定行列,而openpyxl更偏向于单级别的操作。 根据引用[1],用户提到使用pandas的iloc方法读取定列的数据,比如df.iloc[0:,[0]]。不过要获取具体单可能需要用iloc的行列索引,比如df.iloc[行号, 列号]。但需要注意索引是从0开始的。比如第3行第2列应该是iloc[2,1]。 然后引用[3]里提到openpyxl可以更灵活地操作单,比如ws.cell(row=行号, column=列号).value。这里要注意openpyxl的行列号是从1开始的,和pandas不同。例如,单B3就是row=3, column=2。 用户可能需要比较两种方法的优缺点。pandas适合处理结构化数据,适合批量读取,而openpyxl适合需要精细操作的情况,比如修改单样式或者读取定单而不加载整个表。 另外,引用[2]中的代码示例显示使用openpyxl读取内容,但用户代码中可能没有正确加载工作表。需要确保在openpyxl中先加载工作簿,然后选择工作表,再访问单。 可能用户还会关心异常处理,比如单不存在时的错误处理,或者如何处理大型文件时的性能问题。不过用户的问题主要是方法,所以先给出基本用法,再提到注意事项。 需要检查是否有其他细节,比如pandas是否需要依赖openpyxl引擎来读取.xlsx文件,特别是较新版本的Excel文件。在pandas的read_excel中,定engine='openpyxl'是必要的,如引用[1]中的例子。 总结步骤:对于pandas,使用iloc或at方法;对于openpyxl,使用cell()方法。注意行列索引的起始不同,以及是否需要加载整个文件。</think>### 使用Python读取Excel定单数据的方法 #### 1. 使用pandas读取定单数据 pandas通过`iloc`或`at`方法实现精确单读取。 **步骤**: 1. 读取Excel文件,定工作表: ```python import pandas as pd df = pd.read_excel("test.xlsx", engine="openpyxl", sheet_name="表1") ``` 2. 通过行列索引定位单: - `iloc`方法(基于0的索引): ```python # 读取第3行第2列的单(索引从0开始) value = df.iloc[2, 1] ``` - `at`方法(标签或索引混合使用): ```python # 读取行标签为2,列标签为B的单(需已知列名) value = df.at[2, "B"] ``` **注意**:若需直接通过单坐标(如B3)读取,需结合`openpyxl`解析列字母为索引[^1]。 --- #### 2. 使用openpyxl读取定单数据 openpyxl支持直接通过行列号访问单,适用于精细操作。 **步骤**: 1. 加载工作簿并选择工作表: ```python from openpyxl import load_workbook wb = load_workbook("test.xlsx") ws = wb["表1"] ``` 2. 读取定单(行列号从1开始): ```python # 读取B3单(行=3,列=2) value = ws.cell(row=3, column=2).value ``` **优势**:无需加载整个表,适合处理大文件或仅需少量单的场景[^3]。 --- #### 两种方法对比 | **方法** | **适用场景** | **索引起点** | **性能** | |------------|----------------------------|--------------|----------------| | pandas | 批量读取结构化数据 | 从0开始 | 适合中小型文件 | | openpyxl | 精确操作单或修改样式 | 从1开始 | 适合大型文件 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值