2016-12-02 7 views
1

フォーマットされたExcelスプレッドシートを生成するスクリプトを作成しています。私は[ワークシート] .column_dimensions []を使用してカスタム列の幅を設定しようとしています。問題は、このコードで任意の行を含めると、スクリプトはもはやブックを保存できなくなることです。ファイルの保存行をコメントアウトして列幅の行を残すと、スクリプトにエラーは発生しません。列の幅の行をコメントアウトしてファイルの保存行を残した場合と同じことです。 (注:テスト目的のために、列の幅線のうちの1つを除くすべてがコメントアウトされた)ここ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

この問題を抱えている人は、OpenPyXlではなくXlsxWriterを使用して問題を解決しました。 – Pyker42

答えて

1

ws1.column_dimensions['A']は、ColumDimensionオブジェクトを返します。これの幅を設定する必要があります。

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

このコードは質問に答えるかもしれませんが、このコードが質問に答える理由および/または方法に関する追加の文脈を提供することで、長期的な価値が向上します。 –

+0

この[how-to-answer](http://stackoverflow.com/help/how-to-answer)を読んでガイドラインに従ってください。 – thewaywewere

+0

これはロケット科学ではない、親愛なるMr.Duck。 –

関連する問題