openpyxl报错WorksheetProperties.__init__() got an unexpected keyword argument ‘state‘

1、背景

        同事交接的Python代码,该代码运行在windows服务器上。功能是读取腾讯文档的excel数据后,拉取到本地,然后再读取本地文件上传至mysql,已经正常运行了很长时间了,突然报错

raceback (most recent call last):
  File "xxx/tengxunApi_wb.py", line 149, in get_values
    wb = load_workbook('temp_wb.xlsx')
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 346, in load_workbook
    reader.read()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 301, in read
    self.read_worksheets()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 237, in read_worksheets
    ws_parser.bind_all()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/worksheet/_reader.py", line 465, in bind_all
    self.bind_cells()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/worksheet/_reader.py", line 368, in bind_cells
    for idx, row in self.parser.parse():
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/worksheet/_reader.py", line 163, in parse
    obj = prop[1].from_tree(element)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/descriptors/serialisable.py", line 103, in from_tree
    return cls(**attrib)
TypeError: WorksheetProperties.__init__() got an unexpected keyword argument 'state'
2、分析原因

1、方法传了state参数

2、数据中可能有换行符导致串行

3、表格中有公式

        经过测试发现并不是前两种情况,第三种方案也没办法测试每一个单元格就放弃了。从网上找到一些升级或者降级openpyxl的方案测试后均失败,最后在知乎找到了以下答案,经测试可正常运行

3、解决方案

1、下载到本地的excel打开后重新保存即可

2、添加代码(参考:Python中,openpyxl读取excel公式值,结果为None的解决办法_M-Power的博客-优快云博客)

from win32com.client import Dispatch

def just_open(filename):
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()

原代码变为:

just_open(file_path)
workbook = openpyxl.load_workbook(file_path, data_only=True)

如果安装win32com的时候没有此组件,可安装pypiwin32

pip install pypiwin32

Python中使用Selenium库来读取在线腾讯文档(如Word文档、Excel等),通常需要经过几个步骤: 1. 安装必要的库:首先,确保你已经安装了`selenium`、`webdriver_manager`(用于管理浏览器驱动)以及浏览器对应的驱动(例如ChromeDriver或FirefoxDriver)。可以使用pip安装它们: ```bash pip install selenium webdriver_manager ``` 2. 引入所需的模块: ```python from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup # 如果需要解析HTML内容,可能还需要BeautifulSoup ``` 3. 设置浏览器驱动: ```python driver = webdriver.Chrome(ChromeDriverManager().install()) ``` 4. 访问腾讯文档页面: ```python url = "https://your-doc-url.on Tencent.com" # 替换为实际文档URL driver.get(url) ``` 5. 等待网页加载完成(如果文档加载需要时间): ```python time.sleep(5) # 调整等待时间至适当值 ``` 6. 解析文档内容: 对于非HTML格式的文件(如.docx或.xlsx),Selenium本身无法直接操作。如果你想要读取内容,可能需要先下载到本地然后通过其他工具(如python-docx或openpyxl)处理。 7. 关闭浏览器窗口: ```python driver.quit() ``` 注意:由于腾讯文档网站的结构和内容保护措施,直接使用Selenium访问并抓取数据可能会遇到权限限制。在实际操作前,你需要确保你的爬虫行为符合网站的服务条款,并尊重版权。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值