2023年5月30日分_Pythonのopenpyxlの応用編

●概要

若干長めのopenpyxlをCHATGPTに作成してもらったので、記録用に記載
※コードの挙動は未チェック

エクセルの計算式を維持したまま別のファイルに転記する方法

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

# 元のファイルを読み込む
source_workbook = load_workbook("source_file.xlsx")

# シートを選択
source_sheet = source_workbook["Sheet1"]

# 新しいワークブックを作成
destination_workbook = Workbook()
destination_sheet = destination_workbook.active

# セルの数式を維持したままコピーする
for row in source_sheet.iter_rows(values_only=True):
    destination_sheet.append(row)

# セルの数式を反映した値でコピーする
for row in source_sheet.iter_rows():
    for cell in row:
        destination_cell = destination_sheet[cell.coordinate]
        destination_cell.value = cell.value
        destination_cell.data_type = cell.data_type

# ワークブックを保存
destination_workbook.save("destination_file.xlsx")

# ワークブックをクローズ
source_workbook.close()
destination_workbook.close()

Excelファイルのデータ統合と集計

import os
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

# 統合後のデータを格納する新しいワークブックを作成
merged_wb = load_workbook()
merged_sheet = merged_wb.active

# フォルダ内のExcelファイルを一覧表示
folder_path = "path/to/folder"
files = os.listdir(folder_path)

for file in files:
    if file.endswith(".xlsx"):
        # Excelファイルを読み込む
        file_path = os.path.join(folder_path, file)
        wb = load
        # Excelファイルの各シートのデータを統合
        with load_workbook(file_path) as wb:
            for sheet_name in wb.sheetnames:
                sheet = wb[sheet_name]
                for row in sheet.iter_rows(min_row=2, values_only=True):
                    # データを統合して新しいワークブックに追加
                    merged_sheet.append(row)

# 統合したデータを保存
merged_wb.save("path/to/merged.xlsx")

# 統合後のデータの集計
data = []
for row in merged_sheet.iter_rows(min_row=2, values_only=True):
    data.append(row)

# 集計処理の例(合計値)
sum_value = sum([row[0] for row in data])

# 集計結果の表示
print("合計値:", sum_value)

複数のExcelファイルにはそれぞれ異なるデータが含まれています。
これらのExcelファイルから特定の条件に一致するデータを検索し、データをマージ・結合するPythonプログラム

import os
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

# 検索条件を入力
search_column = "A"
search_value = "example"

# 結合後のデータを格納する新しいワークブックを作成
merged_wb = load_workbook()
merged_sheet = merged_wb.active

# フォルダ内のExcelファイルを一覧表示
folder_path = "path/to/folder"
files = os.listdir(folder_path)

for file in files:
    if file.endswith(".xlsx"):
        # Excelファイルを読み込む
        file_path = os.path.join(folder_path, file)
        wb = load_workbook(file_path)

        for sheet_name in wb.sheetnames:
            sheet = wb[sheet_name]
            for row in sheet.iter_rows(min_row=2, values_only=True):
                # 指定された条件に一致する行を絞り込む
                if row[get_column_letter(sheet.columns.index(search_column))] == search_value:
                    # データをマージして新しいワークブックに追加
                    merged_sheet.append(row)

        wb.close()

# 結合したデータを保存
merged_wb.save("path/to/merged.xlsx")

print("データのマージ・結合が完了しました。")


openpyxlを使用してファイルを書き込むコード例

from openpyxl import Workbook

# 新しいワークブックを作成
workbook = Workbook()

# アクティブなシートを取得
sheet = workbook.active

# セルに値を書き込む
sheet["A1"] = "Hello"
sheet["B1"] = "World!"

# 別のセルに値を書き込む方法
cell = sheet.cell(row=2, column=1)
cell.value = "This is a cell"

# ファイルを保存
workbook.save("path/to/file.xlsx")

# ワークブックをクローズ
workbook.close()

print("ファイルの書き込みが完了しました。")


Excelファイルの表計算データ統合

import os
from openpyxl import Workbook, load_workbook

# 新しいワークブックを作成
merged_wb =Workbook()

# フォルダ内のExcelファイルを一覧表示
folder_path = "path/to/folder"
files = os.listdir(folder_path)

for file in files:
    if file.endswith(".xlsx"):
        # Excelファイルを読み込む
        file_path = os.path.join(folder_path, file)
        wb = load_workbook(file_path)

        for sheet_name in wb.sheetnames:
            sheet = wb[sheet_name]
            # 表計算データのセル範囲を取得
            data = sheet.iter_rows(values_only=True)

            # 新しいシートを作成し、表計算データを追加
            new_sheet = merged_wb.create_sheet(sheet_name)
            for row in data:
                new_sheet.append(row)

        wb.close()

# 結合したデータを保存
merged_wb.save("path/to/merged.xlsx")

print("表計算データの結合が完了しました。")

この記事が気に入ったらサポートをしてみませんか?