You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl开启rich_text保存工作簿时触发Permission Error问题

开启rich_text参数后openpyxl无法保存工作簿的原因

问题重现

执行以下代码尝试打开并保存Excel工作簿时触发错误:

import openpyxl as ox
if __name__ == '__main__':
  wb = ox.load_workbook("colSort.xlsx", rich_text=True)
  wb.save("TEST.xlsx")

错误信息

$ python test.py
Traceback (most recent call last):
  File "C:\DEV\Fiverr2024\ORDER\robalf\SOLcolSorting\test.py", line 5, in <module>
    wb.save("TEST.xlsx")
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\workbook\workbook.py", line 386, in save
    save_workbook(self, filename)
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\writer\excel.py", line 294, in save_workbook
    writer.save()
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\writer\excel.py", line 275, in save
    self.write_data()
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\writer\excel.py", line 77, in write_data
    self._write_worksheets()
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\writer\excel.py", line 215, in _write_worksheets
    self.write_worksheet(ws)
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\writer\excel.py", line 200, in write_worksheet
    writer.write()
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\worksheet\_writer.py", line 359, in write
    self.write_rows()
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\worksheet\_writer.py", line 125, in write_rows
    self.write_row(xf, row, row_idx)
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\worksheet\_writer.py", line 147, in write_row
    write_cell(xf, self.ws, cell, cell.has_style)
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\cell\_writer.py", line 87, in etree_write_cell
    whitespace(text)
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\xml\functions.py", line 85, in whitespace
    stripped = node.text.strip()
               ^^^^^^^^^^^^^^^
AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'strip'
Exception ignored in atexit callback: <function _openpyxl_shutdown at 0x0000018250C27880>
Traceback (most recent call last):
  File "C:\DEV\.venv\xlwings\Lib\site-packages\openpyxl\worksheet\_writer.py", line 32, in _openpyxl_shutdown
    os.remove(path)
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\Users\WRSPOL\AppData\Local\Temp\1\openpyxl.er0fcti4'

正常场景

移除rich_text=True参数后,保存操作可正常执行:

wb = ox.load_workbook("colSort.xlsx")

原因分析

  1. 核心错误根源:报错中的AttributeError才是关键——开启rich_text=True时,openpyxl会将单元格内容解析为XML Element结构的富文本对象,但写入保存时的代码逻辑错误,试图对XML Element对象调用字符串的strip()方法,导致直接崩溃。
  2. Permission Error是连锁反应:因为前面的写入过程崩溃,openpyxl创建的临时文件未被正常关闭和清理,后续触发了文件占用无法删除的权限错误。
  3. 触发条件:你的Excel文件colSort.xlsx中存在特殊格式的富文本单元格(比如嵌套格式、特殊符号或非标准样式),导致openpyxl解析后生成的富文本对象在写入时出现兼容性问题。

解决建议

  • 检查并修复Excel文件:打开colSort.xlsx,检查所有包含富文本的单元格(如带字体颜色、加粗、斜体的单元格),尝试简化格式或清除异常格式后重新测试。
  • 升级openpyxl版本:该问题大概率是openpyxl的已知bug,升级到最新版本可能已修复此类富文本处理问题。
  • 规避或手动处理富文本:如果不需要修改富文本内容,可暂时不使用rich_text=True;若必须处理富文本,可遍历单元格将富文本对象转换为普通字符串或标准格式后再保存。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:40:15