python openpyxl 读取xls 解决方案

本文介绍了一种将.xls文件转换为.xlsx文件的方法,并利用openpyxl库进行操作。通过Python脚本实现了文件格式的转换及数据读取验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,对xlrd 不喜欢,太繁琐(就是不会)

然后上次发现了openpyxl 用起来很简洁,好用,但是发现不支持xls 怎么办呢???

那就很好解决了,把xls 另存为xlsx 然后删掉 xls 就行了,然后用openpyxl 读取xlsx文件 

def replace_excel(folder_path, file_name):
    """
    excel  .xls 后缀 改成 .xlsx 后缀
    folder_path 文件夹路径
    file_name 文件名字 带后缀 比如 aa.xls
    """
    name, suffix = file_name.split('.')
    excel_file_path = os.path.join(folder_path, file_name)
    import win32com.client
    excel = win32com.client.gencache.EnsureDispatch('Excel.Application')  # 要看MIME手册
    wb = excel.Workbooks.Open(excel_file_path)
    suffix = f".{suffix}x"
    new_file_name = f"{name}{suffix}"
    new_excel_file_path = os.sep.join([folder_path, new_file_name])
    wb.SaveAs(new_excel_file_path, FileFormat=51)
    wb.Close()
    excel.Application.Quit()
    os.remove(excel_file_path)
    return new_excel_file_path

openpyxl 

excel_path = replace_excel(folder_path, file_name)
wb1 = load_workbook(filename=excel_path )
sheets = wb1.sheetnames  # 获取所有的表格
print(sheets)
sheets_first = sheets[0]  # 获取第一个表
ws1 = wb1[sheets_first]
print(ws1['A1'].value)
assert money == ws1['F2'].value, "下载文件内容显示不正确"
os.remove(excel_path )

由于那啥,我是直接从firefox 下载的xls文件

上面是我的下载地址

新转换的xlsx文件名与源文件一摸一样,只是后缀不同

MIME手册

更新时间--2022年10月24日--

最近在看 xlwings

import xlwings as xw
import os


def replace_excel(file_path):
    """
    file_path = r'C:\Users\FH\Desktop\test\test.xls'
    """
    app = xw.App(visible=True, add_book=False)
    example = app.books.open(file_path)
    example.save(f"{file_path}x")
    example.close()
    app.quit()
    os.remove(file_path)

这样实现的好处就是 不需要看MIME手册,更python,,但是还是不支持centos,,,

<think>好的,我现在需要帮助用户了解如何用Python读取XLS文件。首先,我得回忆一下自己之前学过的相关知识,同时结合用户提供的引用内容来整理答案。用户提到了四个引用,其中涉及到不同的库和方法,比如openpyxl、pandas、xlrd和xlwings,还有一些可能出现的错误,比如xlrd的CompDocError。 首先,我应该确定用户的主要需求是读取XLS文件的方法和推荐的库。根据引用内容,常用的库有xlrd、pandas、openpyxl和xlwings。不过需要注意的是,xlrd在2.0版本之后不再支持xls文件,所以可能需要降级xlrd版本或者使用其他库。引用4中使用了xlrd来读取XLS,而引用3提到了xlrd可能出现的错误,并提供用xlwings的解决方法。引用2和引用1则提到了pandas结合openpyxl的方法,但可能主要是针对xlsx文件,不过pandas也可以处理xls,可能需要引擎参数。 接下来,我需要分步骤回答用户的问题。首先介绍不同的方法,每个方法对应的库、代码示例以及优缺点。然后,给出推荐建议,帮助用户根据情况选择最合适的方法。最后,处理相关问题部分,生成几个相关问题,比如如何读取特定单元格、处理大文件的方法、解决常见错误等。 需要注意的是,用户提供的引用中有一些示例代码,比如引用4中的xlrd代码,引用2中的pandas代码,引用3中的xlwings解决方法。这些代码可以作为示例整合到回答中,但要确保语法正确,并且使用正确的中文描述。同时,要避免使用用户不可见的格式,但根据系统级指令,数学表达式需要使用$...$,但在这个问题中可能用不上,不过其他格式如代码块需要用正确的方式展示。 另外,用户可能遇到的错误,比如xlrd的CompDocError,需要解释原因并提供解决方法,如降级xlrd或使用其他库。引用3中提到了使用xlwings的解决方法,这也是一个重要的点,应该包含在回答中。 最后,生成相关问题时要围绕用户的问题扩展,考虑可能相关的子问题,比如性能优化、处理不同版本的Excel文件、数据处理的后续步骤等。 总结一下,回答的结构应该是: 1. 引言:说明有多种方法,介绍常用库。 2. 方法一:使用xlrd库,代码示例,注意版本问题。 3. 方法二:使用pandas,结合引擎参数。 4. 方法三:使用xlwings处理复杂文件。 5. 推荐建议:根据具体情况选择。 6. 常见问题:解决CompDocError的方法。 7. 相关问题:生成三个相关问题。 需要确保每个部分都参考了用户提供的引用,并在适当的位置添加引用标识。例如,在提到xlrd的版本问题时引用引用3,在pandas的示例中引用引用2和引用1,在xlwings的解决方法中引用引用3。 现在需要将这些思路整理成结构清晰的中文回答,并确保代码示例正确,引用正确标注。</think>### 使用Python读取XLS文件的方法及库推荐 以下是Python读取XLS文件的常用方法及库推荐,结合不同场景和需求提供具体实现方案: --- #### 方法一:使用`xlrd`库(适合基础操作) `xlrd`是经典的Excel文件读取库,但需注意其2.0版本后不再支持`.xls`格式,需安装旧版本: ```python # 安装旧版本xlrd pip install xlrd==1.2.0 # 示例代码 import xlrd excel = xlrd.open_workbook("path/to/file.xls") # 打开文件[^4] sheet = excel.sheet_by_index(0) # 选择第一个工作表 rows = sheet.row_values(0) # 获取第一行数据 print(rows) ``` **优点**:简单易用,适合快速读取数据。 **缺点**:高版本不支持`.xls`,且对复杂格式兼容性较差。 --- #### 方法二:使用`pandas`(适合数据处理) `pandas`结合`openpyxl`或`xlrd`可高效读取Excel文件: ```python # 安装依赖 pip install pandas xlrd openpyxl # 示例代码 import pandas as pd df = pd.read_excel("file.xls", engine="xlrd") # 指定引擎[^2] print(df.head()) # 显示前5行数据 ``` **优点**:支持数据分析和批量操作,可导出为DataFrame格式。 **缺点**:依赖库较多,需注意引擎兼容性。 --- #### 方法三:使用`xlwings`(适合复杂文件或Windows环境) `xlwings`通过调用Excel程序处理文件,兼容性较强: ```python # 安装库 pip install xlwings # 示例代码(需安装Excel软件) import xlwings as xw app = xw.App(visible=False) # 后台运行Excel wb = app.books.open("file.xls") # 打开文件[^3] sheet = wb.sheets[0] value = sheet.range("A1").value # 读取A1单元格 print(value) wb.close() app.quit() ``` **优点**:完美兼容复杂格式和公式。 **缺点**:依赖本地Excel环境,运行速度较慢。 --- #### 推荐方案 - **简单读取**:优先使用`xlrd 1.2.0`。 - **数据分析**:选择`pandas`。 - **格式复杂或报错**:改用`xlwings`或检查文件完整性。 --- #### 常见问题解决 **报错`xlrd.compdoc.CompDocError`** 原因:文件损坏或`xlrd`版本不兼容。 解决: 1. 使用`xlwings`绕过解析问题。 2. 使用`pandas`时指定引擎:`pd.read_excel(file, engine='openpyxl')`(需文件为`.xlsx`格式)。 ---
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值