2010-02-14 5 views
3

Есть ли какой-нибудь модуль для создания диаграмм Excel со встроенными диаграммами в Python? The modules mentioned in this question, похоже, не имеют такой возможности.Python: Создание таблиц Excel с диаграммами

Я предпочитаю общий модуль, который будет работать под Ubuntu, а не зависящий от Windows.

EDIT: Я также ценю способы встраивания изображений в созданные диаграммы, поскольку я могу создавать диаграммы во внешней программе и размещать их на правом листе.

Спасибо,

Адам

ответ

3

Это немного запутанный (и/или злой), но что-то вроде этого будет работать кросс-платформенным (в том числе и под Linux) с использованием JPype для обертывания библиотеки Excel Java SmartXLS.

В этом примере используется пример создания диаграммы (в диаграммах/ChartSample.class) из 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() 
+0

Это можно сделать напрямую с помощью Java, правильно? –

+0

Да, однако это позволит вам программно создавать графики Excel из существующего кода Python «непосредственно» (для некоторого значения direct;) –

5

В Windows, вы должны использовать pywin32 и COM. В поле * x вы можете обнаружить, что комбинация Iron Python, Mono и библиотеки Excel-манипуляции, написанная для .NET, может выполнять эту работу. В любом случае, удачи.

+0

+1 Спасибо. Думаю, я создам свои диаграммы во внешней программе и вставляю их в качестве изображения. –

3

Я недавно нашел xlsxwriter. Это самый удобный xlsx-модуль python, который я нашел и работает с диаграммами и графиками. Он также не требует каких-либо нестандартных модулей python и работает с любым типом коробки. Нет необходимости в окнах или для установки графического программного обеспечения.

Смежные вопросы