使用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ł




