xlwingsでエクセルのセルのデザインを変更するサンプルです。
セル背景色、フォント、罫線、計算式の設定方法です。全てxlwingsのクラスに標準装備されていれば、公式ドキュメントで解決できたのですが、apiを通さないと不可能なものもありました。
xlwingsのクラスsheetやrangeには、apiプロパティがあり、元のオブジェクトに対してアクセスが可能になります。このapiを介してエクセルを操作することで、標準装備されてない制御が実現できました。
日本だと見つけづらかったので、参考になるよう書いておきます。
xlwingsを使った、セルに関する設定
セル等の制御に関するソースコードは、下のものが共通して付きます。
import xlwings as xw
# エクセルの非表示を設定
xw.App(visible=False)
# 既存のBOOKを開く
book = xw.Book('.\\test.xlsx')
# 左から数えて1番目のシートを選択
sheet = book.sheets[0]
rng_b2 = sheet.range('b2')
rng_d2 = sheet.range('d2')
# ・・・
ちなみに、xlwingsのapiを介してエクセルを制御する方法は、エクセルのVBAのドキュメントに書いてあります。
元のエクセル(test.xlsx)は、このようなものです。セルb2に「たまねぎ」が入っているだけです。
セル背景色方法
色設定は、標準プライオリティで可能です。
# 背景色の設定
rng_b2 = sheet.range('b2')
rng_b2 = sheet.range('b2')
rng_b2.color = 251, 251, 180
フォントの設定方法
セルのフォントは、rangeクラスのapiプロパティを介して制御します。
# フォントの設定
rng_b2 = sheet.range('b2')
rng_b2.api.Font.ColorIndex = 5
rng_b2.api.Font.Size = 30
rng_b2.api.Font.Bold = True
rng_b2.api.HorizontalAlignment = -4131 # 横配置
rng_b2.api.VerticalAlignment = -4130 # 縦配置
# セル幅を調整
rng_b2.autofit()
HorizontalAlignment と VerticalAlignment に設定できる値は、Excel VBAのドキュメントにあります。
HorizontalAlignmentに設定できる値の一覧
名前 | 値 | 説明 |
---|---|---|
xlHAlignCenter | -4108 | 中央揃え |
xlHAlignCenterAcrossSelection | 7 | 選択範囲内中央 |
xlHAlignDistributed | -4117 | 均等割り付け |
xlHAlignFill | 5 | 繰り返し |
xlHAlignGeneral | 1 | 標準(データ形式に従って配置) |
xlHAlignJustify | -4130 | 両端揃え |
xlHAlignLeft | -4131 | 左詰め |
xlHAlignRight | -4152 | 右詰め |
出典:マイクロソフト
VerticalAlignmentに設定できる値の一覧
名前 | 値 | 説明 |
---|---|---|
xlVAlignBottom | -4107 | 下詰め |
xlVAlignCenter | -4108 | 中央揃え |
xlVAlignDistributed | -4117 | 均等割り付け |
xlVAlignJustify | -4130 | 両端揃え |
xlVAlignTop | -4160 | 上詰め |
出典:マイクロソフト
罫線の設定
罫線もapiを介さないと操作できません。
# 罫線の設定
rng_b2 = sheet.range('b2')
rng_b2.api.Borders(9).LineStyle = 1
rng_b2.api.Borders(9).Weight = 3
罫線の位置をBorder()の引数で設定できる値の一覧
名前 | 値 | 説明 |
---|---|---|
xlDiagonalDown | 5 | 左上から右下 |
xlDiagonalUp | 6 | 左下から右上 |
xlEdgeBottom | 9 | 最下 |
xlEdgeLeft | 7 | 左端 |
xlEdgeRight | 10 | 右端 |
xlEdgeTop | 8 | 最上 |
xlInsideHorizontal | 12 | 全セルの左右 |
xlInsideVertical | 11 | 全セルの上下 |
出典:マイクロソフト
罫線のスタイルに設定できる値の一覧
名前 | 値 | 説明 |
---|---|---|
xlContinuous | 1 | 実線(細) |
xlDash | -4115 | 破線 |
xlDashDot | 4 | 一点鎖線 |
xlDashDotDot | 5 | 二点鎖線 |
xlDot | -4118 | 点線 |
xlDouble | -4119 | 二重線 |
xlLineStyleNone | -4142 | 無し |
xlSlantDashDot | 13 | 斜め斜線 |
出典:マイクロソフト
計算式の設定
計算式の設定は、標準プライオリティで可能です。
rng_d2.formula = '="新鮮な、" & b2'
一連のソースコードと実行した結果
import xlwings as xw
# エクセルの非表示を設定
xw.App(visible=False)
# 既存のBOOKを開く
book = xw.Book('.\\test.xlsx')
# 左から数えて1番目のシートを選択
sheet = book.sheets[0]
rng_b2 = sheet.range('b2')
rng_d2 = sheet.range('d2')
# セル背景色
rng_b2.color = 251, 251, 180
# フォント設定
rng_b2.api.Font.ColorIndex = 5
rng_b2.api.Font.Size = 30
rng_b2.api.Font.Bold = True
rng_b2.api.HorizontalAlignment = -4131 # 横配置
rng_b2.api.VerticalAlignment = -4130 # 縦配置
# セルの幅を調整
rng_b2.autofit()
# 罫線の設定
rng_b2.api.Borders(9).LineStyle = 1
rng_b2.api.Borders(9).Weight = 3
# 計算式の設定
rng_d2.formula = '="新鮮な、" & b2'
book.save()
book.close()
実行後のエクセルファイル
エクセルファイルのデザインの設定まで求める事もある
外部ツールからエクセルファイルを操作して書き換える場合、セルの値や行の変更といったデータ操作が中心でした。望まれた値を入れてしまえば、後は各担当者が効率がいいようにデザインするのです。しかし、中にはデータによって、デザインの変更を求めらえることもありました。
方法が分かればなんてことはないのですが、見つからないと、私の場合、それに焦って更に見つけづらくなって、時間を浪費します。皆さんが、そうならないように書いておきました。
コメント