フォーマットされた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を実行中です。
ご協力いただければ幸いです。
この問題を抱えている人は、OpenPyXlではなくXlsxWriterを使用して問題を解決しました。 – Pyker42