我一直在使用openpyxl將一些數據寫入已經存在的Excel文件,我發現它非常友好和簡單。 但是,昨天事情開始出現問題。Openpyxl損壞了我的Excel文件,現在丟失了?
我的Python代碼加載的excel文件在A2,B2,C2,e.t.c中有一些標題。並且代碼在每列之下打印一些數據。
下午我跑了代碼(我一直在運行它,做了大量的試驗和錯誤),它的工作方式與希望完全一樣,除了Excel文件各個表格中的幾列已經神祕地消失了。這是因爲某些列(主要是有數據的地方)由於某種原因已被最小化爲0像素寬,並且一旦我再次擴大了列的範圍,所有事情都應該如此。代碼沒有觸及其中一列已經被最小化的列表。不知道這是否相關,但發現它很奇怪,所以我想加入它。
然後在晚上,我再次運行代碼,試用了我添加的一些新功能。它看起來要被罰款的工作,但是當它在年底到了.save()命令時,它拋出了所有這些錯誤:
Traceback (most recent call last):
File "whoscored_scraper.py", line 239, in <module>
wb2.save("WhoscoredDatabase.xlsx")
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\workbook\workbook.py", l
ine 296, in save
save_workbook(self, filename)
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\writer\excel.py", line 1
91, in save_workbook
writer.save(filename, as_template=as_template)
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\writer\excel.py", line 1
74, in save
self.write_data(archive, as_template=as_template)
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\writer\excel.py", line 8
5, in write_data
self._write_worksheets(archive)
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\writer\excel.py", line 1
11, in _write_worksheets
write_worksheet(sheet, self.workbook.shared_strings,
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\writer\worksheet.py", li
ne 299, in write_worksheet
xf.write(comments)
File "C:\Users\SamH\Documents\Betting\Python\lib\contextlib.py", line 24, in _
_exit__
self.gen.next()
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\xml\xmlfile.py", line 51
, in element
self._write_element(el)
File "C:\Users\SamH\Documents\Betting\Python\openpyxl\xml\xmlfile.py", line 78
, in _write_element
xml = tostring(element)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 1126, in tostring
ElementTree(element).write(file, encoding, method=method)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 820, in write
serialize(write, self._root, encoding, qnames, namespaces)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 939, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 939, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 932, in _serialize_xml
v = _escape_attrib(v, encoding)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 1092, in _escape_attrib
_raise_serialization_error(text)
File "C:\Users\SamH\Documents\Betting\Python\lib\xml\etree\ElementTree.py", li
ne 1052, in _raise_serialization_error
"cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize 7L (type long)
我的代碼是很長,所以下面是一些涉及openpyxl該行:
from openpyxl import workbook
from openpyxl import load_workbook
wb2 = load_workbook('filename.xlsx')
ws = wb2["Shots_and_Goals"]
ws4 = wb2["Assorted"]
ws2 = wb2["On_Target"]
def HomeTeam(string):
HomeTeam_cell = 「c」 + str(3)
ws[str(HomeTeam_cell)] = Home_Team #Home_Team is some variable
def Home_Shot_Minutes(string):
for num in range (0, 10):
cell = column_titles[num+10] + str(3)] #column_titles is just a list
ws[str(cell)] = int(shot_count_for_that_minute) #shot_count_for_that_minute is variable defined above
HomeTeam(data)
Home_Shot_Minutes(data)
Wb2.save(「filename.xlsx」)
有更多的代碼行與上面列出的基本相同。在此之前,一切都一直在正常工作。
當我嘗試打開新保存的文件時,它說Excel發現了不可讀的內容 當我說我想恢復不可讀的內容時,除了表格名稱之外,我的新Excel文件是完全空白的。
我知道這是一個愚蠢的決定,不保存文件作爲不同的文件名,那麼這將意味着我不必重拍我的整個Excel文件!
有人明白這裏出了什麼問題嗎?
嗨,抱歉密集,但我不知道如何產生與原始文件的錯誤報告?這是對excel文件的修復:刪除記錄:從/xl/workbook.xml部分(Workbook)工作表屬性 removedRecord> –
SamH123
2015-03-31 14:31:22
轉到錯誤跟蹤器:https://bitbucket.org/openpyxl/openpyxl/overview 不幸的是,Excel的修復通知毫無幫助。損壞的文件不會有太大的幫助,因爲它缺少文本項目列表。 – 2015-03-31 18:08:41
好的謝謝,損壞的文件似乎是一個關閉,我一直無法重複錯誤,但我的代碼似乎仍然是設置列的負載爲0寬度,我不得不再次展開它們。任何想法爲什麼這可能會發生? – SamH123 2015-04-03 15:05:17