Python:使用图表创buildExcel工作表

是否有任何模块用Python创buildembedded图表的Excel图表? 这个问题中提到的模块似乎没有这个能力。

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

编辑:我也将欣赏方式embedded图像内创build的图表,因为我可以在外部程序中创build图表,并将其放置在正确的工作表内。

谢谢,

亚当

这有点复杂(和/或邪恶的),但是像这样的东西将跨平台(包括在Linux下)使用JPype包装SmartXLS Excel Java库。

本示例使用SmartXLS中的简单图表创build(在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() 

在Windows上,你需要使用pywin32和COM。 在* x盒子上,您可能会发现Iron Python,Mono和为.NET编写的Excel操作库的组合可能会完成这项工作。 无论如何,祝你好运。

我最近find了xlsxwriter 。 这是我find的function最强大的xlsx python模块,可以与图表和graphics一起使用。 它也不需要任何非标准的Python模块,可以在任何types的盒子上工作。 无需安装Windows或安装图表软件。