Pythonで業務自動化Pythonによるオフィスワークの自動化では、エクセルファイルを操作できるOpenPyXLは欠かせないライブラリです。インストールは以下のようにpipを用いて簡単にできます。openpyxlOpenPyXLを用いて既存のエクセルファイルを読み込むには、以下のようにload_workbook()を用います。ws["A1"].value'東京本社月次決算'ここで以前は、表示形式が「ユーザー定義」のセルを含んでいるとエラー(KeyError)が表示されましたが、バージョン2.6.1からそのセルは「標準(General)形式」として読み込まれるようになりました。以下のように年月を「ユーザー定義」でyyyy"年"m"月"としていたのに、OpenPyXLでは「標準」で読み込まれるので、日付で入力していた値はシリアル値で取得されます。想定と違う表示形式で読み込まれることになるので注意が必要です。load_workbook()は真っ先によく用いるメソッドですので、最初でつまずかないよう少し詳しく解説してみました。参考にしていただけたら嬉しいです。以前(バージョン2.6.0まで)は、以下のように読み込むエクセルファイル内に認識できない形式のセルがあるとエラー(KeyError)が表示されていました。55上記のエラーは、以下のopenpyxl.styles.numbersモジュールのソースコードを見ると分かりますが、BUILTIN_FORMATSの辞書には55というキーがないことを表しています。openpyxl.styles.numbersモジュールのソースコードこのように、以前は認識できない表示形式のセルがあると例外として教えてくれましたが、バージョン2.6.1で以下のIssue(課題)の投稿に対処し、認識できない形式は「標準(General)」として読み込むようになりました。openpyxl’シートのコピーは問題ありませんなお、copy_worksheet()では、ユーザー定義の書式形式はそのままコピーされます。上記の例では、セルの値が日付のはずがシリアル値として読み込まれてしまうので何か対策が必要です。該当するファイルが少なければ、手動でファイルを修正するのが簡単ですが、数量が多くなる場合はコードで実装しておく必要があります。対処法1:手動でエクセルファイルを修正する以下のようにセルの書式設定で「表示形式」を組み込みの日付に変更します。コードからこの修正したファイルを読み込むと、以下のように日時(datetime.datetime)で認識されているのが確認できます。表示形式もエクセルで設定した通りになっています。ws["B1"].number_format'yyyy"年"m"月";@'対処法2:コードで値を変換するコードで日付のシリアル値をdatetime.datetime型に変換するには、openpyxl.utils.datetimeモジュールのfrom_excel()関数を用います。0)openpyxl.utilsパッケージには、結構便利なツールがありますので、一度のぞいて見ることをオススメします。UnlimitedでPythonを学習する3つのコツ仕事自動化におすすめの本Pythonの初歩からステップを踏みながら仕事自動化のプログラミングを学べます。弊社の中嶋が執筆しました。手書きのためのコード用ノート手書きでコーティングするためのノートをアマゾンで販売しています。ガンマソフト株式会社ガンマソフトについてお問い合わせ利用規約プライバシーポリシ。