python gspreadとExcelの連携、セルの書式設定

Python

同じ表計算ソフトのgoogle spread sheetとExcelのデータの編集、操作をpandasを使いながら自動化してみました
また、セルの書式設定をpythonから設定することもやってみます

・環境

windows 11
openpyxl 3.1.5
pandas 2.2.3
gspread-dataframe 4.0.0
gspread-formatting 1.2.0

・Excelファイルをpandasを使用してデータフレーム化

まずはライブラリをインストールします

pip install openpyxl pandas gspread gspread-dataframe gspread_formatting

openpyxl、pandasについては以前の記事で解説していますので参考にしてください

Excelファイルを読み込み、セルを指定してデータフレームとして取得します

from openpyxl import load_workbook
import pandas as pd

# エクセルファイルを読み込む
file_path = r"C:\Users\user\Documents\sample.xlsx"
sheet_name = "sheet_1"

# ワークブックとシートを取得
wb = load_workbook(file_path, data_only=True) #数式が含まれるなら計算結果を取得
ws = wb[sheet_name]

# セルを指定してデータを取得
data = []
for row in ws["B2:J26"]:
    data.append([cell.value for cell in row])

# データフレームに変換
df = pd.DataFrame(data)

print(df)

・gspreadを使ってデータフレームを挿入

取得したデータフレームをgspreadを使ってgoogle spread sheetに挿入していきます

gspreadについても、以前の記事で紹介していますので参考にしてください

gspreadでスプレッドシートファイルを作成、または読み込みをしてExcelファイルから読み込んだデータフレームをスプレッドシートに書き込んでいきます

import gspread
from gspread_dataframe import set_with_dataframe
import pandas as pd
from openpyxl import load_workbook

#鍵のファイルのパスを入力
gc=gspread.service_account(
    filename="gspred-test.json"
)

#フォルダIDを指定して、新しいスプレッドシートを作成
book=gc.create(
    "New_book",
    folder_id="16CXXXXXXXXXXXXXXXXXXXXXX"
)

#すでにあるファイルを開く場合はこちら
#book=gc.open(
#    "book",
#    folder_id="16CXXXXXXXXXXXXXXXXXXXXXX"
#)

#ワークシートを指定
w_sheet=book.get_worksheet(0)

# エクセルファイルを読み込む
file_path = r"C:\Users\user\Documents\sample.xlsx"
sheet_name = "sheet_1"

# ワークブックとシートを取得
wb = load_workbook(file_path, data_only=False) #計算式のまま取得
ws = wb[sheet_name]

# B2:J26のデータを取得
data = []
for row in ws["B2:J26"]:
    data.append([cell.value for cell in row])

# データフレームに変換
df = pd.DataFrame(data)

# スプレッドシートに開始セルを指定してデータフレームを書き込む
start_row = 1  # 開始行
start_col = 1  # 開始列
cell = w_sheet.cell(start_row, start_col)  # 起点セル
set_with_dataframe(w_sheet, df, row=start_row, col=start_col)

・セルの書式設定

セルの書式設定を変更するコードはこちら

from gspread_formatting import *

#セルのフォーマットを作成
cell_format = CellFormat(
    #セルの背景色を指定
    backgroundColor=Color(1, 0.9, 0.9),  # RGBで色を指定 (1が最大値)
    
    #太字、テキストの色を指定
    textFormat=TextFormat(bold=True, foregroundColor=Color(0, 0, 0)),
    
    #センター配置
    horizontalAlignment='CENTER'
)

#シートとセルの範囲を指定して書式設定
format_cell_range(sheet, "A1:B2", cell_format)

次にセルの数値をカンマ区切りにします

from gspread_formatting import *

# 数値フォーマットを設定
number_format = NumberFormat(
    type='NUMBER',    # フォーマットタイプを指定
    pattern='#,##0'   # カンマ区切り、小数なし
)

# セルのフォーマットを作成
cell_format = CellFormat(
    numberFormat=number_format
)

# シート範囲にフォーマットを適用
format_cell_range(sheet, "A1:A10", cell_format)

書式設定は他にもたくさんあると思いますが、公式ドキュメントなどを参考に調べながら必要になったら追加していこうと思います

コメント