使用Python在Word文檔中創(chuàng)建圖表的方法
在現(xiàn)代辦公自動化場景中,將數(shù)據(jù)可視化為圖表并嵌入 Word 文檔已成為一項常見需求。無論是生成銷售報告、制作數(shù)據(jù)分析文檔,還是創(chuàng)建項目進(jìn)度匯報,programmatically 在 Word 中插入圖表都能顯著提升工作效率。本文將深入探討如何使用 Python 在 Word 文檔中創(chuàng)建各種類型的圖表,并對其進(jìn)行樣式定制和數(shù)據(jù)配置。
可通過 pip 安裝:pip install spire.doc.free。
環(huán)境準(zhǔn)備
本文所使用的示例基于 Free Spire.Doc for Python,在開始之前,需要安裝該庫??赏ㄟ^ pip 安裝:
pip install spire.doc.free
安裝完成后,即可在 Python 腳本中導(dǎo)入相關(guān)模塊開始工作。
基礎(chǔ)架構(gòu):文檔與圖表對象模型
在使用 Spire.Doc 創(chuàng)建圖表前,需要了解其基本的對象層次結(jié)構(gòu):
- Document:表示整個 Word 文檔
- Section:文檔中的節(jié),用于組織內(nèi)容
- Paragraph:段落,用于承載文本和圖表等元素
- Shape:形狀對象,圖表作為特殊形狀嵌入其中
- Chart:圖表對象,包含數(shù)據(jù)系列、坐標(biāo)軸、標(biāo)題等屬性
基本操作流程為:創(chuàng)建文檔 → 添加節(jié) → 添加段落 → 插入圖表形狀 → 配置圖表數(shù)據(jù) → 保存文檔。
創(chuàng)建第一個圖表:柱形圖
柱形圖是最常用的圖表類型之一,適合比較不同類別的數(shù)據(jù)。以下示例展示了如何創(chuàng)建一個簡單的柱形圖:
from spire.doc import *
from spire.doc.common import *
# 創(chuàng)建文檔對象
document = Document()
# 添加一個節(jié)
section = document.AddSection()
# 添加標(biāo)題段落
section.AddParagraph().AppendText("Column chart.")
# 添加新段落用于放置圖表
newPara = section.AddParagraph()
# 插入柱形圖,指定寬度和高度(單位為點(diǎn))
shape = newPara.AppendChart(ChartType.Column, float(500), float(300))
# 獲取圖表對象
chart = shape.Chart
# 清空默認(rèn)的數(shù)據(jù)系列
chart.Series.Clear()
# 添加數(shù)據(jù)系列:名稱、X 軸類別、Y 軸數(shù)值
chart.Series.Add("Test Series",
["Word", "PDF", "Excel", "GoogleDocs", "Office"],
[float(1900000), float(850000), float(2100000),
float(600000), float(1500000)])
# 設(shè)置 Y 軸數(shù)字格式
chart.AxisY.NumberFormat.FormatCode = "#,##0"
# 保存文檔
document.SaveToFile("ColumnChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

關(guān)鍵點(diǎn)解析:
AppendChart()方法接受三個參數(shù):圖表類型枚舉、寬度、高度Series.Add()方法用于添加數(shù)據(jù)系列,需要提供類別標(biāo)簽和對應(yīng)的數(shù)值- 數(shù)值需要轉(zhuǎn)換為
float類型以確保兼容性 AxisY.NumberFormat.FormatCode控制 Y 軸標(biāo)簽的顯示格式
條形圖:水平數(shù)據(jù)對比
條形圖是柱形圖的水平版本,特別適合類別名稱較長或需要強(qiáng)調(diào)排名關(guān)系的場景:
# 創(chuàng)建條形圖
chartShape = newPara.AppendChart(ChartType.Bar, float(400), float(300))
chart = chartShape.Chart
# 獲取并設(shè)置圖表標(biāo)題
title = chart.Title
title.Text = "My Chart"
title.Show = True
title.Overlay = True # 標(biāo)題覆蓋在圖表上方
# 保存文檔
document.SaveToFile("BarChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

標(biāo)題的三個關(guān)鍵屬性:
- Text:標(biāo)題顯示的文本內(nèi)容
- Show:是否顯示標(biāo)題
- Overlay:True 時標(biāo)題覆蓋在圖表區(qū)域上,F(xiàn)alse 時標(biāo)題位于圖表外部
餅圖:占比分析
餅圖適合展示各部分占整體的比例關(guān)系,在財務(wù)分析和市場份額報告中應(yīng)用廣泛:
# 創(chuàng)建餅圖
shape = newPara.AppendChart(ChartType.Pie, 500.0, 300.0)
chart = shape.Chart
# 添加單個數(shù)據(jù)系列(餅圖通常只需要一個系列)
series = chart.Series.Add("Test Series",
["Word", "PDF", "Excel"],
[2.7, 3.2, 0.8])
# 保存文檔
document.SaveToFile("PieChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

餅圖的特點(diǎn):
- 通常只使用一個數(shù)據(jù)系列
- 每個數(shù)據(jù)點(diǎn)代表整體中的一個部分
- 扇區(qū)大小由數(shù)值比例決定
折線圖:趨勢展示
折線圖擅長展示數(shù)據(jù)隨時間或其他連續(xù)變量的變化趨勢:
# 創(chuàng)建折線圖
shape = newPara.AppendChart(ChartType.Line, 500.0, 300.0)
chart = shape.Chart
# 獲取標(biāo)題對象并設(shè)置
title = chart.Title
title.Text = "My Chart"
# 清空默認(rèn)系列
seriesColl = chart.Series
seriesColl.Clear()
# 定義 X 軸類別
categories = ["C1", "C2", "C3", "C4", "C5", "C6"]
# 添加多個數(shù)據(jù)系列進(jìn)行對比
seriesColl.Add("AW Series 1", categories,
[1.0, 2.0, 2.5, 4.0, 5.0, 6.0])
seriesColl.Add("AW Series 2", categories,
[2.0, 3.0, 3.5, 6.0, 6.5, 7.0])
# 保存文檔
document.SaveToFile("LineChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

折線圖的關(guān)鍵特性:
- 支持多個數(shù)據(jù)系列疊加顯示
- 適合展示時間序列數(shù)據(jù)
- 可以清晰對比不同系列的趨勢差異
散點(diǎn)圖:相關(guān)性分析
散點(diǎn)圖用于展示兩個變量之間的關(guān)系,在統(tǒng)計分析和科學(xué)研究中經(jīng)常使用:
# 創(chuàng)建散點(diǎn)圖
shape = newPara.AppendChart(ChartType.Scatter, 450.0, 300.0)
chart = shape.Chart
# 清空默認(rèn)系列
chart.Series.Clear()
# 添加數(shù)據(jù)系列:X 值、Y 值
chart.Series.Add("Scatter chart",
[1.0, 2.0, 3.0, 4.0, 5.0],
[1.0, 20.0, 40.0, 80.0, 160.0])
# 保存文檔
document.SaveToFile("ScatterChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

散點(diǎn)圖的特點(diǎn):
- 每個數(shù)據(jù)點(diǎn)由 X 和 Y 兩個坐標(biāo)值確定
- 適合發(fā)現(xiàn)變量間的相關(guān)性模式
- 可用于回歸分析和趨勢預(yù)測
氣泡圖:三維數(shù)據(jù)可視化
氣泡圖是散點(diǎn)圖的擴(kuò)展,通過氣泡大小展示第三個維度的數(shù)據(jù):
# 創(chuàng)建氣泡圖
shape = newPara.AppendChart(ChartType.Bubble, float(500), float(300))
chart = shape.Chart
# 清空默認(rèn)系列
chart.Series.Clear()
# 添加數(shù)據(jù)系列:X 值、Y 值、氣泡大小
series = chart.Series.Add("Test Series",
[2.9, 3.5, 1.1, 4.0, 4.0],
[1.9, 8.5, 2.1, 6.0, 1.5],
[9.0, 4.5, 2.5, 8.0, 5.0])
# 保存文檔
document.SaveToFile("BubbleChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

氣泡圖的獨(dú)特之處:
- 同時展示三個維度的數(shù)據(jù)
- 氣泡大小與第三個數(shù)值成正比
- 適合復(fù)雜的多變量分析場景
3D 曲面圖:立體數(shù)據(jù)展示
3D 曲面圖提供立體的數(shù)據(jù)可視化效果,適合展示地形、溫度分布等連續(xù)表面數(shù)據(jù):
# 創(chuàng)建 3D 曲面圖
shape = newPara.AppendChart(ChartType.Surface3D, 500.0, 300.0)
chart = shape.Chart
# 清空默認(rèn)系列
chart.Series.Clear()
# 設(shè)置圖表標(biāo)題
chart.Title.Text = "My chart"
# 添加多個數(shù)據(jù)系列
chart.Series.Add("Series 1",
["Word", "PDF", "Excel", "GoogleDocs", "Office"],
[1900000.0, 850000.0, 2100000.0, 600000.0, 1500000.0])
chart.Series.Add("Series 2",
["Word", "PDF", "Excel", "GoogleDocs", "Office"],
[900000.0, 50000.0, 1100000.0, 400000.0, 2500000.0])
chart.Series.Add("Series 3",
["Word", "PDF", "Excel", "GoogleDocs", "Office"],
[500000.0, 820000.0, 1500000.0, 400000.0, 100000.0])
# 保存文檔
document.SaveToFile("Surface3DChart.docx", FileFormat.Docx)
document.Dispose()結(jié)果預(yù)覽:

3D 曲面圖的特點(diǎn):
- 提供立體的視覺呈現(xiàn)
- 支持多個數(shù)據(jù)系列疊加
- 適合展示復(fù)雜的多維度數(shù)據(jù)關(guān)系
圖表尺寸與定位
圖表的尺寸和位置對于文檔的整體布局至關(guān)重要。AppendChart() 方法的第二和第三個參數(shù)分別控制圖表的寬度和高度,單位為點(diǎn)(point):
- 1 點(diǎn) = 1/72 英寸 ≈ 0.35 毫米
- 常用尺寸:400x300(小型)、500x300(中型)、600x400(大型)
定位技巧:
# 在特定段落后插入圖表 para = section.AddParagraph() para.Format.SpaceAfter = 20 # 設(shè)置段后間距 # 插入圖表 chartShape = para.AppendChart(ChartType.Column, float(500), float(300))
通過調(diào)整段落的間距屬性,可以控制圖表與周圍文字的間隔,實(shí)現(xiàn)美觀的排版效果。
數(shù)據(jù)系列管理
數(shù)據(jù)系列是圖表的核心組成部分。Spire.Doc 提供了靈活的系列操作方法:
添加系列
# 添加單個系列
chart.Series.Add("系列名稱", ["類別 1", "類別 2"], [100.0, 200.0])
# 添加多個系列
chart.Series.Add("系列 A", categories, valuesA)
chart.Series.Add("系列 B", categories, valuesB)清空系列
在添加自定義數(shù)據(jù)前,通常需要清空默認(rèn)的系列:
chart.Series.Clear()
訪問系列集合
可以通過 Series 屬性訪問系列集合進(jìn)行更復(fù)雜的操作:
seriesColl = chart.Series # 對系列集合進(jìn)行操作
坐標(biāo)軸格式化
坐標(biāo)軸的顯示格式直接影響圖表的可讀性。Spire.Doc 允許對坐標(biāo)軸進(jìn)行精細(xì)的格式控制:
# 設(shè)置 Y 軸數(shù)字格式(千位分隔) chart.AxisY.NumberFormat.FormatCode = "#,##0" # 設(shè)置百分比格式 chart.AxisY.NumberFormat.FormatCode = "0%" # 設(shè)置小數(shù)位數(shù) chart.AxisY.NumberFormat.FormatCode = "0.00"
常見的格式代碼:
#,##0:千位分隔符,無小數(shù)0.00:保留兩位小數(shù)0%:百分比格式$#,##0:美元貨幣格式
完整實(shí)戰(zhàn)示例
以下是一個綜合示例,展示了如何在實(shí)際項目中創(chuàng)建包含多種圖表的報告文檔:
from spire.doc import *
from spire.doc.common import *
def create_sales_report():
# 創(chuàng)建文檔
doc = Document()
section = doc.AddSection()
# 添加標(biāo)題
title_para = section.AddParagraph()
title_para.AppendText("2024 Sales Report")
title_para.Format.HorizontalAlignment = ShapeHorizontalAlignment.Center
# 添加柱形圖
section.AddParagraph().AppendText("\nQuarterly Sales:")
col_para = section.AddParagraph()
col_chart = col_para.AppendChart(ChartType.Column, float(500), float(300))
col_chart.Chart.Series.Clear()
col_chart.Chart.Series.Add("Sales",
["Q1", "Q2", "Q3", "Q4"],
[150000.0, 220000.0, 180000.0, 250000.0])
col_chart.Chart.AxisY.NumberFormat.FormatCode = "$#,##0"
# 添加餅圖
section.AddParagraph().AppendText("\nProduct Distribution:")
pie_para = section.AddParagraph()
pie_chart = pie_para.AppendChart(ChartType.Pie, float(400), float(300))
pie_chart.Chart.Series.Add("Products",
["Product A", "Product B", "Product C"],
[45.0, 35.0, 20.0])
# 保存文檔
doc.SaveToFile("Sales_Report.docx", FileFormat.Docx)
doc.Dispose()
create_sales_report()結(jié)果預(yù)覽:

常見問題與解決方案
圖表顯示不完整
確保段落的行距設(shè)置適當(dāng),避免圖表被裁剪:
para.Format.LineUnitAfter = 1 # 增加段后行距
數(shù)據(jù)精度問題
始終將數(shù)值顯式轉(zhuǎn)換為 float 類型:
values = [float(x) for x in raw_values]
中文標(biāo)簽顯示
Spire.Doc 完全支持 Unicode 字符,可以直接使用中文字符串作為類別標(biāo)簽或標(biāo)題。
總結(jié)
在 Word 文檔中 programmatically 創(chuàng)建圖表是辦公自動化的重要技能。通過掌握 Spire.Doc for Python 提供的圖表 API,可以實(shí)現(xiàn):
- 創(chuàng)建七種主要圖表類型:柱形圖、條形圖、餅圖、折線圖、散點(diǎn)圖、氣泡圖、3D 曲面圖
- 靈活配置數(shù)據(jù)系列和坐標(biāo)軸格式
- 精確控制圖表尺寸和位置
- 批量生成包含圖表的專業(yè)報告文檔
關(guān)鍵要點(diǎn)回顧:
- 使用
AppendChart()方法插入圖表,指定類型和尺寸 - 通過
Series.Add()添加數(shù)據(jù),記得先調(diào)用Clear()清空默認(rèn)數(shù)據(jù) - 利用
NumberFormat.FormatCode格式化坐標(biāo)軸標(biāo)簽 - 合理設(shè)置圖表尺寸,確保在文檔中的顯示效果
掌握這些技能后,你可以進(jìn)一步探索圖表標(biāo)題樣式、圖例位置、數(shù)據(jù)標(biāo)簽、顏色主題等高級定制功能,構(gòu)建出功能完備的文檔自動化生成系統(tǒng)。
以上就是使用Python在Word文檔中創(chuàng)建圖表的方法的詳細(xì)內(nèi)容,更多關(guān)于Python Word創(chuàng)建圖表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)自主查詢實(shí)時天氣
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自主查詢實(shí)時天氣,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
Python編程實(shí)現(xiàn)的簡單神經(jīng)網(wǎng)絡(luò)算法示例
這篇文章主要介紹了Python編程實(shí)現(xiàn)的簡單神經(jīng)網(wǎng)絡(luò)算法,結(jié)合實(shí)例形式分析了神經(jīng)網(wǎng)絡(luò)算法的原理及Python相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01
python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例
這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強(qiáng)大!需要的朋友可以參考下2014-07-07
tensorflow pb to tflite 精度下降詳解
這篇文章主要介紹了tensorflow pb to tflite 精度下降詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

