【问题标题】:Openpyxl.utils.exceptions.IllegalcharacterErrorOpenpyxl.utils.exceptions.IllegalcharacterError
【发布时间】:2021-07-29 23:16:31
【问题描述】:

我有以下 python 代码将处理后的单词写入 excel 文件。字数约7729

From openpyxl import *
book=Workbook ()
sheet=book.active
sheet.title="test"
for x in range (7729):
    sheet.cell (row=1,column=x+1).value=x
book.save ('test.xlsx')

这就是我使用的代码的样子,但是当我运行它时,它给了我一个错误提示

openpyxl.utils.exceptions.IllegalCharacterError

这是我第一次使用这个模块,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 你的.value=内容是什么?
  • 对不起,我忘了正确的值
  • 你能分享这个print (sys.getdefaultencoding())的结果吗?
  • 编码为utf-8
  • 请添加您的 python 版本,这将有助于人们重现该问题。

标签: python openpyxl


【解决方案1】:

openpyxl自带非法字符正则表达式,供你使用。假设您很乐意简单地删除这些字符,您可以这样做:

import re
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
from openpyxl import *

book=Workbook ()
sheet=book.active
sheet.title="test"
for x in range (7729):
   sheet.cell (row=1,column=x+1).value = ILLEGAL_CHARACTERS_RE.sub(r'',x)
book.save ('test.xlsx')

为了加快速度,您可以将原始单元格值分配放在 try/except 中,并且仅在捕获到 openpyxl.utils.exceptions.IllegalCharacterError 时运行重新替换。

来源:https://www.programmersought.com/article/43315246046/

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,发现这是因为 \xa1 字符是 ascii 26 (SUB) 的十六进制值。 Openpyxl 不允许编写此类字符(ascii 代码 xlsxwriter库没有任何问题,它在xlsx文件中写入了这个字符。

    【讨论】:

      【解决方案3】:

      试试这个: 这段代码对我有用。

      from openpyxl import *
      book=Workbook ()
      sheet=book.active
      sheet.title="test"
      x = 0
      with open("temp.txt") as myfile :
          text = myfile.readline()
          while text !="":
                  sheet.cell (row=1,column=x+1).value=str(text).encode("ascii",errors="ignore")
                  x+=1
                  text = myfile.readline()
      
      book.save ('test.xlsx')
      

      【讨论】:

      • 在真正的程序中 x 是一个字符串我应该怎么做,我应该删除 int 函数并使用上面的
      • 非常感谢,但这似乎行不通。如果当我喜欢 sheet ['A1']=1 或 sheet ['A1']='hi' 工作时这有帮助。
      • 我可以看看你的样本数据吗?他们是从源头读取数据的方式吗?
      • 'Kitaabota', 'seenaa', 'yesuus', 是的,我正在从源代码读取它,源代码是一个 txt 文件。
      • 我能看到你用来读取文本文件的代码吗?这将帮助我重现问题
      【解决方案4】:

      您错过了为单元格sheet.cell (row=1,column=x+1).value = 添加值

      这样试试

      from openpyxl import *
      book = Workbook ()
      sheet = book.active
      sheet.title = "test"
      for x in range (7):
          sheet.cell (row=1,column=x+1).value = "Hello"
      book.save ('test.xlsx')
      

      【讨论】: