タグ: サンプル

  • 【サンプル】日付けの取得と表示方法

    日々の業務で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つの表にする」、「条件に当てはまった行だけを抽出して表にする」など更に条件を加えたものを紹介しようと思います。

  • 【サンプル】表の書式

    Excelで作成した表の書式設定について紹介しましたが、ここではいくつか書式を変えてみようと思います。枠線に関してはそれだけでコードが長くなるため別記事で紹介しているのでそちらをごらんください。


    1.アウトプット

    まずは今回紹介する表とコードを紹介します。画像左側のように文字と枠線が引かれている状態から2行目の書式を変更します。

    from openpyxl import load_workbook
    from openpyxl.styles import Font, PatternFill, Alignment
    
    wb = load_workbook('C:/Users/1/Desktop/python/openpyxl/表作成.xlsx')
    ws = wb["表"]
    
    
    #B2~F2の表題を水色で塗りつぶし
    for col in range(2,7):
        ws.cell(row=2, column=col).fill = PatternFill(patternType='solid', fgColor='B8CCE4')
    
    
    #B2を太文字
    ws["B2"].font = Font(bold=True)
    
    
    #C2~F2を赤文字
    for col in range(3,7):
        ws.cell(row=2, column=col).font = Font(color='00FF0000')
    
    
    #C2~F2の左右位置を真ん中揃え
    for col in range(3,7):
        ws.cell(row=2, column=col).alignment = Alignment(horizontal='center', vertical='center')
    
    
    wb.save('C:/Users/1/Desktop/python/openpyxl/表作成.xlsx')

    2.コードの説明

    今回自分が普段よく使う書式設定を紹介しましたが、他の書式も設定で変えられます。ここでは一連のコードの流れを理解してもらえればと思います。

    縦一列、横一列をまとめて書式を適用させる場合はfor文を利用しています。
    また表の中身のように縦横複数の範囲に適用させる場合は、for文の中にfor文を入れることでまとめて適用させることができます。

    3.終わりに

    今回は表の書式を設定するコードのサンプルを紹介しました。1つ1つ設定のコードを書くため全体のボリュームは多いですが、それぞれの設定方法は単純なので、このページで書き方につまずくことが無くなる人が増えたら嬉しいです。

  • 【サンプル】表の枠線

    Excelで表を作成する際に枠線に一部に基本の枠線以外を使うと意外と面倒だったりするので、数種類の線種を含めた表作成のコードを紹介します。
    いつも作る表の形が決まっている方は参考にしてください。


    1.アウトプット

    まずは今回紹介する表とコードを紹介します。自分が良く使う外枠を太線、1行目の下線を二重線にした形で作りました。

    from openpyxl import Workbook
    from openpyxl.styles import Border, Side
    
    Workbook()
    wb = Workbook()
    ws = wb.active
    
    
    #列(col)、行(row)の始点、終点の定義(以下はB2~F7までを指定)
    col_start = 2
    col_end = 6
    row_start = 2
    row_end = 7
    
    #-------線種定義-------
    
    #パターンA:4辺全て細線
    thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
    
    
    #パターンB:1辺だけ太線のセルを左辺、右辺、上辺、下辺それぞれ作成
    thick_left = Border(left=Side(style='thick'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
    thick_right = Border(left=Side(style='thin'), right=Side(style='thick'), top=Side(style='thin'), bottom=Side(style='thin'))
    thick_top = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thick'), bottom=Side(style='double'))
    thick_bottom = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thick'))
    
    
    #パターンC:角2辺が太線のセルを左上、右上、左下、右下それぞれ作成
    thick_ltop = Border(left=Side(style='thick'), right=Side(style='thin'), top=Side(style='thick'), bottom=Side(style='double'))
    thick_rtop = Border(left=Side(style='thin'), right=Side(style='thick'), top=Side(style='thick'), bottom=Side(style='double'))
    thick_lbottom = Border(left=Side(style='thick'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thick'))
    thick_rbottom = Border(left=Side(style='thin'), right=Side(style='thick'), top=Side(style='thin'), bottom=Side(style='thick'))
    
    
    #-------表作成-------
    #パターンAを使い全て細線の表作成
    for row in range(row_start, row_end+1):
            for col in range(col_start, col_end+1):
                cell = ws.cell(row=row, column=col)
                cell.border = thin_border
    
    
    #パターンBを使い外枠の左辺、右辺が太線の表作成
    for row in range(row_start, row_end+1):
        ws.cell(row=row, column=col_start).border = thick_left
        ws.cell(row=row, column=col_end).border = thick_right
    
    
    #パターンBを使い外枠の上辺、下辺が太線の表作成
    for col in range(col_start, col_end+1):
        ws.cell(row=row_start, column=col).border = thick_top
        ws.cell(row=row_end, column=col).border = thick_bottom
    
    
    #パターンCを使い外枠の2辺が太線の作成
    ws.cell(row=row_start, column=col_start).border = thick_ltop
    ws.cell(row=row_start, column=col_end).border = thick_rtop
    ws.cell(row=row_end, column=col_start).border = thick_lbottom
    ws.cell(row=row_end, column=col_end).border = thick_rbottom
    
    
    wb.save('C:/Users/1/Desktop/python/openpyxl/表作成.xlsx')

    2.表作成の工程

    見た目は簡単な表ですが、ずいぶんと長いコードになってしまいました。コードが長いので表作成の工程を説明すると、
    細線のグラフ作成→外枠の左右、上下の辺を太線→四隅の角を太線
    の手順で作成した表を重ねていくことで目的の形を作っています。

    範囲指定の定義や関数化することでもっとスッキリしたコードにできるかもしれませんが、定義する範囲をセル番号をそのまま書き出せば良かったり、表を分解してそれぞれの線種を定義することで形を変えやすかったりと

    メリット
     ・作りが単純
     ・カスタマイズが容易
    デメリット
     ・コードが長い

    と言った特徴があります。ただし、表作成の頻度が少ない自分としてはカスタマイズが簡単な方が毎回作り方を調べて理解しなくていいので、この形をテンプレートとして利用しています。

    3.終わりに

    今回は表を作成するコードのサンプルを紹介しました。コードが長く手間なので、たまに表を作成する人がコードを調べると逆に時間がかかるかもしれないので、今回紹介したコードを活用してもらえると嬉しいです。