将新的 sheet 添加到现有 excel 文件并绘制数据图表
Add a new sheet to existing excel file and graph the data
我希望通过导出 pandas 数据框将新的 sheet 添加到 excel 文件,并使用 openpyxl 绘制数据图表。目前我可以添加一个新的 sheet 并插入 pandas 数据框,但不能插入数据图。
目前我的代码是这样的。
import pandas
import openpyxl
from openpyxl.chart import LineChart, Reference
fileSavePath = 'C:/Users/PATH'
filename = "Existing Excel File"
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [0, 5, 2, 8, 15, 7, 10, 4, 0]
df = pandas.DataFrame({'First Column': lst1, 'Second Column': lst2})
book = openpyxl.load_workbook(fileSavePath + filename + '.xlsx')
with pandas.ExcelWriter(fileSavePath + filename + '.xlsx', engine='openpyxl') as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, 'new_sheet', index=False)
wb = openpyxl.Workbook()
sheet = wb.active
values = Reference(sheet, min_col=1, min_row=1,
max_col=1, max_row=len(lst1))
chart = LineChart()
chart.add_data(values)
chart.title = " LINE-CHART "
chart.x_axis.title = " X-AXIS "
chart.y_axis.title = " Y-AXIS "
sheet.add_chart(chart, "E2")
writer.save()
writer.close()
目前没有报错,dataframe写入了,但是新加的没有出现graph sheet。
此代码将成功添加新的 sheet 并绘制数据图表。
import pandas
from openpyxl.chart import LineChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl import load_workbook
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [0, 5, 2, 8, 15, 7, 10, 4, 0]
df = pandas.DataFrame({'First Column': lst1, 'Second Column': lst2})
fileSavePath = 'C:/Users/PathExample'
filename = "filename"
newSheetName = 'newSheet'
sheet = newSheetName
# load in existing workbook
wb = load_workbook(fileSavePath + filename + '.xlsx')
# create new sheet with name assigned by title
wb.create_sheet(newSheetName)
# find which sheet is the new sheet
newSheetIndex = len(wb.sheetnames) - 1
# set the newest sheet as the active sheet
wb.active = newSheetIndex
worksheet = wb.active
# Insert Dataframe
for r in dataframe_to_rows(df, index=False, header=True):
worksheet.append(r)
#Graph data
chart = LineChart()
data = Reference(worksheet, range_string=f'{sheet}!B2:B10')
category = Reference(worksheet, range_string=f'{sheet}!A2:A10')
chart.add_data(data, titles_from_data=True)
chart.set_categories(category)
worksheet.add_chart(chart, 'D3')
wb.save(fileSavePath + filename + '.xlsx')
问题似乎出在设置活动 sheet 上。前面的代码添加了 sheets 但一直绘制 "active sheet" 的图形,这就是为什么图形没有出现在其他 sheets 上的原因。 Openpyxl 使用一个列表来跟踪 excel sheets 因此要操作所需的 sheet 您需要将该索引号设置为活动 sheet (wb.active).
我希望通过导出 pandas 数据框将新的 sheet 添加到 excel 文件,并使用 openpyxl 绘制数据图表。目前我可以添加一个新的 sheet 并插入 pandas 数据框,但不能插入数据图。
目前我的代码是这样的。
import pandas
import openpyxl
from openpyxl.chart import LineChart, Reference
fileSavePath = 'C:/Users/PATH'
filename = "Existing Excel File"
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [0, 5, 2, 8, 15, 7, 10, 4, 0]
df = pandas.DataFrame({'First Column': lst1, 'Second Column': lst2})
book = openpyxl.load_workbook(fileSavePath + filename + '.xlsx')
with pandas.ExcelWriter(fileSavePath + filename + '.xlsx', engine='openpyxl') as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, 'new_sheet', index=False)
wb = openpyxl.Workbook()
sheet = wb.active
values = Reference(sheet, min_col=1, min_row=1,
max_col=1, max_row=len(lst1))
chart = LineChart()
chart.add_data(values)
chart.title = " LINE-CHART "
chart.x_axis.title = " X-AXIS "
chart.y_axis.title = " Y-AXIS "
sheet.add_chart(chart, "E2")
writer.save()
writer.close()
目前没有报错,dataframe写入了,但是新加的没有出现graph sheet。
此代码将成功添加新的 sheet 并绘制数据图表。
import pandas
from openpyxl.chart import LineChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl import load_workbook
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [0, 5, 2, 8, 15, 7, 10, 4, 0]
df = pandas.DataFrame({'First Column': lst1, 'Second Column': lst2})
fileSavePath = 'C:/Users/PathExample'
filename = "filename"
newSheetName = 'newSheet'
sheet = newSheetName
# load in existing workbook
wb = load_workbook(fileSavePath + filename + '.xlsx')
# create new sheet with name assigned by title
wb.create_sheet(newSheetName)
# find which sheet is the new sheet
newSheetIndex = len(wb.sheetnames) - 1
# set the newest sheet as the active sheet
wb.active = newSheetIndex
worksheet = wb.active
# Insert Dataframe
for r in dataframe_to_rows(df, index=False, header=True):
worksheet.append(r)
#Graph data
chart = LineChart()
data = Reference(worksheet, range_string=f'{sheet}!B2:B10')
category = Reference(worksheet, range_string=f'{sheet}!A2:A10')
chart.add_data(data, titles_from_data=True)
chart.set_categories(category)
worksheet.add_chart(chart, 'D3')
wb.save(fileSavePath + filename + '.xlsx')
问题似乎出在设置活动 sheet 上。前面的代码添加了 sheets 但一直绘制 "active sheet" 的图形,这就是为什么图形没有出现在其他 sheets 上的原因。 Openpyxl 使用一个列表来跟踪 excel sheets 因此要操作所需的 sheet 您需要将该索引号设置为活动 sheet (wb.active).