PythonPRGフォルダ直下にあるフォルダ(./pdf)内に保管しているPDFファイルの一覧(「Pdf_List.xlsx」)を取得するサンプルプログラムを作成してみました。サンプルプログラム確認用のPDFファイルは、以下に記載したネットで公開されている大学のPythonの学習教材を使用しました。
PDFがネット公開されている大学のPythonの学習教材
- Pythonプログラミング入門(東大).pdf
- プログラミング演習 Python 2021(京大).pdf
- Python 学習教材(筑波大).pdf
- Python 入門 テキスト(明治大).pdf
PDFリストを作製する自作サンプルプログラム (「Make_a_Pdf_List.py」)
今回作成したサンプルプログラムを以下に記載します。
- 「Make_a_Pdf_List.py」
import openpyxl import pathlib from openpyxl.styles.alignment import Alignment from openpyxl.styles import PatternFill from openpyxl.styles import Font wb = openpyxl.Workbook() ws = wb.active ws.title = "pdf_list" sd = './pdf' # sd => 探査ディレクトリ pdf_name=list() # pdfファイル名の格納用リスト max_length = 0 # pdfファイル名の最大バイト数格納用変数 # pdfファイル名のリスト作成 fp => ファイルのパス for fp in pathlib.Path(sd).iterdir(): if fp.is_file() and fp.suffix == '.pdf': pdf_name.append(fp.name) # 表示列の幅変更用のpdfファイル名最大バイト数 if len(fp.name.encode()) > max_length: max_length = len(fp.name.encode()) # EXCELファイルへの表示位置 start_row = 1 # 表示開始列 start_col = 1 # 表示開始行 # タイトルセルの名前を設定 ws.cell(start_col,start_row).value='PDF filename' # タイトルセルの表示幅を変更 ws.column_dimensions['A'].width = max_length # タイトルセルの色を変更 fil_obj(水色 塗り潰し) fil_obj = PatternFill(fgColor='00ffff' , patternType='solid') ws.cell(start_col,start_row).fill = fil_obj # セルにPDFファイル名とHYPERLINK先を書き込む for i in range(0,len(pdf_name)): # 現在の行(cur_col)と列(cur_row)を変数に格納 cur_col = i+start_col+1 cur_row = start_row # PDFファイル名 => hpdf_name / HYPERLINK先 => hlnk_str hpdf_name = pdf_name[i] hlnk_str = sd + '/' + hpdf_name ws.cell(cur_col,cur_row).value = hpdf_name ws.cell(cur_col,cur_row).hyperlink = hlnk_str # ハイパーリンクの書式設定 fnt_obj(色:青 シングルアンダーライン) fnt_obj = Font(color='0000FF', u='single') ws.cell(cur_col,cur_row).font = fnt_obj # シートセル全体の水平方向を左寄せ、高さ方向を中央揃え for col in ws: for cell in col: cell.alignment = Alignment(horizontal='left',vertical='center') # シートセルの行高さ変更 for i in range(len(pdf_name)+2): ws.row_dimensions[i].height = 21 # 作成したファイルを名前を付けて保存 save_filename = 'Pdf_List.xlsx' wb.save(filename = save_filename) wb.close()
サンプルプログラムで作成したExcelファイル(「Pdf_List.xlsx」)
サンプルプログラム作成で得られた知見
- Pythonの標準ライブラリ「pathlib」を使用すると、フォルダ名やファイル名等を簡単に取得することが出来る。
import pathlib sd = 'pdf' # sd => 探査ディレクトリ pdf_name=list() # pdfファイル名の格納用リスト # pdfファイル名のリスト作成 fp => ファイルのパス for fp in pathlib.Path(sd).iterdir(): if fp.is_file() and fp.suffix == '.pdf': pdf_name.append(fp.name)
- Pythonには、VBAの配列に相当するリスト型があり、list() で空のリスト型の変数を作成し、そこにappendメソッドでリストに要素を追加することができる。
pdf_name=list() # pdfファイル名の格納用リスト : pdf_name.append(fp.name)
- PatternFill()を使用して作成したオブジェクト(fil_obj)をCellオブジェクトのfillプロパティに代入することによりセルの塗り潰し色を変更することができる。
from openpyxl.styles import PatternFill : fil_obj = PatternFill(fgColor='00ffff' , patternType='solid') ws.cell(start_col,start_row).fill = fil_obj
- セルのhyperlink属性にハイパーリンク先を書き込むことによりEXCELファイルのセルにハイパーリンクを設定することが出来る
# シート'A'列にpdfファイル名とHYPERLINKを書き込む hpdf_name = pdf_name[i] hlnk_str = sd + '/' + hpdf_name ws.cell(cur_col,cur_row).value = hpdf_name ws.cell(cur_col,cur_row).hyperlink = hlnk_str
- Font()を使用して作成したオブジェクト(fnt_obj)をCellオブジェクトのfontプロパティに代入することにより、リンク文字列の色やアンダーラインを変更することができる。
from openpyxl.styles import Font : # ハイパーリンクの書式設定 fnt_obj(色:青 シングルアンダーライン) fnt_obj = Font(color='0000FF', u='single') ws.cell(cur_col,cur_row).font = fnt_obj
コメント