這是我的第一篇文章,我一直在努力尋找答案,所以請耐心等待!C4D python openpyxl無法保存.xlsm,但在zipfile.py中引發TypeError
我最終希望能夠修改現有的.xslm文件,以便用我在Cinema-4D中通過python提取的運動數據填充它。
我確實嘗試了keep_vba=True
,建議here,但仍然遇到下面描述的錯誤。我的宏啓用工作簿來自Excel 2013,我也寫了一個運行宏。我工作的代碼是:
import os
from openpyxl import load_workbook
homeDir = os.path.expanduser('~')
openName = 'Timing_CHART.xlsm'
openPath = os.path.dirname(__file__) + "\\" + openName
saveName = raw_input('Please enter a save name: ')
savePath = homeDir+'\\Desktop\\'+saveName+'.xlsm'
wb = load_workbook(openPath, keep_vba = True)
ws = wb.active
ws['B10'].value = 'Loader' #Just as a test
ws['D10'].value = 25
wb.save(savePath)
當我運行通過Enthought林冠環境中,該代碼(Python的2.7.6 64位),它只是我的預期 - 太棒了。 當我嘗試在我的Cinema-4D安裝(Python 2.6.4 64位)中使用的相同python版本中運行相同的代碼時,它的工作原理完美,直到wb.save()
命令爲止。然後我得到錯誤的一大堆:
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
wb.save(savePath)
File "C:\Python26\lib\site-packages\openpyxl-2.3.2-py2.6.egg\openpyxl\workbook\workbook.py", line 263, in save
save_workbook(self, filename)
File "C:\Python26\lib\site-packages\openpyxl-2.3.2-py2.6.egg\openpyxl\writer\excel.py", line 239, in save_workbook
writer.save(filename, as_template=as_template)
File "C:\Python26\lib\site-packages\openpyxl-2.3.2-py2.6.egg\openpyxl\writer\excel.py", line 222, in save
self.write_data(archive, as_template=as_template)
File "C:\Python26\lib\site-packages\openpyxl-2.3.2-py2.6.egg\openpyxl\writer\excel.py", line 68, in write_data
archive.writestr(ARC_ROOT_RELS, write_root_rels(self.workbook))
File "C:\Python26\lib\site-packages\openpyxl-2.3.2-py2.6.egg\openpyxl\writer\workbook.py", line 88, in write_root_rels
arc = fromstring(workbook.vba_archive.read(ARC_ROOT_RELS))
File "C:\Python26\lib\zipfile.py", line 831, in read
return self.open(name, "r", pwd).read()
File "C:\Python26\lib\zipfile.py", line 594, in read
bytes = self.fileobj.read(bytesToRead)
TypeError: integer argument expected, got 'long'
直到我寫這篇文章(和測試了我的發言,因爲我走,以確保我的意思是準確的),我發現它在Enthought Canopy的python v2.7.6與Windows和Cinema-4D的python v2.6.4之間的區別。
最初我以爲它是特定於C4D,但由於C4D運行Python 2.6.4以及,我希望這可以縮小到python版本的可修復問題......或學習確定python 2.6.4是不可能的。
任何幫助/建議非常感謝!