取り組みのきっかけ
仕事柄よくWordを使って書類を作るのですが、
ペーパーレス化の推進、グループウェア導入を経て、
「WordファイルをPDFにして書類を一元管理しよう!!」という上司の一声でスタート。
いくつあるかわからない無数の「.doc」「.docx」との戦いが始まる...
もちろん社内でpython使える人はおらず、それとなくやってみました。
実装
import win32com.client
import os
#必要なモジュールをインストールする
wd = win32com.client.Dispatch('Word.Application')
#「Wordを操作する」という宣言
documents_path = 'C:/test/'
word_list = []
#ファイルが保管されているフォルダのパスを設定
#word_file_nameを格納する空のリスト(word_list)を作成
for word_file_name in os.listdir(documents_path):
if os.path.isfile(os.path.join(documents_path, word_file_name)):
word_list.append(word_file_name)
for i in range(0,len(word_list)):
try:
word_file = wd.Documents.Open(documents_path + '/' + word_list[i])
base_name, ext = os.path.splitext(word_list[i])
#base_name, ext により、extに拡張子が入り、ファイル名がbase_nameに格納される
word_file.SaveAs2(FileName = documents_path + base_name + '.pdf', FileFormat = 17)
#ファイル名を指定、フォーマット(17がPDF[https://docs.microsoft.com/ja-JP/office/vba/api/word.wdsaveformat])を設定
except Exception as e:
print(e)
#try以外の例外処理をeに格納、あれば表示する
finally:
word_file.Close()
print('complete')
色々試行錯誤し、上記のコードとなりました。
初心者故にかなり冗長な作りになっていると思います。
documents_pathは、今回掲載用なので、testとしていますが、
使用する際にはWordファイルが保管されているフォルダのパスを指定します。
#課題
・for文が2回入っており、本来は1つにまとめたかったのですが、
with文の中で、pywin32が上手く動作しなかったので、今後改善策を講じる必要がある。
・pywin32以外のモジュールでも試してみる。
・冗長的な部分をキレイにしてあげる。
初めて自作してみて
pythonはもともと興味があり、色々取り組んできていましたが実際になにかを完成させたというのは初めてでした。まだまだ本職の人から見れば下手くそかもしれませんが、まずは些細なものでもコード書いてみて書くことに慣れていきたいです。
社内で自動化を用いて改善できる部分は多々あるので、取り組み結果を備忘録も兼ねてコツコツQiitaに投稿していきます。
改善点やアドバイスいただけたら幸いです!よろしくお願いいたします。