Python: Creación de hojas de cálculo de Excel con gráficos

¿Hay algún módulo para crear gráficos de Excel con gráficos incrustados en Python? Los módulos mencionados en esta pregunta no parecen tener esa capacidad.

Prefiero un módulo genérico que funcione bajo Ubuntu, no dependiente de Windows.

EDITAR: También apreciaré formas de incrustar imágenes dentro de los gráficos creados, ya que puedo crear los gráficos en un progtwig externo y colocarlos dentro de la hoja derecha.

Gracias,

Adán

Es un poco complicado (y / o malvado), pero algo como esto funcionará multiplataforma (incluso en Linux) usando JPype para envolver la biblioteca Java de SmartXLS Excel.

Este ejemplo utiliza el ejemplo simple de creación de gráficos (en Charts / ChartSample.class) de SmartXLS.

#!/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() 

En Windows, necesitarías usar pywin32 y COM. En un cuadro * x, puede encontrar que una combinación de Iron Python, Mono y una biblioteca de manipulación de Excel escrita para .NET puede hacer el trabajo. En cualquier caso, buena suerte.

Recientemente encontré xlsxwriter . Es el módulo de python xlsx más capaz que he encontrado y funciona con tablas y gráficos. Tampoco requiere ningún módulo de Python no estándar y funciona en cualquier tipo de caja. No es necesario tener ventanas o tener instalado el software de gráficos.