3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandasを利用して、ExcelファイルにCSVファイルを張り付ける方法

Last updated at Posted at 2020-04-03

#背景
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)
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?