Workbookの新規作成、データ入力、保存
import openpyxl workbook = openpyxl.Workbook() # 新規作成 worksheet = workbook.active # ワークシートの選択 worksheet.cell(1,1).value ='test' # データ入力 cell(行,列) 添字1から worksheet['B2'].value ='data' # データ入力 workbook.save('./test.xlsx') # ブックの保存 workbook.close() # ブックを閉じる
既存のWorkbookを開く
keep_vba, data_only, ...
openpyxl.reader.excel module — openpyxl 3.0.9 documentation
import openpyxl wb = openpyxl.load_workbook('./test.xlsm', data_only=True, keep_vba=True)
SUPPORTED_FORMATS = ('.xlsx', '.xlsm', '.xltx', '.xltm')*1
セルデータの読み込み
iter_rows, min_row, ...
openpyxl.worksheet.worksheet module — openpyxl 3.0.9 documentation
col_idx, column_letter, ...
openpyxl.cell.cell module — openpyxl 3.0.9 documentation
import openpyxl wb = openpyxl.load_workbook('./test.xlsm', data_only=True, keep_vba=True) ws = wb.active # 全部のセルを走るループ for row in ws: # row は cell オブジェクトの tuple for cell in row: #行番号,列番号,列文字,データ(値,式) print(cell.row,cell.col_idx,cell.column_letter,cell.value) # 全部のセルを走るループ2 for iRow in range(1,ws.max_row + 1) : for iCol in range(0,ws.max_column) : print(iRow,iCol,ws[iRow][iCol].value) # 特定の列を読む for row in ws.iter_rows(min_row=2): # 2行目以降のA列を読むコード a = row[0].value # tuple なので添え字は int b = row[ openpyxl.utils.column_index_from_string('A') - 1 ].value print(a,b)
テキストの折り返し
python - Apply 'wrap_text' to all cells using openpyxl - Stack Overflow
import copy import openpyxl wb = openpyxl.Workbook() ws = wb.active cell = ws.cell(1,1) algn = copy.copy(cell.alignment) algn.wrapText = True cell.alignment = algn cell.value='all very long sentences should be wrapped.' wb.save('./test.xlsx')
ws.cell(1,1).alignment.wrapText = True と書くと次のエラーを吐く:AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy
ws['A1'].alignment = openpyxl.styles.Alignment(wrapText=True)
という書き方もある
セルのサイズの指定
ws.column_dimensions['A'].width = 80 ws.row_dimensions[1].height=90
wrapTextで自動で縦に広がったセルには「高さの情報」は付与されないようだ[2022.5.2]