Python:使用图表创建 Excel 工作表

Posted

技术标签:

【中文标题】Python:使用图表创建 Excel 工作表【英文标题】:Python: Creating Excel worksheets with charts 【发布时间】:2010-02-14 09:47:53 【问题描述】:

是否有任何模块可以在 Python 中创建带有嵌入式图表的 Excel 图表? The modules mentioned in this question 好像没有这个能力。

我更喜欢在 Ubuntu 下工作的通用模块,而不是依赖于 Windows 的模块。

编辑:我也会欣赏在创建的图表中嵌入图像的方法,因为我可以在外部程序中创建图表并将它们放在正确的工作表中。

谢谢,

亚当

【问题讨论】:

【参考方案1】:

我最近找到了xlsxwriter。它是我发现的功能最强大的 xlsx python 模块,可用于图表和图形。它也不需要任何非标准的 python 模块并且适用于任何类型的盒子。无需 windows 或安装图表软件。

【讨论】:

【参考方案2】:

在 Windows 上,您需要使用 pywin32 和 COM。在 *x 框中,您可能会发现 Iron Python、Mono 和为 .NET 编写的 Excel 操作库的组合可以完成这项工作。无论哪种情况,祝你好运。

【讨论】:

+1 谢谢。我想我会在外部程序中创建图表并将它们嵌入为图像。【参考方案3】:

这有点令人费解(和/或邪恶),但使用JPype 包装SmartXLS Excel Java 库,这样的事情可以跨平台(包括在Linux 下)工作。

此示例使用 SmartXLS 中的简单图表创建示例(在 Charts/ChartSample.class 中)。

#!/usr/bin/env python

import os
import os.path

import jpype

# or wherever your java is installed
os.environ['JAVA_HOME'] = "/usr/lib64/jvm/default-java"

root = os.path.abspath(os.path.dirname(__file__))

SX_JAR = os.path.join(root, 'SX.jar')

options = [
    '-Djava.class.path=%s' % SX_JAR
]

jpype.startJVM(jpype.getDefaultJVMPath(), *options)

WorkBook = jpype.JClass('com.smartxls.WorkBook')
ChartShape = jpype.JClass('com.smartxls.ChartShape')
ChartFormat = jpype.JClass('com.smartxls.ChartFormat')
Color = jpype.JClass('java.awt.Color')

workbook = WorkBook()

workbook.setText(0,1,"Jan")
workbook.setText(0,2,"Feb")
workbook.setText(0,3,"Mar")
workbook.setText(0,4,"Apr")
workbook.setText(0,5,"Jun")

workbook.setText(1,0,"Comfrey")
workbook.setText(2,0,"Bananas")
workbook.setText(3,0,"Papaya")
workbook.setText(4,0,"Mango")
workbook.setText(5,0,"Lilikoi")

for col in range(1, 5 + 1):
    for row in range(1, 5 + 1):
        workbook.setFormula(row, col, "RAND()")
workbook.setText(6, 0, "Total")
workbook.setFormula(6, 1, "SUM(B2:B6)")
workbook.setSelection("B7:F7")
# auto fill the range with the first cell's formula or data
workbook.editCopyRight()

left = 1.0
top = 7.0
right = 13.0
bottom = 31.0

# create chart with it's location
chart = workbook.addChart(left,top,right,bottom)
chart.setChartType(ChartShape.Column)
# link data source, link each series to columns(true to rows).
chart.setLinkRange("Sheet1!$a$1:$F$6", False)
# set axis title
chart.setAxisTitle(ChartShape.XAxis, 0, "X-axis data")
chart.setAxisTitle(ChartShape.YAxis, 0, "Y-axis data")
# set series name
chart.setSeriesName(0, "My Series number 1")
chart.setSeriesName(1, "My Series number 2")
chart.setSeriesName(2, "My Series number 3")
chart.setSeriesName(3, "My Series number 4")
chart.setSeriesName(4, "My Series number 5")
chart.setTitle("My Chart")

# set plot area's color to darkgray
chartFormat = chart.getPlotFormat()
chartFormat.setSolid()
chartFormat.setForeColor(Color.DARK_GRAY.getRGB())
chart.setPlotFormat(chartFormat)

# set series 0's color to blue
seriesformat = chart.getSeriesFormat(0)
seriesformat.setSolid()
seriesformat.setForeColor(Color.BLUE.getRGB())
chart.setSeriesFormat(0, seriesformat)

# set series 1's color to red
seriesformat = chart.getSeriesFormat(1)
seriesformat.setSolid()
seriesformat.setForeColor(Color.RED.getRGB())
chart.setSeriesFormat(1, seriesformat)

# set chart title's font property
titleformat = chart.getTitleFormat()
titleformat.setFontSize(14*20)
titleformat.setFontUnderline(True)
chart.setTitleFormat(titleformat)

workbook.write("./Chart.xls")

jpype.shutdownJVM()

【讨论】:

是的,但是这将允许您以编程方式“直接”从现有 Python 代码创建 Excel 图表(对于直接的某些值;)

以上是关于Python:使用图表创建 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

什么是Excel的工作表?如何创建新的工作表?

如何将多个图表添加到一个excel的不同工作表中?

使用 Python 将图表从 Excel 转换为 PowerPoint

python 创建 Excel 工作簿和工作表

python 创建 Excel 工作簿和工作表

如何从Excel工作表生成图表?