#背景
ExcelのVBAでCSVファイルを張り付けるのはダラダラとコードを書く必要があり面倒です。Pythonで簡単に書く方法がないか調べてみました。
#目的
Excelの指定シートに、CSVの内容を張り付ける。
#xlwingsのインストール
Pythonには、Excelを操作するためのモジュールがいくつかあります。
一番有名なのは、おそらくOpenpyxlかと思います。
ただ、Openpyxlは処理速度は速いものの、不具合(フォーマット崩れるなど)が多いので、
今回はxlwingsを利用したいと思います。
xlwingsがインストールされていない場合は、以下のコマンドでインストールしてください。
$ pip install xlwings
#コード
今後も利用することが多そうなので関数化しました。
CSVファイルをPandasで読み込んだ後に、指定シートのA1セルに張り付けています。
VBAだとCSVを1行1行読み込んで出力する必要がありますが、
Pandasを利用すると、とてもシンプルに書けます。
import pandas as pd
import xlwings as xw
def csv_to_sheet(wb_name, ws_name, csv_name, save_flg=True, quit_flg=True):
"""\
関数の説明:
指定のシートにCSVの内容をコピペする関数
引数の説明:
wb_name:ワークブック名
ws_name:シート名
csv_name:CSVのファイル名
save_flg:デフォルトは上書き保存を実施。
quit_flg:デフォルトは閉じる設定
"""
df = pd.read_csv(csv_name,encoding='cp932', index_col=0) #CSVファイルをDataFrameで読み込む
wb = xw.Book(wb_name) #ワークブックオブジェクトの作成
wss = wb.sheets
ws = wss[ws_name] #ワークシートオブジェクトの作成
ws.range('A1').value = df #DataFrameを張り付ける
#save_flgがTrueであれば上書き保存
if save_flg:
wb.save(path=None)
#quit_flgがTrueであればExcelを閉じる
if quit_flg:
app = xw.apps.active
app.quit() #Excelを終了
#利用方法
Excelファイル、シート名、CSVファイルは任意のものに変更して利用してください。
上書き保存したくない場合は、引数にsave_flg=Falseを、
ファイルを閉じないで引き続き編集する場合は、quit_flg=Falseを渡してください。
wb_name = 'Excelファイル名.xlsx'
ws_name = 'シート名'
csv_name = 'CSVファイル'
csv_to_sheet(wb_name, ws_name, csv_name)