Pythonを使って、xlsmファイルを操作する方法について解説します
xlsmファイルを読み込む(pandas)
pandas を使って、xlsmファイル内の情報を DataFrame として取得します
DataFrameで取得すると、xlsmファイル内の情報を確認するのがとても便利です
そのため、読み込みには pandas がお勧めです
一方で
pandasは、xlsmファイルへの書き込みや保存はあまり得意でありません
xlsmファイルへの書き込み&保存は、後述のopenpyxl を使用します
コードの一例です
import pandas as pd
fp = r"C:Users\nobby\file.xlsm"
sheet_name = "Sheet1"
df = pd.read_excel(
fp,
engine = 'openpyxl',
sheet_name=sheet_name,
parse_dates=['日付'],
header=None,
index_col='日付',
skiprows=2,
skipfooter=1,
usecols=['日付','値'],
encoding='cp932'
)
引数について
fp。必須
『\』がエスケープ文字として認識されないように、“”の左に r を付けるのがポイント
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position … というエラーが出た場合はこれで解決
engine = ‘openpyxl’。任意
エラーが出る場合はこれで解決。openpyxl のインストールも必要
sheet_name = シート名。任意
指定しなければ、1番左のシートが指定される
添字(数字)での指定も可
parse_dates = [列名]。任意
float型(20230130) を timestamp型(2023-01-30 00:00:00)として読み込む
header = None。任意
指定しなければ、一番上の行がラベルとなる
index_col=列名。任意
指定しなければ、左側にインデックスが追加される
添字(数字)での指定も可
skiprows = 行数。任意
上から行数分だけ行を削除する
skipfooter= 行数。任意
下から行数分だけ行を削除する
usecols=[列名]。任意
取得したい列を指定できる
添字(数字)での指定も可
encoding=’cp932’。任意
“髙”や”崎”などshift_jisにない文字も読みこめるようになる
‘shift_jis’ codec can’t decode byte 0x87 … というエラーが出た場合はこれで解決
encoding=’Shift_JIS’。任意
‘utf-8’ codec can’t decode byte 0x93 … というエラーが出た場合はこれで解決
xlsmファイルを読み込む&書き込む&保存する(openpyxl)
xlsmファイルの中身を確認したり何かしらの情報を得るのは、openpyxl はあまり得意ではありません
一方で、xlsmファイルへの書き込み&保存は、openpyxl がお勧めです
コードの一例です
import openpyxl
fp1 = r"C:Users\nobby\file.xlsm"
fp2 = r"C:Users\nobby\file2.xlsm"
sh_name = 'DATA'
wb = openpyxl.load_workbook(fp1, keep_vba=True)
ws = wb[sh_name]
max_row=ws.max_row + 1
ws.cell(row=max_row, column=1).value = "20230401"
ws.cell(row=max_row, column=2).value = "D"
ws.cell(row=max_row, column=3).value = 4
wb.save(fp2)
xlsmファイルを読み込む (openpyxl)
load_workbook を使って、xlsmファイルを読み込みます
引数について
fp1。必須
『\』がエスケープ文字として認識されないように、””の左に r を付けるのがポイント
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position … というエラーが出た場合はこれで解決
keep_vba = True。必須
指定していないと、xlsmファイルに書き込み → 保存 → 開く時に、
ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください
というエラーが表示されます
xlsmファイルに書き込む
ws = wb[sh_name]
シート名を指定します
max_row=ws.max_row + 1
max_row で、ws の 最終行を取得します
ws.cell(row=max_row, column=1).value = "20230401"
ws.cell(row=max_row, column=2).value = "D"
ws.cell(row=max_row, column=3).value = 4
最終行の下の行に、値を入力します
xlsmファイルを保存する
save を使って、xlsmファイルを保存します
コメント