2016-12-02 41 views
1

我想提出一個腳本,將產生一個格式化的Excel電子表格。我正在嘗試使用[工作表] .column_dimensions []設置自定義列的寬度。問題是,當我使用此代碼包含任何行時,腳本不再能夠保存工作簿。如果我註釋掉保存文件行並留下列寬線,則腳本不會產生錯誤。如果我註釋掉列寬並留下保存文件行,也是如此。OpenPyXl與自定義列不保存文件寬度

下面是代碼:(注:出於測試目的,所有,但列寬行之一已被註釋掉)。

# Import libraries used by this script and set the Workbook 
from openpyxl import Workbook 
from openpyxl.styles import PatternFill, Border, Side, Alignment,  Protection, Font, Color 
from openpyxl.styles import NamedStyle, Font, Border, Color 
wb = Workbook() 

# Set font styles to be used in the workbook 
default = NamedStyle(name="default") 
default.font = Font(name='Arial', size=10, color="000000") 
title = NamedStyle(name="title") 
title.font = Font(name='Arial', size=14, color="000000", bold=True) 
header = NamedStyle(name="header") 
header.font = Font(name='Arial', size=11, color="BFBFBF", bold=True) 
bd = Side(style='thin', color="000000") 
header.border = Border(left=bd, top=bd, right=bd, bottom=bd) 
trend = NamedStyle(name="trend") 
trend.font = Font(name='Wingdings', size=11) 
wb.add_named_style(default) 
wb.add_named_style(title) 
wb.add_named_style(header) 
wb.add_named_style(trend) 

# Declare file name and path for the workbook 
dest_filename = 'test-book.xlsx' 

# Create and Format Summary tab 
ws1 = wb.active 
ws1.title = 'Summary of Results' 
ws1.column_dimensions['A'] = 18.00 
#ws1.column_dimensions['B'] = 26.00 
#ws1.column_dimensions['C'] = 9.00 
#ws1.column_dimensions['D'] = 9.00 
#ws1.column_dimensions['E'] = 9.00 
#ws1.column_dimensions['F'] = 9.00 
#ws1.column_dimensions['G'] = 9.00 

# Set Summary tab Title 
ws1.merge_cells('A1:G1') 
ws1['A1'].style = title 
ws1['A1'] = 'Summary of Results' 

# Create and Format Detailed tab 
ws2 = wb.create_sheet(title='Detailed Results') 
#ws2.column_dimensions['A'] = 18.00 
#ws2.column_dimensions['B'] = 26.00 
#ws2.column_dimensions['C'] = 7.00 
#ws2.column_dimensions['D'] = 85.00 
#ws2.column_dimensions['E'] = 25.00 
#ws2.column_dimensions['F'] = 45.00 

# Set Detailed tab Title 
ws2.merge_cells('A1:F1') 
ws2['A1'].style = title 
ws2['A1'] = 'Detailed Results' 

# Save the Workbook to the specified file name and path 
wb.save(filename = dest_filename) 

而且,這裏是產生的錯誤:

Traceback (most recent call last): 
    File "generate-report.py", line 68, in <module> 
    wb.save(filename = dest_filename) 
    File "/usr/local/lib/python2.7/dist- packages/openpyxl/workbook/workbook.py", line 339, in save 
    save_workbook(self, filename) 
    File "/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.py", line 268, in save_workbook 
    writer.save(filename) 
    File "/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.py", line 250, in save 
    self.write_data() 
    File "/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.py", line 81, in write_data 
    self._write_worksheets() 
    File "/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.py", line 199, in _write_worksheets 
    xml = ws._write() 
    File "/usr/local/lib/python2.7/dist- packages/openpyxl/worksheet/worksheet.py", line 866, in _write 
    return write_worksheet(self) 
    File "/usr/local/lib/python2.7/dist- packages/openpyxl/writer/worksheet.py", line 100, in write_worksheet 
    cols = ws.column_dimensions.to_tree() 
    File "/usr/local/lib/python2.7/dist-packages/openpyxl/worksheet/dimensions.py", line 229, in to_tree 
    for col in sorted(self.values(), key=sorter): 
    File "/usr/local/lib/python2.7/dist- packages/openpyxl/worksheet/dimensions.py", line 222, in sorter 
    value.reindex() 
AttributeError: 'float' object has no attribute 'reindex' 

我發現人們有類似的問題,修復是將OpenPyXl升級到1.8或1.9,但我目前正在運行版本2.4.1

任何幫助將不勝感激。

+0

對於遇到此問題的任何人,我通過使用XlsxWriter而不是OpenPyXl解決了我的問題。 – Pyker42

回答

1

ws1.column_dimensions['A']返回ColumDimension對象。你需要設置這個寬度。

0
ws.column_dimensions['A'].width = 40.0 
+0

儘管此代碼可以回答這個問題,提供有關爲什麼和/或如何代碼回答了這個問題提高了其長期價值的其他方面。 –

+0

請仔細閱讀本[如何對答案】(http://stackoverflow.com/help/how-to-answer),並按照指引那裏提供優質的答案。 – thewaywewere

+0

這不是火箭科學,親愛Mr.Duck。 –