xlsxwriter.utility 詳細
xlsxwriter.utility
Python ライブラリ xlsxwriter の xlsxwriter.utility は、xlsxwriter内部で使われるヘルパーメソッドですが便利なのでユーザーにも開放されています。
- xlsxwriter.utility
- 前書き
- 準備(xlswritewを使ってみる)
- xlsxwriter.utility
- xl_rowcol_to_cell(row, col, row_abs=False, col_abs=False)
- xl_rowcol_to_cell_fast(row, col)
- xl_col_to_name(col, col_abs=False)
- xl_cell_to_rowcol(cell_str)
- xl_cell_to_rowcol_abs(cell_str)
- xl_range(first_row, first_col, last_row, last_col)
- xl_range_abs(first_row, first_col, last_row, last_col)
- xl_range_formula(sheetname, first_row, first_col, last_row, last_col)
- quote_sheetname(sheetname)
- xl_color(color)
- get_rgb_color(color)
- get_sparkline_style(style_id)
- supported_datetime(dt)
- remove_datetime_timezone(dt_obj, remove_timezone)
- datetime_to_excel_datetime(dt_obj, date_1904, remove_timezone)
前書き
いつものように、調べた結果を羅列していきます。
準備(xlswritewを使ってみる)
準備としてxlsxwriterでインスタンスを作ります。
import xlsxwriter import xlsxwriter.utility
# VBAみたいですね。はじめにWorkbookのインスタンスを作ります workbook = xlsxwriter.Workbook('example01.xlsx') # workbookにworksheetを追加します worksheet = workbook.add_worksheet()
# セルデータを配列とtupleで作ります data = ( ['経路', '運賃','特急料金'], ['大阪', 8960, 0 ], ['新大阪', 0, 5700], ['東京', 0,0], ['舞浜/リゾートゲートウェイ', 260,0], ['東京ディズニーシー', 0,0], ['小計', '=SUM(B2:B6)' , '=SUM(C2:C6)'], ['合計', '' ,'=B7+C7'], )
# 配列を使うのでindexはゼロから始めます row = 0 col = 0
# ワークシートにwriteメソッドでrow,colを指定して書き込んでいるだけです。 for item, cost1,cost2 in (data): worksheet.write(row, col, item) worksheet.write(row, col + 1, cost1) worksheet.write(row, col + 2, cost2) row += 1
# 作ったワークブックを閉じると保存されるみたいです。
workbook.close()
うーん。簡単でしょ?!
xlsxwriter.utility
xlsxwriter.utilityで定義されているメソッド一覧です
xl_rowcol_to_cell(row, col, row_abs=False, col_abs=False)
row(行)とcolumn(列)のセル参照をA1表示方式の文字列に変換します。rowとcolは0スタートの整数。row_absとcol_abs は絶対値表記で'$'が付きます。
引数
- row: int セル行(first rowは、0)
- col: int セル列(first columnは、0)
- row_abs: boolean セル行を絶対値にする。ディフォルトはFalse
- True セル行を絶対値にする
- False セル行を相対値にする
- col_abs: boolean セル列を絶対値にする。ディフォルトはFalse
- True セル列を絶対値にする
- False セル列を相対値にする
戻り値
- str A1表示方式の文字列
xlsxwriter.utility.xl_rowcol_to_cell(0,0)
'A1'
xlsxwriter.utility.xl_rowcol_to_cell(1,20,0,1)
'$U2'
【解説】A1表示方式は、表を見ながら操作するのには便利であるがプログラムする側からするとカラムを5つ奥に移動するとcolumn名は何になる?forでループはできない?などと不便である。VBAではoffset等を使ってしのいでいるが。。。なのでセルに数式で埋め込むとき等に便利そうなメソッドである。
xl_rowcol_to_cell_fast(row, col)
xl_rowcol_to_cell関数の最適化バージョン 内部でのみ使用されています。
引数
- row: int セル行(first rowは、0)
- col: int セル列(first colは、0)
戻り値
- str A1表示方式の文字列
【解説】絶対値表記等は、EXCEL上の操作の際に意味があることでバックグランドのプログラムではrow,col共に配列番号なので必要ないので余計なところを端折って高速化したメソッドである。
xl_col_to_name(col, col_abs=False)
列番号を列セル参照を文字列に変換します。col_abs は絶対値表記で'$'が付きます。
引数
- col: int セル列(first columnは、0)
- col_abs: boolean セル列を絶対値にする。ディフォルトはFalse
- True セル列を絶対値にする
- False セル列を相対値にする
戻り値
- str A1表記方式の列文字列
xlsxwriter.utility.xl_col_to_name(0,1)
'$A'
xlsxwriter.utility.xl_col_to_name(30)
'AE'
【解説】早い話列番号を列アルファベット文字列に変換。行に関してはゼロスタートなのでA1表示方式にするには+1すれば終わる。
xl_cell_to_rowcol(cell_str)
A1表記方式文字列を、row,col数値行列に変換する。
引数
- cell_str str A1表記方式文字列(
$A$1
等の絶対値表記も可)
戻り値
- row: int セル行(first rowは、0)
- col: int セル列(first columnは、0)
xlsxwriter.utility.xl_cell_to_rowcol('ABC$1000')
(999, 730)
【解説】xl_rowcol_to_cell_fastの逆変換
xl_cell_to_rowcol_abs(cell_str)
A1表記方式文字列を、row,col数値行列に変換する。絶対値表記も処理する
引数
- cell_str str A1表記方式文字列(
$A$1
等の絶対値表記も可)
戻り値
- row: int セル行(first rowは、0)
- col: int セル列(first columnは、0)
- row_abs: boolean セル行を絶対値にする。ディフォルトはFalse
- True セル行を絶対値にする
- False セル行を相対値にする
- col_abs: boolean セル列を絶対値にする。ディフォルトはFalse
- True セル列を絶対値にする
- False セル列を相対値にする
xlsxwriter.utility.xl_cell_to_rowcol_abs('ABC$1000')
(999, 730, True, False)
【解説】xl_rowcol_to_cellの逆変換
xl_range(first_row, first_col, last_row, last_col)
行と列のセル参照をA1:B2形式範囲文字列に変換します。
引数
- first_row: int 最初のセル行(first rowは、0)
- first_col: int 最初のセル列(first columnは、0)
- last_row: int 最後のセル行(first rowは、0)
- last_col: int 最後のセル列(first rowは、0)
戻り値
- str A1:B2形式範囲文字列
xlsxwriter.utility.xl_range(10,20,30,40)
'U11:AO31'
【解説】:
でxl_rowcol_to_cell_fastを使って挟んだ感じ
xl_range_abs(first_row, first_col, last_row, last_col)
行と列のセル参照を$A$1:$B$2
形式絶対範囲文字列に変換します。
引数
- first_row: int 最初のセル行(first rowは、0)
- first_col: int 最初のセル列(first rowは、0)
- last_row: int 最後のセル行(first rowは、0)
- last_col: int 最後のセル列(first rowは、0)
戻り値
- str $A$1:$B$2形式範囲文字列
xlsxwriter.utility.xl_range_abs(40,30,20,10)
'$AE$41:$K$21'
【解説】xl_rangeの絶対値付きの範囲文字列変換であるが、相対値と絶対値の混合ができない
xl_range_formula(sheetname, first_row, first_col, last_row, last_col)
ワークシート名と行列番号をSheet1!A1:B2
範囲表示方式文字列に変換
引数
- sheetname: str ワークシート名
- first_row: int 最初のセル行(first rowは、0)
- first_col: int 最初のセル列(first columnは、0)
- last_row: int 最後のセル行(first rowは、0)
- last_col: int 最後のセル列(first columnは、0)
戻り値
- str
Sheet1!A1:B2
範囲表示方式文字列に変換
xlsxwriter.utility.xl_range_formula('sheet1',4,3,7,101)
'sheet1!$D$5:$CX$8'
【解説】quote_sheetnameとxl_range_absを足した感じ
quote_sheetname(sheetname)
ワークシート名にスペースまたは特殊文字が含まれている場合は、 その名前を引用符付きの名前に変換します。
引数
- sheetname: str ワークシートの名前
戻り値
- str 引用符付きのワークシート
【解説】引数が数値文字列以外は、文字列を引用符付きにする。例外処理もやる
# シート名は引用符を付ける st_name = xlsxwriter.utility.quote_sheetname('結果') st_name
'結果'
# シート名にスペースが入っていようとなかろうと関係ない print(xlsxwriter.utility.quote_sheetname('結果 1'))
'結果 1'
# 2重にかけても無視される print(xlsxwriter.utility.quote_sheetname(st_name))
結果
# VBAとかでもシート名を数値(バーバリアン型)で表すので数値で戻す print(xlsxwriter.utility.quote_sheetname("5"))
5
xl_color(color)
XlsxWriterのcolorメソッドで一緒に使用して変換してます。RGB形式の文字列に変換します。これらの色は以前のバージョンのExcelとの下位互換性。
引数
- color: str 色名 または、 RGB形式文字列
戻り値
- str ARGB形式
注意
- 'AARRGGBB'フォーマットで返される
- 対応色名
- 'black','blue','brown','cyan','gray','green','lime','magenta',
- 'navy','orange','pink','purple','red','silver','white','yellow'
#色名 xlsxwriter.utility.xl_color('silver')
'FFC0C0C0'
#色コード xlsxwriter.utility.xl_color('#00FF00')
'FF00FF00'
#アルファ付き色コード xlsxwriter.utility.xl_color('#80FFFF00')
'FF80FFFF00'
get_rgb_color(color)
色名をRGB形式の文字列に変換します。
引数
- color: str 色名
戻り値
- str RGB形式
注意
- 'RRGGBB'フォーマットで返される
#色名 xlsxwriter.utility.get_rgb_color('silver')
'C0C0C0'
【解説】xl_color(color)のアルファ無版
get_sparkline_style(style_id)
スパークラインのスタイルを収得します(add_sparklineで使用している)
引数
- style_id: int スタイル番号
戻り値
- dict スタイル情報
注意
- サポートされているのは0~36
xlsxwriter.utility.get_sparkline_style(0)
{'series': {'theme': '4', 'tint': '-0.499984740745262'},
'negative': {'theme': '5'},
'markers': {'theme': '4', 'tint': '-0.499984740745262'},
'first': {'theme': '4', 'tint': '0.39997558519241921'},
'last': {'theme': '4', 'tint': '0.39997558519241921'},
'high': {'theme': '4'},
'low': {'theme': '4'}}
xlsxwriter.utility.get_sparkline_style(36)
{'series': {'theme': '1'},
'negative': {'theme': '9'},
'markers': {'theme': '8'},
'first': {'theme': '4'},
'last': {'theme': '5'},
'high': {'theme': '6'},
'low': {'theme': '7'}}
supported_datetime(dt)
xlsxwrite(excel)のChartやWorksheetでサポートされている日時オブジェクトかどうかを判別します。
引数
- dt: 検査するオブジェクト
戻り値
- boolean
- True サポートする
- False サポートしない
注意
- サポートされているのはdatetimeの
datetime
,date,time
,timedelta
です
from datetime import datetime xlsxwriter.utility.supported_datetime(datetime.today())
True
print(datetime.today())
2019-06-15 21:18:11.820430
xlsxwriter.utility.supported_datetime("2019-06-15 10:16:46.687568")
False
d = datetime(2019, 2, 3) xlsxwriter.utility.supported_datetime(d)
True
remove_datetime_timezone(dt_obj, remove_timezone)
Excelでは日時のタイムゾーンはサポートされていないため削除する関数。引数で指定した日時オブジェクトからtzinfoを削除します。
引数
- dt_obj: datetimeクラスのオブジェクト
- remove_timezone: 削除するタイムゾーン
戻り値
- datetimeクラスのオブジェクト
from datetime import datetime, timedelta, timezone JST = timezone(timedelta(hours=+9), 'JST')
jtime = datetime.now(JST) jtime
datetime.datetime(2019, 6, 15, 21, 18, 12, 452426, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400), 'JST'))
xlsxwriter.utility.supported_datetime(jtime)
True
t = xlsxwriter.utility.remove_datetime_timezone(jtime,'JST')
t
datetime.datetime(2019, 6, 15, 21, 18, 12, 452426)
xlsxwriter.utility.supported_datetime(t)
True
datetime_to_excel_datetime(dt_obj, date_1904, remove_timezone)
日時オブジェクトをExcelのシリアルの日時に変換します。 数値の整数部にはエポック以降の日数が格納され、小数部にはその日の割合が格納されます。
引数
- dt_obj: datetimeクラスのオブジェクト
- date_1904: boolean エポックを'1904-01-01'にするか'1899-12-31'にするか選択。
- True '1904-01-01'
- False '1899-12-31'
- remove_timezone: boolean remove_datetime_timezoneを使ってタイムゾーンを削除するかどうか
- True 削除する
- False 削除しない
戻り値
xlsxwriter.utility.datetime_to_excel_datetime(jtime,True,True)
42169.8876441253
xlsxwriter.utility.datetime_to_excel_datetime(jtime,False,True)
43631.8876441253