Windowsのプログラムと機能で表示されている内容を取得する

 

 

import winreg

# プログラム一覧を取得する関数
def get_installed_programs():

    # レジストリを検索
    uninstall_key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    programs = []
   
    try:
        with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, uninstall_key) as key:
            i = 0
            while True:
                subkey_name = winreg.EnumKey(key, i)
                subkey_path = f"{uninstall_key}\\{subkey_name}"

                with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, subkey_path) as subkey:
                    try:
                        program_name = winreg.QueryValueEx(subkey, "DisplayName")[0]
                        programs.append(program_name)
                    except FileNotFoundError:
                        pass  # DisplayNameが存在しない場合はスキップ

                i += 1

    except OSError:
        pass  # キーが見つからない場合はスキップ
   
    return programs

# プログラム一覧を書き出す関数
def write_to_file(programs, file_path):
    with open(file_path, 'w') as file:
        for program in programs:
            file.write(program + '\n')

# メイン処理
if __name__ == "__main__":

    # プログラム一覧を取得する関数呼び出し
    programs = get_installed_programs()
   
    # プログラム一覧をテキストに書き出す関数呼び出し (パスは自分の環境に書き換えること)
    write_to_file(programs, 'D:\lab\installed_programs.txt')

ExcelをPDF形式で保存する

フォルダ内のExcelファイルをPDF形式で保存するコード。

ExcelがインストールされているWindowsマシンで動作することが前提。

 

コマンドプロンプトから以下でライブラリをインストールする。

pip install comtypes

 

Pythonのコードは以下の通り。

pip install mtype

import os
import comtypes.client

# PDF変換関数
def excel_to_pdf(input_folder, output_folder):

    excel = comtypes.client.CreateObject("Excel.Application")
   
    # 対象のExcelファイルを取得する
    excel_files = [f for f in os.listdir(input_folder) if f.endswith('.xlsx')]

    # すべてのファイルが終わるまでループ

    for excel_file in excel_files:
        # Excelファイルのパスを構築
        excel_path = os.path.join(input_folder, excel_file)

        # 新しいワークブックを開く
        workbook = excel.Workbooks.Open(excel_path)

        # PDFの保存先ファイルパスを構築
        pdf_file = os.path.splitext(excel_file)[0] + '.pdf'
        pdf_path = os.path.join(output_folder, pdf_file)

        # PDF形式で保存する関数呼び出し
        save_as_pdf(workbook, pdf_path)

        # ワークブックを閉じる
        workbook.Close()

        # 進捗メッセージを表示
        print(f"変換完了: {excel_file} -> {pdf_file}")

    # Excelを終了
    excel.Quit()

# PDF形式で保存する関数
def save_as_pdf(workbook, pdf_path):
    # PDFの形式で保存
    xlTypePDF = 0
    workbook.ExportAsFixedFormat(xlTypePDF, pdf_path)

# メイン処理
if __name__ == "__main__":

    input_folder = "D:\lab\hoge"  # 入力Excelファイルがあるフォルダのパス
    output_folder = "D:\lab\hoge\output"  # 出力PDFファイルを保存するフォルダのパス

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    excel_to_pdf(input_folder, output_folder)

複数のPDFファイルを1つにまとめる

複数のPDFファイルを1つにまとめるプログラム例は以下の通り。

 

import fitz  # PyMuPDFのモジュール
import os

#関数の定義
def merge_pdfs(input_folder, output_pdf_path):

    # 出力先PDFファイルを作成する
    output_pdf_document = fitz.open()

    # 入力フォルダ内のすべてのPDFファイルを取得し、ファイル名の昇順でソートする
    pdf_files = sorted([f for f in os.listdir(input_folder) if f.endswith(".pdf")])

    # 各PDFファイルを順番にマージする
    for pdf_file in pdf_files:
        pdf_file_path = os.path.join(input_folder, pdf_file)
        input_pdf_document = fitz.open(pdf_file_path)
        output_pdf_document.insert_pdf(input_pdf_document)

        print(f"{pdf_file} マージ")

        # 入力PDFドキュメントを閉じる
        input_pdf_document.close()

    # 出力先PPDFファイルを保存する
    output_pdf_document.save(output_pdf_path)
    output_pdf_document.close()

    print(f"マージが完了しました。 {output_pdf_path}")

# メイン処理の定義
if __name__ == "__main__":

    # 入力と出力のパスを指定する
    input_folder = "D:\lab\pdf\output"          # 入力フォルダのパス
    output_pdf_path = "D:\lab\pdf\merged.pdf"   # 出力PDFファイルのパス

    # 入力フォルダが存在しない場合は終了する
    if not os.path.exists(input_folder):
        print(f"フォルダが存在しません。")
        exit()

    # 関数の呼び出し
    merge_pdfs(input_folder, output_pdf_path)

PDFファイルをページごとに別ファイルにする

 

複数ページあるPDFファイルを1ページごとに別ファイルにするソースコード

 

import fitz  # PyMuPDFのモジュール

# 関数の定義
def split_pdf(input_pdf_path, output_folder):

    # PDFファイルを開く
    pdf_document = fitz.open(input_pdf_path)

    # ページの数だけループ
    for page_number in range(pdf_document.page_count):

        # 各ページを取得する
        page = pdf_document[page_number]

        # 新しいPDFドキュメントを作成し、1ページだけを持つドキュメントにする
        new_pdf_document = fitz.open()
        new_pdf_document.insert_pdf(pdf_document, from_page=page_number, to_page=page_number)

        # 出力ファイルのパスを構編集する
        output_file_path = f"{output_folder}/page_{page_number + 1}.pdf"

        # 新しいPDFドキュメントを保存する
        new_pdf_document.save(output_file_path)
        new_pdf_document.close()

        print(f"Page {page_number + 1} saved to {output_file_path}")

    # 元のPDFドキュメントを閉じる
    pdf_document.close()

# メイン処理の定義
if __name__ == "__main__":
    # 入力と出力のパスを指定
    input_pdf_path = "D:\lab\pdf\hoge.pdf"  # 入力PDFファイルのパス
    output_folder = "D:\lab\pdf\output"      # 出力フォルダのパス

    # 出力フォルダが存在しない場合は作成する
    import os
    os.makedirs(output_folder, exist_ok=True)

    # PDFを分解して保存する関数を呼び出し
    split_pdf(input_pdf_path, output_folder)

pyautogui

pyautoguiを使うとRPAのようにマウスやキーボード操作を自動化できる。

 

ブラウザを開き、検索するまでを自動で実行するコードは以下の通り。

※座標は動かなければ正しい値に調整すること

import pyautogui
import time

# ブラウザを開く
pyautogui.hotkey('win', 'r')  # Windowsの場合
pyautogui.write('chrome')  # ブラウザの実行可能ファイル名に変更する場合はここを変更
pyautogui.press('enter')

# ブラウザが起動するまで待機する(時間は要調整)
time.sleep(2)

# Googleのサイトに移動する
pyautogui.write('https://www.google.com')
pyautogui.press('enter')

# 移動するまで待機する(時間は要調整)
time.sleep(1)

# /キーを押して検索ボックスに移動する
pyautogui.press('/')

# backspaceキーを入力して検索ボックスを削除する
for i in range(50):
    pyautogui.press('backspace')

# testの文字を入力する
pyautogui.write('test')

print('hogeの文字で検索する')

# enterキーを入力して検索する
pyautogui.press('enter')

# 移動するまで待機する(時間は要調整)
time.sleep(3)

# 検索結果をクリックする(座標は要調整)
pyautogui.click(x=695, y=494)

 

 

 

PDFファイルの値をExcelに出力する

PDFファイルの全ページをExcelに出力するコードは以下の通り。

 

PDFの1ページ目⇒A列

PDFの2ページ目⇒B列

・・・・

 

import fitz  # PyMuPDF
from openpyxl import Workbook

#関数の定義
def pdf_to_excel(pdf_path, excel_path):
    # PDFを開く
    pdf_document = fitz.open(pdf_path)

    # Excelブックを作成
    wb = Workbook()
    ws = wb.active

    # PDFのページごとに処理
    for page_num in range(pdf_document.page_count):
     
        # PDFのページを取得
        page = pdf_document[page_num]

        # ページのテキストを取得
        page_text = page.get_text("text")

        # テキストを改行で分割する
        lines = page_text.split('\n')

        # テキストを列に書き込む
        for i, line in enumerate(lines, start=1):
           
            # 列のインデックスを計算(A=1, B=2, C=3, ...)
            column_index = page_num + 1

            # テキストを該当する列に書き込む
            ws.cell(row=i, column=column_index, value=line.strip())

    # PDFを閉じる
    pdf_document.close()

    # Excelファイルに保存
    wb.save(excel_path)

#メイン処理の定義
if __name__ == "__main__":
    pdf_file_path = "D:\lab\pdf\hoge.pdf"  # 入力PDFファイルのパス
    excel_file_path = "D:\lab\pdf\output.xlsx"  # 出力Excelファイルのパス

    pdf_to_excel(pdf_file_path, excel_file_path)

 

 

pymupdf

pymupdfでPDFファイルを操作できる。

 

コマンドプロンプトからpymupdfをインストールするpymupdf

pip install pymupdf

 

PDFファイル内の値をテキストファイルに出力するコード例

import fitz  # PyMuPDF

#関数の定義
def extract_text_from_pdf(pdf_path, output_text_file):
    try:
        # PDFファイルを開く
        pdf_document = fitz.open(pdf_path)

        # 出力用のテキストファイルを作成する
        with open(output_text_file, 'w', encoding='utf-8') as text_file:
            for page_number in range(pdf_document.page_count):

                #ページ番号を出力
                text_file.write('**********'+ str(page_number) +'**********\n')
               
                # ページオブジェクトを取得
                page = pdf_document[page_number]

                # ページオブジェクトをテキストに変換する
                text = page.get_text()

                # テキストファイルに書き込みする
                text_file.write(text)

        print(f'出力が完了しました!!')

    except Exception as e:
        print(f'エラー: {e}')


# メイン処理
pdf_path = 'D:\lab\pdf\hoge.pdf'
output_text_file = 'D:\lab\pdf\hoge.txt'

#関数の呼び出し
extract_text_from_pdf(pdf_path, output_text_file)