openpyxl中直接读取某行某列值最简方式是ws['A1'].value或ws.cell(row=1, column=1).value,注意行列号从1开始;pandas中用df.iloc[r,c]或df.loc[label,col]精准切片,推荐加载时用usecols和skiprows限范围。

openpyxl 里怎么用坐标直接取单元格值
想跳过表头、跳过循环遍历,直接读某行某列的值,openpyxl 最简单的方式就是用类似 ws['A1'] 或 ws.cell(row=1, column=2) 这两种写法。前者是 Excel 风格坐标(字符串),后者是行列编号(整数),本质一样,但后者更方便动态计算。
注意:行号和列号都从 1 开始,不是 Python 的 0 起始 —— 这是新手最常踩的坑。比如想读第 3 行第 5 列,得写 ws.cell(row=3, column=5),而不是 row=2, column=4。
实操建议:
- 如果行列位置固定,用
ws['B7'].value最直观 - 如果行列由变量算出(比如循环中),务必用
ws.cell(row=r, column=c),避免拼接字符串出错 -
.value是必须加的,否则返回的是Cell对象,不是数据本身 - 空单元格返回
None,别直接拿去做数学运算,先判断
pandas 读 Excel 后怎么精准切片到某几行某几列
pandas.read_excel() 默认把整个 sheet 当成 DataFrame 加载进来,之后用 .iloc 或 .loc 切片是最稳的定位方式。关键区别在于:.iloc 按位置(整数索引),.loc 按标签(行名/列名)—— 大多数 Excel 没设行名,所以 .iloc 更常用。
立即学习“Python免费学习笔记(深入)”;
常见错误现象:用 df[2:5][['ColA', 'ColB']] 看似能取行和列,但实际是链式操作,可能触发 SettingWithCopyWarning,且列名不存在时直接报 KeyError。
实操建议:
- 取第 4–6 行、第 1 和 3 列(0 起始):用
df.iloc[3:6, [0, 2]] - 如果知道列名(比如 '销售额'、'日期'),且只要这两列的第 5 行:用
df.loc[4, ['销售额', '日期']] - 加载时就限制范围,能省内存:传
usecols='A:C'和skiprows=2参数,比全量读再切更快 -
read_excel(..., nrows=100)可限制只读前 N 行,适合调试大文件
openpyxl 和 pandas 选哪个?看场景
不是“哪个更好”,而是“哪边不翻车”。如果你只是读几个固定单元格(比如配置项、标题行、右下角签名),openpyxl 启动快、内存低、支持公式/样式/合并单元格等原生信息;但如果你要筛选、分组、算平均值或导出为 CSV,pandas 是唯一现实选择。
性能与兼容性影响:
-
openpyxl不能读 .xls(老版本),只支持 .xlsx/.xlsm/.xltx;pandas底层靠openpyxl或xlrd(旧版),但xlrd从 2.0 起已不支持 .xlsx,容易报Unsupported format - 10MB 以上 Excel,
pandas.read_excel()默认可能卡顿,加engine='openpyxl'显式指定更稳 - 含大量合并单元格时,
pandas会自动填充 NaN,而openpyxl保留原始结构,需手动处理merged_cells.ranges
读取失败时先盯住这三处
报错不是随机的,90% 出在路径、工作表名、单元格越界这三块。
常见错误信息和对应动作:
-
FileNotFoundError:检查路径里有没有中文空格,用os.path.exists()确认文件真实存在;Windows 下路径反斜杠要转义或用原始字符串r'C:\data\book.xlsx' -
KeyError: 'Sheet2':打开 Excel 看实际工作表名,右键标签名可能有空格或隐藏字符;用wb.sheetnames打印所有可用名 -
ValueError: Cell coordinates must be strings:混用了ws['A1']和ws.cell(1,1)的返回值,前者是Cell,后者也是Cell,但传参类型错了——比如误把整数当字符串传给ws[] - 读出来是
None或空字符串:该单元格真为空,或内容是公式但还没计算(openpyxl默认不执行公式),可设data_only=True加载
真正麻烦的不是语法,是 Excel 本身:合并单元格、隐藏行、自定义数字格式、不同区域用不同表头……这些都会让“定位”变成猜谜。动手前先用 Excel 手动点开目标单元格,确认它的行列号和所在 sheet,比查文档快得多。


















