开放式PYXL工作簿.保存函数可创建损坏且无法读取的Excel(.xlsx)fi

2024-06-17 11:09:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经尝试过使用August William's solution来解决这个问题,但是也没用。我没有切换工作簿类型,即.xlsm到.xlsx,这似乎是一个单独的问题。我浏览了Openpyxl's Manual试图找到一个错误报告或错误修复,但没有结果。下面是我非常简单的代码。下面是python错误消息,它导致正在创建工作簿,但它已损坏并无法加载。感谢任何帮助。 -谢谢!!在

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

Tags: inpyselfsavelibpackageslinesite
2条回答

我找不到一个好的参考,但我记得我偶然发现了相同的,解决方案是使用旧的格式(.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()

就像我上面说的,昨天我也遇到了同样的问题……我在这个环节找到了解决办法:

https://python-forum.io/Thread-Need-help-in-understanding-this-particular-Traceback-TypeError

关于这个错误: TypeError:获取了无效的类型输入值,应为字符串或元素

总之,解决方案是将openpyxl安装到另一个版本:

pip uninstall openpyxl
pip install openpyxl==3.0.1

相关问题 更多 >