Pythonとwin32com.clientを使ってExcelファイルの罫線スタイルを一括置換する方法

罫線も置換できるのね。Python

***

タイトル：
Pythonとwin32com.clientを使ってExcelファイルの罫線スタイルを一括置換する方法

今回は、Pythonとwin32com.clientを使って、複数のExcelファイル内の罫線スタイルを一括で置換する方法について説明します。この記事では、点線（Dot）の罫線を破線（Dash）に変更する例を示しますが、他の罫線スタイルにも応用できます。

***

1.  必要なモジュールのインポート
    まず、必要なモジュールをインポートします。`os`モジュールはファイルやフォルダの操作に、`win32com.client`モジュールはExcelの操作に使用します。

```python
import os
import win32com.client
from win32com.client import constants
```

2.  変更前後のフォルダを指定
    変更前のExcelファイルが格納されているフォルダと、変更後のファイルを保存するフォルダのパスを指定します。

```python
input_folder = r"C:\Users\-----\Desktop\python\罫線\変更前"
output_folder = r"C:\Users\-----\Desktop\python\罫線\変更後"
```

3.  Excelアプリケーションを開く
    `win32com.client.Dispatch("Excel.Application")`を使ってExcelアプリケーションを開きます。

```python
excel = win32com.client.Dispatch("Excel.Application")
```

4.  変更前のフォルダ内のExcelファイルを処理
    `os.listdir()`を使って、変更前のフォルダ内のすべてのExcelファイルをループ処理します。

```python
for filename in os.listdir(input_folder):
    if filename.endswith(".xlsx"):
        print(f"処理中のファイル: {filename}")
        # ワークブックを開く
        workbook_path = os.path.join(input_folder, filename)
        workbook = excel.Workbooks.Open(workbook_path)
        # 各シートを処理
        for sheet in workbook.Sheets:
            # シート内のすべてのセルを選択
            used_range = sheet.UsedRange
            # シート内のすべてのセルに対して罫線スタイルを変更
            for cell in used_range:
                # 上罫線
                if cell.Borders(constants.xlEdgeTop).LineStyle == constants.xlDot:
                    cell.Borders(constants.xlEdgeTop).LineStyle = constants.xlDash
                # 下罫線
                if cell.Borders(constants.xlEdgeBottom).LineStyle == constants.xlDot:
                    cell.Borders(constants.xlEdgeBottom).LineStyle = constants.xlDash
                # 左罫線
                if cell.Borders(constants.xlEdgeLeft).LineStyle == constants.xlDot:
                    cell.Borders(constants.xlEdgeLeft).LineStyle = constants.xlDash
                # 右罫線
                if cell.Borders(constants.xlEdgeRight).LineStyle == constants.xlDot:
                    cell.Borders(constants.xlEdgeRight).LineStyle = constants.xlDash
        # 変更後のファイル名を生成
        output_path = os.path.join(output_folder, filename)
        # 変更を保存
        workbook.SaveAs(output_path)
        # ワークブックを閉じる
        workbook.Close()
        print(f"処理が完了しました: {filename}\n")
```

このコードでは、各セルの上下左右の罫線をチェックし、点線（`constants.xlDot`）の場合は破線（`constants.xlDash`）に変更します。セル内のハッチングなどの他の書式設定には影響を与えません。

5.  Excelアプリケーションを閉じる
    すべてのファイルの処理が完了したら、`excel.Quit()`でExcelアプリケーションを閉じます。

```python
excel.Quit()
```

以上の手順により、指定したフォルダ内のすべてのExcelファイルの罫線スタイルを一括で置換することができます。処理の進捗状況は、コマンドラインに表示されるので、どのファイルが処理されたかを確認できます。

***

# 補足：罫線の種類の確認

罫線の種類を確認するPythonコード
先ほどのコードでは、点線（Dot）の罫線を破線（Dash）に変更しましたが、実際にExcelファイル内でどの罫線が使われているかを確認するには、以下のようなコードを使うことができます。

```python
import win32com.client
from win32com.client import constants

# Excelアプリケーションを開く
excel = win32com.client.Dispatch("Excel.Application")

# ワークブックを開く
workbook_path = r"C:\Users\-----\Desktop\python\罫線\罫線チェック.xlsx"
workbook = excel.Workbooks.Open(workbook_path)

# シートを選択
sheet = workbook.Worksheets(1)  # 最初のシートを選択

# B2セルとD2セルを選択
cell_b2 = sheet.Range("B2")
cell_d2 = sheet.Range("D2")

# 罫線スタイルの定数と名前のマッピング
border_styles = {
    constants.xlContinuous: "Continuous",
    constants.xlDash: "Dash",
    constants.xlDashDot: "DashDot",
    constants.xlDashDotDot: "DashDotDot",
    constants.xlDot: "Dot",
    constants.xlDouble: "Double",
    constants.xlSlantDashDot: "SlantDashDot",
    constants.xlLineStyleNone: "LineStyleNone"
}

# B2セルの罫線スタイルを取得
b2_border_style = cell_b2.Borders.LineStyle
b2_border_style_name = border_styles.get(b2_border_style, "Unknown")

# D2セルの罫線スタイルを取得
d2_border_style = cell_d2.Borders.LineStyle
d2_border_style_name = border_styles.get(d2_border_style, "Unknown")

# 結果を表示
print(f"B2セルの罫線スタイル: {b2_border_style_name}")
print(f"D2セルの罫線スタイル: {d2_border_style_name}")

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

# Excelアプリケーションを閉じる
excel.Quit()
```

このコードでは、`win32com.client`を使ってExcelファイルを開き、B2セルとD2セルの罫線スタイルを取得しています。取得した罫線スタイルの定数値を、あらかじめ定義した`border_styles`辞書を使って対応する名前に変換し、結果を表示します。

実行結果の例：

    B2セルの罫線スタイル: Dot
    D2セルの罫線スタイル: Dash

このように、特定のセルの罫線スタイルを確認することができます。この方法を応用することで、Excelファイル内で使用されている罫線スタイルを把握し、必要に応じて変更するための参考にすることができます。