web-dev-qa-db-ja.com

Python ExcelWriterを使用して既存のワークシートに書き込む方法

ExcelWriterを使用して、複数のシートを含むワークブックに情報を書き込んだり追加したりしようとしています。この関数を初めて使用するときに、いくつかのデータを含むワークブックを作成しています。 2番目の呼び出しでは、ワークブックのさまざまな場所にある情報をすべてのシートに追加します。

def Out_Excel(file_name,C,col): 
    writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
    for tab in tabs:    # tabs here is provided from a different function that I did not write here to keep it simple and clean
        df = DataFrame(C)    # the data is different for different sheets but I keep it simple in this case
        df.to_Excel(writer,sheet_name = tab, startcol = 0 + col, startrow = 0)
    writer.save()

メインコードで、この関数を異なるcolで2回呼び出して、データを異なる場所に出力します。

Out_Excel('test.xlsx',C,0)
Out_Excel('test.xlsx',D,10)

しかし問題は、そうすることで、関数がブック全体を上書きするかのように、出力が関数の2回目の呼び出しにすぎないことです。この場合、既に存在するワークブックをロードする必要があると思いますか?何か助けは?

6
Hamed

使用する load_book from openpyxl- xlsxwriter および openpyxl ドキュメントを参照:

import pandas as pd
from openpyxl import load_workbook

book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') 
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

df.to_Excel(writer, sheet_name='tab_name', other_params)

writer.save()
12
Stefan

Pandasバージョン0.24.modeキーワードが追加されました。これにより、これまで実行しなければならなかったフープを飛び越えずにExcelブックに追加できます。 mode='a'既存のワークブックにシートを追加します。

ドキュメント から:

with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
     df.to_Excel(writer, sheet_name='Sheet3')
2
T.C. Proctor

次の方法でExcelスプレッドシートを作成することもできます。

import pandas as pd

def generate_Excel(csv_file, Excel_loc, sheet_):
    writer = pd.ExcelWriter(Excel_loc)
    data = pd.read_csv(csv_file, header=0, index_col=False)
    data.to_Excel(writer, sheet_name=sheet_, index=False)
    writer.save()
    return(writer.close())

これを試してみて、あなたの考えを教えてください。

0
Naufal