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ファイル操作のパッケージを使っているのはそういった理由です。