2014-01-16 39 views
0

我生成一個Excel中使用模板,的Python openpyxl無法保存現有的Excel具有定製的列寬

from openpyxl import Workbook 
from openpyxl import load_workbook 

src_file = 'D:\\code\\TestLink-Report\\pyxl.xlsx' 
wb = load_workbook(filename = src_file, guess_types = False) 

sheet = wb.worksheets[0] 
sheet.cell('A1').value = 'blabla' 
wb.save(filename = src_file) 

如果SRC_FILE是新的空白之一,它的工作原理。 如果我更改了手動SRC文件的任何列,再次運行代碼的寬度,它失敗

wb.save(filename = src_file) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\workbook.py", line 265, in save 
    save_workbook(self, filename) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line 
187, in save_workbook 
    writer.save(filename) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line 
170, in save 
    self.write_data(archive) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line 
98, in write_data 
    self._write_worksheets(archive, shared_string_table, self.style_writer) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line 
128, in _write_worksheets 
    style_writer.get_style_by_hash())) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\worksheet.py", line 98, in write_worksheet 
    write_worksheet_cols(doc, worksheet, style_table) 
    File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\worksheet.py", line 209, in write_worksheet_cols 
    col_def['style'] = str(style_table[hash(columndimension.style_index)]) 
KeyError: 549131827 

我用Excel 2013年 聽說openpyxl計算器上進行搜索後不支持風格結合得很好。但我的問題似乎應該是一件簡單的事情。

回答

1

此問題已得到解決here

運行該工具來獲取最新版本

hg clone https://bitbucket.org/ericgazoni/openpyxl 
cd openpyxl/ 
hg up 1.8 
python setup.py develop 
+1

openpyxl是1.x的,當我問到這個問題。現在它是2.x並且運作良好。驗證2.4.7版。謝謝 – Cypine

0

是否可以使用win32com作爲選項?一個簡單的列格式可以在那裏進行象下面這樣:

from win32com.client import Dispatch 

xl = Dispatch("Excel.Application") 
filestr = "C:\blah\pytest.xlsx" 
wbk = xl.Workbooks.Open(filestr) 

wsht = wbk.Sheets(1) 
wsht.Range("A1").Value = "Hello World!" 
wsht.Columns(1).ColumnWidth = 50 
wbk.SaveAs("C:\blah\pytested.xlsx") 

xl.Application.Quit() 

您可以結合openpyxl使用它,如果你只需要調整列寬。

讓我們知道這會有所幫助。 :)

+0

我一直不喜歡「Excel.Application」,但似乎沒有更好的選擇。我以爲我有一個很棒的解決方案,沒有OLE自動化。 – Cypine

0

目前工作正在進行中openpyxl解決你得到的錯誤。無論是1.8和1.9分行目前可以防止它發生,但所產生的Excel文件可能無法使用。

+0

太好了!期待發布。 – Cypine

相關問題