You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用Openpyxl读取XLSX文件异常:仅读1行1452列求解决方案

解决XLSX文件读取仅1行1452列的问题

嘿,这个问题我之前也碰到过——你直接把openpyxl的Workbook对象丢给pandas的DataFrame构造函数,这可不是正确的打开方式哦😉

问题根源

openpyxl的Workbook是整个Excel文件的容器,包含所有工作表、样式、元数据等信息,它本身并不是一个二维表格结构。当你直接执行pd.DataFrame(wb)时,pandas会把Workbook对象拆解成它的内部属性序列,自然就会出现只有1行、却有大量列(对应Workbook的各种属性)的奇怪结果。

两种正确的解决方法

方法1:直接用pandas读取(最简单)

如果不需要先用openpyxl处理Excel文件,直接用pandas的read_excel方法就可以完美读取,它默认会调用openpyxl作为.xlsx格式的解析引擎:

import pandas as pd

# 直接读取,默认读取第一个工作表
df = pd.read_excel(r'path')
# 如果要指定工作表,用sheet_name参数,比如读取名为"Sheet2"的表
# df = pd.read_excel(r'path', sheet_name="Sheet2")
print(df)

方法2:结合openpyxl处理后转成DataFrame

如果你需要先用openpyxl做一些预处理(比如修改单元格内容、处理特殊样式等),那得先获取具体的工作表,再把工作表的数据转换成DataFrame:

import openpyxl
import pandas as pd

wb = openpyxl.load_workbook(r'path')
# 获取活动工作表,或者用wb["你的工作表名"]指定具体表
ws = wb.active

# 把工作表的所有单元格值转换成列表,ws.values会按行生成数据
data_rows = list(ws.values)

# 如果第一行是表头,就用第一行做列名,后面的行做数据
df = pd.DataFrame(data_rows[1:], columns=data_rows[0])
# 如果没有表头,直接用所有行作为数据
# df = pd.DataFrame(data_rows)

print(df)

额外提示

如果你的Excel里有合并单元格,openpyxl读取时只会保留合并区域左上角单元格的值,其他合并单元格会显示为None,这时候可能需要额外处理合并单元格的内容填充,不过这是另一个场景的问题啦。

内容的提问来源于stack exchange,提问作者Michał

火山引擎 最新活动