カテゴリー: 未分類

  • 【日付操作】プログラム実行時の日時を取得し、指定のフォーマットでセルに書き込む

    日々の業務でExcelを使っていると、作成日を入力することもあるかと思います。
    今回は日付けの取得方法、またいくつかの表示方法を紹介します。

    1.日付けの取得

    日付けを取得するには「datetime」をインポートして、
     変数 = datetime.date.today( )
    で実行時の年月日が得られます。

    この際、表示形式は「2025-1-1」のように取得され、あまりこの形のまま使う方はいないと思いますので、次で表示形式の変更方法を紹介します。

    2.表示形式の変更

    from openpyxl import load_workbook
    import openpyxl, datetime
    wb = load_workbook('C:/Users/1/Desktop/python/Excel/日時.xlsx')
    ws = wb['Sheet1']
    a=datetime.date.today()     #日時取得
    b=str(a).replace('-','')     #-(ハイフン)→空白へ置き換え
    c=str(a).replace('_','/')    #-(ハイフン)→/(スラッシュ)へ置き換え
    取得・置き換えデータの書き出し
    ws.cell(row = 1, column = 2).value = a
    ws.cell(row = 2, column = 2).value = b
    ws.cell(row = 3, column = 2).value = c
    ws.cell(row = 4, column = 2).value = a
    ws.cell(row = 4, column = 2).number_format = 'yy"年"m"月"d"日"'  #表示形式の変更
    wb.save('C:/Users/1/Desktop/python/Excel/日時'+b+'.xlsx')

    実行結果

    3.終わりに

    今回は日付の取得・表示方法を紹介しました。作成日などは資料の種類を問わず使う機会が多いので、覚えておくとよく使用すると思います。

  • 【大量データ一括処理】指定フォルダ内にある全てのファイルを順に読み込んで自動処理

    業務をしていると複数のファイルに同じ処理を行うこともあると思います。
    今回はデータを繰り返し処理する場合のコードを紹介します。

     

    1.アウトプット

    繰り返し処理を行うといったらfor文またはwhile文を考えると思います。
    ファイルの数が分かっているのであれば回数を数字で指示すれば済みますが、処理するファイルが何個か分からない、毎回変動するといったことも多いと思います。

    そこでここではfor文を使い、フォルダの中のファイル数を数え、その数だけ繰り返し処理をして以下2通りの種類の条件でファイルを保存します。

    • ファイルと同じ階層に「結果」フォルダを作りその中へ保存
    • ファイル名の頭に「別名_」と付けてファイルと同じ階層に保存

     

    2.コードの紹介

    上記の内容を実行する場合のコードは次のようになります。

    from openpyxl import load_workbook
    import glob, os
    folder_path = 'C:/Users/1/Desktop/python/繰返し処理'
    pattern = '*.xlsx'
    search_path = os.path.join(folder_path, pattern)
    file_list = glob.glob(search_path)
    for i in file_list:
    wb = load_workbook(i)
    dir = os.path.dirname(i)   #対象ファイルの1つ上の階層までのパス取得
    name = os.path.basename(i)  #対象ファイルの名前のみ取得
      wb.save(dir+'/別名_'+name)  #ファイル名を変えるパターン
    wb.save(dir+'/結果/'+name)  #他のフォルダに保存するパターン

    各コードは次のような役割をしています。

    import glob, os
    glob:特定のファイルを取得するライブラリ
    os:フォルダやファイルを操作するライブラリ


    folder_path = ‘C:/Users/1/Desktop/python/繰返し処理’:対象ファイルが入っているフォルダのパス
    pattern = ‘*.xlsx’:操作したいファイルの指定
    search_path = os.path.join(folder_path, pattern):フォルダパス+ファイル名
    file_list = glob.glob(search_path):指定したパスのファイルすべてをリストへ追加


    for i in file_list; :リストに入れたファイルを1つずつ処理


    このように対象ファイルのパスをファイルの手前とファイル名で区切り、「*」で指定の拡張子ファイルをすべて取得してリストに加えることで、1つ1つのファイルを処理するようにします。

    ファイル名を変えずに上書き保存する場合は「wb.save(dir+name)でいいですが、今回のように元データを残しておきたい場合は名前を変えたり、別のフォルダに保存します。

     

    3.終わりに

    今回はフォルダ内のファイル数だけ繰り返し処理を行う説明のため、処理自体は保存をする単純なものでしたが、for文の中に処理を加えることで同じように複数ファイルを編集できます。
    毎日大量のファイルに同じ処理を行う業務をしている場合は大幅な時間削減ができるのでぜひ試してみてください。

  • 【データ転記】指定した行・列(セルの範囲)を一括でコピーして別の場所に貼り付ける

    openpyxlで1セルに対してのコピペ方法は紹介しましたが、今回は行も列も複数ある表の値を丸ごとコピペする方法を紹介します。またファイルをただコピーするだけでなく、事前にフォーマットデータを用意してそこへコピーした値を貼付けるといった状況を想定したコードを紹介します。

     

     

    1.アウトプット

    Excelファイルをそのままコピーするだけであれば、いくらファイル数が多いといっても、フォルダ内のファイルを一括選択→まとめてコピーをするなど、わざわざプログラミングにする魅力を感じにくいと思うので、自分がプログラミング使用した際に感じたメリットを書きます。

    • 自分で用意した表題などを書き加えたフォーマットに必要なデータを書き込める
    • 保護してあるデータをパスワード入力無しでコピーできる

    今回はコピー元の表データを、表題を入れたフォーマットデータにコピペしていきます。これは過去に自分が作成した、「他部署の共有フォルダにあるデータを崩さないように自分のフォルダにコピーする」といった作業の簡易版になります。

     

    2.コードの紹介

    アウトプットとしては次のように「サンプル.xlsx」の内容を「フォーマット.xlsx」の書式に書き込んだ「完成.xlsx」が出来ます。

    コードは次のようになります。

    import openpyxl
    from openpyxl import load_workbook
    #サンプルファイルのサンプルシートをロード
    wb1 = openpyxl.load_workbook('C:/Users/1/Desktop/python/openpyxl/サンプル.xlsx')
    ws1 = wb1['サンプル']
    #フォーマットファイルのフォーマットシートをロード
    wb2 = openpyxl.load_workbook('C:/Users/1/Desktop/python/openpyxl/フォーマット.xlsx')
    ws2 = wb2['フォーマット']
    #iに行、jに列の範囲を指定
    for i in range(1,7):
    for j in range(1,7):
    copy = ws1.cell(row = i, column = j).value
    ws2.cell(row = i+2, column = j, value = copy)
    j += 1
    i += 1
    #フォーマットに書き込んだデータを完成.xlsxと名前を付けて保存
    wb2.save('C:/Users/1/Desktop/python/openpyxl/完成.xlsx')

    表の読み込み・書き込みはfor文を使い、1行目の情報を「for j in range(1,7):」で1列ごとに処理して、
    その処理を「for i in range(1,7):」で指定した行数分繰り返しています。

    また今回フォーマットデータには表題が入っていて2行ずらしたいので、取得したvalueを書き込む際に「i+2」としています。

     

    3.終わりに

    Excelの表データを別Excelに書き写すコードを紹介しました。
    今後このコードを使って、「複数ファイルのデータをつなげて1つの表にする」、「条件に当てはまった行だけを抽出して表にする」など更に条件を加えたものを紹介しようと思います。

  • 【マウス・キーボード自動化】画面上の特定位置をクリック・文字入力を自動で行う

    以前にマウス・キーボードの自動操作の方法を紹介しましたが、今回はそれらを使用してデスクトップアプリを自動化しようと思います。


     

    目次
    1. 終わりに

    1.まずはじめに

    PyAutoGUIを利用した自動操作として設定画面の変更を行うコードを紹介しますが、PC画面を操作するという点で同じなのでご自身のデスクトップにあるアプリでも実際に試して頂ければと思います。

    2.自動操作の流れ、メリット・デメリット

    PyautoGUIを利用した自動操作は基本的に座標まで移動→マウスまたはキーボード操作→座標移動となります。
    普段自分が行っている作業をそのままコマンドにしていく流れです。難しい操作が不要なため、RPAなども同じ流れのものが多いと思います。


    メリット
    ・大量のタスクに対して労力を使わない
    ・実行中PCは使えないが他の作業ができる
    ・打ち間違いがない
    ・人力で行うより早い


    デメリット
    ・全体の手順を整理できていないと最後までプログラムできない
    ・一つ一つをコマンド化していくためコードが長い
    ・待機時間を長めに設定しないとエラーが起きやすい
    ・座標で指示するため新しいウインドウを毎回最大化しないと動作が不安定

    それぞれ書き出しましたが主に
    メリット:プログラム後は作業が楽になる
    デメリット:プログラム完成までの手順が多く大変

    といったものです。RPAでもいえることですが、決まった手順にしか対応できないので、PyautoGUIだけで完結しようとすると業務効率が上がるかは業務内容によって異なるため、自分の業務に活かせそうだという方はぜひ参考にしてください。

    3.実行例

    デスクトップアプリではありませんが、設定画面の自動操作を行うコードを紹介します。

    import pyautogui, time
    #手順①
    pyautogui.click(x=25, y=748)
    time.sleep(2)
    #手順②
    pyautogui.click(x=25, y=642)
    time.sleep(2)
    #手順③
    pyautogui.click(x=170, y=320)
    time.sleep(2)
    #手順④
    pyautogui.click(x=170, y=270)
    time.sleep(2)
    #手順⑤
    pyautogui.click(x=365, y=367)
    time.sleep(2)

    左のコードでは手順①~⑤までの座標を事前にposition()を使って取得し、「指定した座標をクリック」→「2秒待機」→「指定した座標をクリック」を繰り返して設定画面からスピーカーのミュート設定を変更しています。

    4.終わりに

    PyautoGUIを使って実際に画面操作をしてみました。今回はクリックしか使用しませんでしたが、普段皆さんがマウスとキーボードで行っている操作はPyautoGUIで出来るので、大量の繰り返し作業があり業務改善に取り組みたいと考えている方はぜひ試してみてください。

  • 【コード辞書】クリック・キー入力・画像認識などPyAutoGUIで使える主要メソッド一覧

    今回はマウス・キーボードの操作を自動化する「PyAutoGUI」の基本を紹介します。ここでは基本のコマンドを説明して、今後紹介予定であるデスクトップ上での操作自動化の基礎知識として覚えてもらえればと思います。

     

    1.コマンド一覧

    PyAutoGUIは標準ライブラリではないのでインストールが必要です。
    pip install pyautogui

    次にPyAutoGUIのコマンドの紹介です。

    キーボードマウス
    コマンド操作コマンド操作
    press()キーを押すclick()クリック
    typewrite()キー入力doubleClick()ダブルクリック
    hotkey()同時押しposition()カーソルの現在位置を取得
    keyDown()キーを押したままmoveTo()カーソルを指定の座標へ移動
    keyUp()キーを離すmoveRel()カーソルを現在位置から指定の距離移動
    dragTo()ドラックして指定の座標へ移動
    dragRel()ドラックして指定の距離移動

    ※座標は画面左上を始点に右方向をx、下方向をyと進みます

     

    2.コマンド活用例

    上記で紹介したコマンドを組み合わせてExcelへ記入する例を書いてみます。
    ※ここではpyautoguiの動きを確認するためopenpyxlを使わずに、画像のようにExcel画面を立ち上げた状態でマウス操作をしています。

    import pyautogui, time
    #事前準備:入力したいセルの座標取得&表示
    mp = pyautogui.position()
    print(mp)
    #Excel上の座標をクリックしてExcelに切り替え
    pyautogui.click(x=70, y=235)
    time.sleep(1)
    #入力したい座標へ移動してクリック
    pyautogui.click(x=70, y=235)
    time.sleep(1)
    #文字列を0.2秒間隔で入力
    pyautogui.typewrite('abc', interval=0.2)
    time.sleep(1)
    #エンターキーを押し、下のセルへ移動
    pyautogui.press('enter')
    time.sleep(1)
    # 'ctrl'+'d'(上の値を貼付け)を同時押し
    pyautogui.hotkey('ctrl','d')



    ここでは動きが確認できるようにtimeをインポートして、各動作後に1秒の待機時間を設定しています。
    事前準備として先に、操作したいセルの上にカーソルを持っていきposition()コマンドで座標を取得しています。(今回の場合セル「A1」の座標(70, 235))


    座標の確認が済んだら操作したいコマンドを適宜書いていきます。
    今回プログラム実行後にExcel画面に切り替えるために、セル「A1」をクリックするコマンドを2回書いています。


    またtypewrite()コマンドでは後ろに入力間隔を0.2秒にする設定をしていますが、オプションのため、不要であれば記載はいりません。

    3.終わりに

    今回はpyautoguiの基本操作を紹介しました。オプションを設定せずに最低限のコマンドであれば簡単なので、書き方に自信がなかったり、忘れてしまった時は考え込まずに検索をして時間をかけずに実行していきましょう。

  • 【PDF操作】複数のPDFファイルを結合する・特定のページだけを抽出して保存する

    pythonではPDFファイルを操作することも可能です。ここではどんな操作が可能か、コードと併せて紹介します。

     

    目次
    1. PDF編集の仕組み
    2. PDFの結合
    3. PDFの分割
    4. 終わりに

     

    1.PDF編集の仕組み

    PDFを編集するうえで行っていることはザックリ言うと内容の抽出と白紙のPDFへの書き込みです。

    この方法で抽出した内容を1ページごとに書き込む(結合)、抽出する範囲を指定して書き込む(分割)、抽出した内容を他の形式ファイルに書き込む(転記)ことをしています。

     

    2.PDFの結合

    ではさっそくPDFの結合をやってみましょう。まずはPDFを操作するのに必要なライブラリをインストールします。

    pip install pypdf

    無事にインストールが完了したら次のプログラムを実行します。

    import pypdf
    #抽出した内容を格納する変数作成
    merger = pypdf.PdfWriter()
    #merger.append(ファイル指定)で変数mergerに抽出内容の格納
    merger.append('C:/Users/1/Desktop/python/PDF/ファイル①.pdf')
    merger.append('C:/Users/1/Desktop/python/PDF/ファイル②.pdf')
    #merger.write(保存するファイル名) でファイルに名前を付けて抽出データ書き込み
    merger.write('C:/Users/1/Desktop/python/PDF/結合ファイル.pdf')
    merger.close()

    プログラムを実行してエラーが起こらなかったら意図通りにできているか確認してください。上記のプログラムだと「ファイル①」と「ファイル②」が結合した「結合ファイル」ができます。

    3.PDFの分割

    PDFの分割は複数ページあるPDFの指定のページ内容を抽出して白紙のPDFに書き出します。コードの書き方は先ほど内容を抽出する際に使った「merger.append」の最後に抽出範囲を加えるだけです。ただし、抽出範囲の書き方に注意してください。

    import pypdf
    #抽出した内容を格納する変数作成
    merger1 = pypdf.PdfWriter()
    merger2 = pypdf.PdfWriter()
    #merger.appendの後ろに「抽出範囲-1」を追加
    merger1.append('C:/Users/1/Desktop/python/PDF/分割用ファイル.pdf', pages=(0,1))
    merger2.append('C:/Users/1/Desktop/python/PDF/分割用ファイル.pdf', pages=(1,2))
    #merger.write(保存するファイル名) でファイルに名前を付けて抽出データ書き込み
    merger1.write('C:/Users/1/Desktop/python/PDF/分割ファイル①.pdf')
    merger2.write('C:/Users/1/Desktop/python/PDF/分割ファイル②.pdf')
    merger1.close()
    merger2.close()

    このコードでは「分割用ファイル.pdf」をmerger1で1ページ目を、merger2で2ページ目を抽出しています。1ページ単位でなくても、pages=(1,4)で2,3,4ページ、pages=(2,4)で3,4ページと複数ページの抽出もできます。

    ややこしいですが分割して抽出するには、pages=(“開始ページ -1 “, “終了ページ”)と指定する必要があります。

    4.終わりに

    PDFの結合・分割について紹介しました。今回はファイルの保存先までコード内に書いたのでファイルを選ぶために毎回書き換えが必要ですが、Tkinterなどでファイル選択をできるようにすると使い勝手が良くなるので、今後応用編として紹介しようと思います。