Openpyxlによるxlsxファイルの操作

Excelのファイルの編集

Openpyxl パッケージ

Excelのファイルのうち、xlsx、xlsmファイルを操作することが出来るのがOpenpyxlパッケージです。xlrdなど他のパッケージもありますが、古いxlsファイルでは無く、xlsxファイルを扱うならば、このopenpyxlの方が使いやすいのではと思いました。

仕事ではエクセルをたくさん使うと思いますが、これを使えば、いろいろな作業が簡単にならないかと思った次第です。

ファイルのオープンとセーブ

すごくわかりやすいです。既存ファイルのパスが入っている変数をnewFnameとすると、

import openpyxl as ox
wb = ox.load_workbook(newFname)
wb.save(newFname)

日時の情報をセルに設定する

Openpyxlで、単純な数値を扱う場合の例はいろんなサイトにあるようでしたが、日付を扱う場合の例があまりないようでしたので記載します。具体的には、セルにdatetimeパッケージのオブジェクトを設定すると、日付や時間としてセルに値を書き込んでくれます。

import openpyxl as ox
import datetime

wb = ox.load_workbook(newFname)
ws = wb.active

aDate = datetime.date(year=2017, month=6, day=4)
ws['A1']=aDate

表示形式でユーザ定義の書式を設定したい

このままだと、Excel上では2017-06-04のように表示されてしまいます。好みの表示書式に設定するには、cellオブジェクトのnumber_formatプロパティにを使います。

# 申請日 : 2017年 6月 4日(日曜日) みたいな感じになります。
dateformat = "\"申請日 : \"[$-411]ggge\"年 \"m\"月 \"d\"日 ( \"aaa\" 曜日)\";@"
ws['A1'].number_format=dateformat

なお、未だ自分が知らないだけかも知りませんが、セルに値を設定すると様々なプロパティが失われてしまいます。なので、上記の様なフォーマット設定は、値設定後にする必要があります。

罫線を引く、セルの罫線を保持する

罫線は,Borderオブジェクトをcellのborderプロパティに設定することで引けます。
上記に書いたように値設定するとセルの情報が失われるので、先に元の罫線の情報をコピーしておくと良いです。

from copy import copy
border = copy(ws['A1'].border)
ws['A1']=aDate
ws['A1'].border=border

ちなみに

xlsx,docx,pptxなどのMS Officeのファイルって実はzipファイルだって知ってました?。ファイルの拡張子をzipに変更して、解凍する事が出来ます。そうすると、複数のフォルダとxmlファイル等を取り出すことが出来ます。Openpyxlでxmlファイル操作のパッケージを使っているのはそういった理由です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

four × 4 =