簡體   English   中英

python-使用xlwt創建相同文件后,使用xlrd打開XLS文件時出錯

[英]python - Error while opening XLS file with xlrd after creating the same file with xlwt

我的腳本使用xlwt模塊創建XLS文件(其中填充了一些數據)並將其保存在工作目錄中。 該操作的第一部分已成功完成。 在同一腳本中,下一部分是讀取保存的XLS文件,並基於該文件創建另一個填充了一些值的XLS文件。 保存了第一個XLS后,出現如下錯誤,無法使用xlrd讀取已保存的XLS;

ERROR: Traceback (most recent call last):
ERROR:   File "C:\Esri_SCRIPTS\GDB_FC_SourceMapping_Service_V6\GDB_FC_SourceMapping_V6_Dev.py", line 200, in <module>
ERROR:     wb=xlrd.open_workbook(CurWrokDir + '\DataSources.xls')
ERROR:   File "C:\Python26\ArcGIS10.0\lib\site-packages\xlrd\__init__.py", line 454, in open_workbook
ERROR:     bk.parse_globals()
ERROR:   File "C:\Python26\ArcGIS10.0\lib\site-packages\xlrd\__init__.py", line 1473, in parse_globals
ERROR:     self.handle_sst(data)
ERROR:   File "C:\Python26\ArcGIS10.0\lib\site-packages\xlrd\__init__.py", line 1446, in handle_sst
ERROR:     self._sharedstrings = unpack_SST_table(strlist, uniquestrings)
ERROR:   File "C:\Python26\ArcGIS10.0\lib\site-packages\xlrd\__init__.py", line 1663, in unpack_SST_table
ERROR:     nchars = local_unpack('<H', data[pos:pos+2])[0]
error: unpack requires a string argument of length 2
ERROR:
ERROR: unpack requires a string argument of length 2

通過在該論壇上搜索發現的解決方法是,打開從第一部分保存的XLS輸出,然后保存並關閉。 運行腳本的第二部分,它將成功運行。

我要實現的是一起運行腳本而沒有任何錯誤。 換句話說,運行腳本...第一部分將保存XLS,第二部分將立即開始從第一部分讀取保存的XLS輸出並生成第二輸出為XLS。

任何幫助將不勝感激。 提前致謝。

如下例所示,通過xlrd寫入文件並通過xlwt重新讀取文件沒有根本問題:

import xlwt
import xlrd

# Write an Excel file.
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('Sheet1')

worksheet.write(0, 0, 'Hello')
worksheet.write(1, 0, 12345)

workbook.save('test.xls')

# Now read it back in.
workbook = xlrd.open_workbook('test.xls')
worksheet = workbook.sheet_by_name('Sheet1')

print worksheet.row(0)[0].value
print worksheet.row(1)[0].value

打印:

$ python reread.py
Hello
12345.0

因此,由您來調試導致錯誤的程序問題是什么。

鑒於在Excel中保存文件后看不到問題,很可能這是xlwt問題,但是再次需要證明這一點或為開發人員提供調試方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM