我尝试过使用奥古斯·威廉的解决方案来解决这个问题,但这也不起作用。我不会将工作簿类型,即.xlsm切换到.xlsx,这似乎是一个单独的问题。我查看了Openpyxl手册,试图找到一个bug报告或bug修复,但没有结果。下面是我非常简单的代码。接下来是python错误消息,它会导致创建一个工作簿,但是它已经损坏,无法加载。任何帮助都是非常感谢的。-Thanks!!
from openpyxl import Workbook
dashbrd = Workbook()
fp = dashbrd.active
fp.title = 'Sheet Name Goes Here'
fp['A1'] = 'Header'
fp['B1'] = '2nd Header'
fp['C1'] = '3rd Header'
fp['D1'] = '4th Header'
fp['E1'] = '5th Header'
fp['F1'] = 'You get the idea'
fp['G1'] = 'Another Header'
fp['H1'] = 'Blah blah blah'
fp['I1'] = 'Yadda yadda yadda'
dashbrd.save("S:\\folder1\\folder2\\folder3\\MyBook.xlsx")
**************************************************************************************
Traceback (most recent call last):
File "C:\Users\NotaDirtyUser\Documents\Scripts\HeaderTest.py", line 26, in <module>
dashbrd.save("S:\\folder1\\folder2\\folder3\\MyBook.xlsx")
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py", line 408, in save
save_workbook(self, filename)
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
writer.save()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
self.write_data()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 75, in write_data
self._write_worksheets()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 215, in _write_worksheets
self.write_worksheet(ws)
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 200, in write_worksheet
writer.write()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\_writer.py", line 354, in write
self.write_top()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\_writer.py", line 98, in write_top
self.write_properties()
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\_writer.py", line 60, in write_properties
self.xf.send(props.to_tree())
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\_writer.py", line 294, in get_stream
xf.write(el)
File "src/lxml/serializer.pxi", line 1652, in lxml.etree._IncrementalFileWriter.write
TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element
发布于 2019-12-12 16:18:13
正如我上面所说的,昨天我遇到了同样的问题,..I在这个链接中找到了解决方案:
https://python-forum.io/Thread-Need-help-in-understanding-this-particular-Traceback-TypeError
引用此错误:TypeError: got类型、预期字符串或元素的输入值无效
总之,解决方案是将openpyxl安装到另一个版本:
pip uninstall openpyxl
pip install openpyxl==3.0.1
发布于 2019-12-12 15:50:48
我找不到一个很好的参考,但我记得偶然发现了同样的情况,解决方案是使用旧格式(.xls,这是一种完全不同的格式)。看起来是openpyxl的一个通用问题,但目前还没有得到解决。
添加到.xlsx的工作方法(为我工作):
from openpyxl import load_workbook
writer = pd.ExcelWriter(filename, engine='openpyxl')
try:
# try to open an existing workbook
writer.book = load_workbook(filename)
# get the last row in the existing Excel sheet
# if it was not specified explicitly
if startrow is None and sheet_name in writer.book.sheetnames:
startrow = writer.book[sheet_name].max_row
# truncate sheet
if truncate_sheet and sheet_name in writer.book.sheetnames:
# index of [sheet_name] sheet
idx = writer.book.sheetnames.index(sheet_name)
# remove [sheet_name]
writer.book.remove(writer.book.worksheets[idx])
# create an empty sheet [sheet_name] using old index
writer.book.create_sheet(sheet_name, idx)
# copy existing sheets
writer.sheets = {ws.title: ws for ws in writer.book.worksheets}
except FileNotFoundError:
# file does not exist yet, we will create it
pass
if startrow is None:
startrow = 0
# write out the new sheet
df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs)
# save the workbook
writer.save()
发布于 2020-03-10 17:33:34
同样的问题,我无法重新打开openpyxl版本>3所创建的文件:在3.0.3: file "D:\MyProg.py“中,第251行,在chargerSynthese self.wbs = load_workbook(filename=self.nomfichierXLSX)文件第314行,在load_workbook reader.read() File "D:\MyPython\python3.8.2-x64\lib\site-packages\openpyxl\reader\excel.py",中在read "D:\MyPython\python3.8.2-x64\lib\site-packages\openpyxl\reader\excel.py",() self.read_worksheets() self.read_worksheets第227行,在read_worksheets ws_parser.bind_all() File "D:\MyPython\python3.8.2-x64\lib\site-packages\openpyxl\worksheet_reader.py",第426行,在"D:\MyPython\python3.8.2-x64\lib\site-packages\openpyxl\worksheet_reader.py",文件的bind_all self.bind_cells()第337行中,在bind_cells for idx中,在self.parser.parse()中的行:bind_all self.bind_cells第153行中,在解析行= "D:\MyPython\python3.8.2-x64\lib\site-packages\openpyxl\worksheet_reader.py",(元素)文件的第264行中,在parse_row self.row_counter = int(attrs'r') ValueError中,对于基数为10:'2.0‘的int()无效文本
attrs={'r':'2.0'}不知道它从哪里来(但是在openpyxl 3.0.3保存工作表中),那么当您在_reader.py: crash中执行这个int(attrs‘r)时!
解决方案回到2.6.4版本!
https://stackoverflow.com/questions/59308064
复制相似问题