1.实现思路
-
Excel 数据读取:
使用 openpyxl 库加载 Excel 文件,并选择其中一个活动的工作表(通过load_workbook
方法和active
属性)。使用iter_rows()
函数遍历工作表中的行并提取数据,将这些数据存储在data
列表中。 -
PowerPoint 文件创建:
通过Presentation()
创建一个 PowerPoint 实例。 -
幻灯片和标题创建:
通过slides.add_slide()
方法添加一张幻灯片,并选择布局(这里选择了标题 + 内容布局)。使用shapes.title
创建一个标题形状,并将标题文本设置为 '月份和温度图表'。 -
图表数据创建:
使用CategoryChartData()
创建图表数据对象。将 Excel 中的数据添加到图表数据对象中。此处假设第一列是类别(月份),第二列是温度数据。 -
图表创建和布置:
通过shapes.add_chart()
在幻灯片上创建图表,指定图表的类型(这里选择了柱状图),位置和尺寸,并使用之前创建的图表数据对象。指定图表的位置和尺寸可以使用Inches()
函数,这里设置了 x, y, cx, cy 四个参数来确定图表的位置和大小。 -
保存 PowerPoint 文件:
最后通过presentation.save()
方法保存 PowerPoint 文件,并打印出成功保存的信息。
2.完整代码
from openpyxl import load_workbook
from pptx import Presentation
from pptx.util import Inches
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
def create_chart_from_excel(excel_filename, pptx_filename):
try:
# 加载 Excel 文件
workbook = load_workbook(excel_filename)
sheet = workbook.active
# 提取数据
data = []
for row in sheet.iter_rows(values_only=True):
data.append(row)
# 创建 PowerPoint 实例
presentation = Presentation()
# 创建第一张幻灯片
slide = presentation.slides.add_slide(presentation.slide_layouts[5]) # 5表示标题 + 内容布局
# 在幻灯片上创建标题
title = slide.shapes.title
title.text = '月份和温度图表'
# 创建图表数据
chart_data = CategoryChartData()
chart_data.categories = [row[0] for row in data[1:]]
chart_data.add_series('温度', (row[1] for row in data[1:]))
# 添加图表
x, y, cx, cy = Inches(1), Inches(1.5), Inches(8), Inches(5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
).chart
# 保存 PowerPoint 文件
presentation.save(pptx_filename)
print(f"成功将 {excel_filename} 中的数据表格转换为图表并保存到 {pptx_filename} 中")
except Exception as e:
print(f"发生错误: {e}")
# 调用函数并传入文件名
create_chart_from_excel('data.xlsx', '实例.pptx')