、、、などの複数のシートを含むExcelファイルがData 1ありData 2ますPivots。
シートData 1とData 2テーブルがそれぞれ 1 つあります。シートPivotsにはピボット テーブルのみがあり、そのデータ ソースはData 1およびのテーブルData 2です。
私がやりたいのは、ピボットテーブルを同じシートにリンクしたまま、df12つのデータフレームのデータでデータシートを書き直すことです。df2アイデアは、スクリプトを実行し、ピボット テーブルを置換Data 1およびData 2更新して、更新されたデータを取得することです。
pd.ExcelWriter(xlsx_file)ファイルを置き換えるため、機能しません。以下のアプローチは、この回答から適応されました。
import pandas as pd
from openpyxl import load_workbook
book=load_workbook(xlsx_file)
writer = pd.ExcelWriter(xlsx_file, engine = "openpyxl")
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
writer.sheets.pop("Pivots", None)
data_sheets = ["Data 1", "Data 2"]
for (k, df) in enumerate([df1, df2]):
df.to_excel(writer, data_sheets[k], index=False)
writer.save()
シートは実際にセル内のデータを保持していたため、これは失敗しPivotsましたが、ピボット テーブルはすべての書式設定と共に消えていました。それはただの難しい価値観でした。
this question とthis questionも熟読しましたが、うまくいきませんでした。
この単純なタスクを実行するにはどうすればよいですか?
ここからダウンロードできるサンプルファイルをアップロードしました。便宜上、データ シートを置き換える 2 つのデータフレームを次に示します。
df1 = pd.DataFrame({"Category": ["A", "B", "C", "D", "A"], "Value": [1, 2, 3, 4, 5]})
df2 = pd.DataFrame({"SKU": ["AB", "BB", "CB", "DB", "AB"], "No of Items": [3, 2, 7, 4, 12]})
以下のユーザーから尋ねられたように、彼の解決策の提案で失敗した試みをここに残します (ピボットとそのすべての書式設定はなくなり、ハード値だけが残ります)。
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1 = pd.DataFrame([["A", 1], ["B", 2], ["C", 3], ["D", 4], ["A", 5]], columns=["Category", "Value"])
df2 = pd.DataFrame([["AB", 3], ["BB", 2], ["CB", 7], ["DB", 4], ["AB", 12]], columns=["SKU", "No of Items"])
wb = load_workbook("xlsx_file.xlsx")
sheets = ["Data 1", "Data 2"]
for (idx, df) in enumerate([df1, df2]):
ws = wb.get_sheet_by_name(sheets[idx])
rows = dataframe_to_rows(df)
for (r_idx, row) in enumerate(rows):
if r_idx != 0:
for (c_idx, value) in enumerate(row[1:]):
ws.cell(row=r_idx+1, column=c_idx+1, value=value)
wb.save("xlsx_file.xlsx")