web-dev-qa-db-ja.com

OpenPyXLの列と行の次元は常にNoneです

Openpyxlがすべての行と列の次元をNoneとして読み取るのはなぜですか?これは、テーブルがopenpyxlを介して作成されたか、Microsoft Excel内で作成されたかに関係なく当てはまります。

import openpyxl
wb = openpyxl.load_workbook(r'C:\data\MyTable.xlsx')
ws = wb.active
print ws.row_dimensions[1].height
print ws.column_dimensions['A'].width

noneとNoneを出力します。これらは非表示の列/行ではありません。 Excelで表示すると、寸法がはっきりとわかります。

ブックにイテレータをロードするとディメンションディクショナリが作成されないことを知っていますが、その結果、主要なエラーが発生し、ここではイテレータを使用していません。

セル/行/列の幅/高さを決定する別の方法はありますか?

===============解決策=================

チャーリーのおかげで、すべての行の高さのリストを取得するには、次の方法が最良であることに気付きました。

import openpyxl
wb = openpyxl.load_workbook(r'C:\Data\Test.xlsx')
ws = wb.active
rowHeights = [ws.row_dimensions[i+1].height for i in range(ws.max_row)]
rowHeights = [15 if rh is None else rh for rh in rowHeights]
9
Tom

RowDimensionおよびColumnDimensionオブジェクトは、デフォルトが上書きされる場合にのみ存在します。したがって、値が割り当てられるまで、ws.row_dimensions[1].heightは常にNoneになります。

デフォルト値は次のとおりです:{'defaultRowHeight': '15', 'baseColWidth': '10'}

16
Charlie Clark