读取Excel文件报错:TypeError: expected

superyang123456 2024-12-23 14:49:18

# 代码:
import pandas as pd
from openpyxl import load_workbook

# 定义 Excel 文件路径
file_path = r"日分成数据_2023-10-01-2023-10-31898736884.xlsx"
# 尝试加载工作簿

workbook = load_workbook(file_path)
sheet = workbook.active

# 读取数据并处理转换
for row in sheet.iter_rows(values_only=True):
    for value in row:
        try:
            # 尝试将值转换为整数
            if value is not None:  # 检查值是否为 None
                converted_value = int(value)
                print(converted_value)
            else:
                print("值为 None,跳过转换")
        except (ValueError, TypeError):
            # 处理转换错误
            print(f"无法转换值: {value}")

 

 

# 报错

Traceback (most recent call last):
  File "E:\Anoconda1\Lib\site-packages\openpyxl\descriptors\base.py", line 59, in _convert
    value = expected_type(value)
            ^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '2.5'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "E:\ProgramData\TCZY\CDB\Meituan\re_built\transactions.py", line 9, in <module>
    workbook = load_workbook(file_path)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Anoconda1\Lib\site-packages\openpyxl\reader\excel.py", line 348, in load_workbook
    reader.read()
  File "E:\Anoconda1\Lib\site-packages\openpyxl\reader\excel.py", line 303, in read
    self.read_worksheets()
  File "E:\Anoconda1\Lib\site-packages\openpyxl\reader\excel.py", line 237, in read_worksheets
    ws_parser.bind_all()
  File "openpyxl\\worksheet\\_reader.py", line 465, in openpyxl.worksheet._reader.WorksheetReader.bind_all
  File "openpyxl\\worksheet\\_reader.py", line 368, in openpyxl.worksheet._reader.WorksheetReader.bind_cells
  File "openpyxl\\worksheet\\_reader.py", line 163, in parse
  File "E:\Anoconda1\Lib\site-packages\openpyxl\descriptors\serialisable.py", line 103, in from_tree
    return cls(**attrib)
           ^^^^^^^^^^^^^
  File "E:\Anoconda1\Lib\site-packages\openpyxl\worksheet\dimensions.py", line 281, in __init__
    self.baseColWidth = baseColWidth
    ^^^^^^^^^^^^^^^^^
  File "E:\Anoconda1\Lib\site-packages\openpyxl\descriptors\base.py", line 71, in __set__
    value = _convert(self.expected_type, value)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Anoconda1\Lib\site-packages\openpyxl\descriptors\base.py", line 61, in _convert
    raise TypeError('expected ' + str(expected_type))
TypeError: expected <class 'int'>

...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊成 2024-12-23
  • 打赏
  • 举报
回复

你好
错误信息提示在加载 Excel 文件时遇到了问题,特别是在处理工作表维度(如列宽)时,期望得到一个整数但得到了一个不兼容的类型。这通常是因为 Excel 文件本身可能有损坏或者格式不符合 openpyxl 的预期。然而,这个错误在代码执行过程中并没有直接体现(因为它是在 load_workbook 调用时发生的,而你的代码中的异常处理是在遍历单元格数据时),但它导致了 load_workbook 失败,从而没有成功加载工作簿。
数据类型转换错误:
你可以尝试将每个单元格的值转换为整数,但遇到了无法转换的值(如 '2.5'),这导致了 ValueError。然而,这个错误是在尝试加载工作簿失败之后发生的,因为你的代码是在假设工作簿已经成功加载的基础上执行的。

解决步骤:

1.检查 Excel 文件:
确保 Excel 文件没有损坏,格式正确。
检查文件路径是否正确,特别是路径中的日期和数字部分是否有误(如文件名中的 "2023-10-31898736884" 是否应为 "2023-10-31" 后跟其他标识,而不是直接连在一起)。
2.修复或替换 Excel 文件:
如果文件损坏,尝试使用 Excel 修复功能或重新获取文件。
确保文件的扩展名正确(.xlsx)。
3.修改代码以处理文件加载异常:
在尝试加载工作簿时添加异常处理,以便在文件无法加载时给出更清晰的错误信息。

下面的代码请供参考

import pandas as pd
from openpyxl import load_workbook

# 定义 Excel 文件路径
file_path = r"日分成数据_2023-10-01-2023-10-31.xlsx"  # 确保路径和文件名正确

try:
    # 尝试加载工作簿
    workbook = load_workbook(file_path)
    sheet = workbook.active
    # 读取数据并处理转换
    for row in sheet.iter_rows(values_only=True):
        for value in row:
            try:
                # 尝试将值转换为整数
                if value is not None:  # 检查值是否为 None
                    converted_value = int(float(value))  # 先转换为浮点数再尝试转换为整数,以处理如 '2.5' 这样的值
                    print(converted_value)
                else:
                    print("值为 None,跳过转换")
            except (ValueError, TypeError):
                # 处理转换错误
                print(f"无法转换值: {value}")
except Exception as e:
    print(f"加载工作簿时出错: {e}")

6,116

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧