2011-04-06 95 views
4

我一直在试图在Excel中生成数据。 我生成了.CSV文件。 因此,这很容易。 但生成图很难在Excel中...使用python在excel中生成图形

我在想,是python能够在excel中生成数据和图吗? 如果有示例或代码片段,请随时发布:)

或者一种解决方法可以使用python生成图形格式的图形,如.jpg等或.pdf文件也可以。只要解决方法不需要依赖项,比如需要安装boost库。

+0

[Python中,OpenOffice的:编程方式操纵电子表格]的可能重复(http://stackoverflow.com/questions/2356473/python-openoffice-programatically-manipulating-spreadsheets) – 2011-04-06 14:52:17

+0

一点点重复,但我的问题更多。 – 2011-04-06 21:10:57

回答

3

你有2种选择:

如果您使用的是Windows,你可以使用pywin32(包含在ActivePython)库使用OLE automation Excel自动运行。

from win32com.client import Dispatch 
ex = Dispatch("Excel.Application") 
# you can use the ex object to invoke Excel methods etc. 

如果您只想生成基本图等,您可以使用matplotlib

2

我建议你在从数据文件中绘制图形时尝试gnuplot。

1

如果您决定使用matplotlib,请查看我的excel到python类PyWorkbooks以获取数据。它使您可以像numpy数组(matplotlib的本地数据类型)一样高效且轻松地检索数据。

https://sourceforge.net/projects/pyworkbooks/

1

@大卫高,我期待在做类似的事情。目前我正在使用原始csv或将其转换为json,然后将其放入由jqplot读取的文件夹中。 jquery plotting and graphing library。然后,我需要做的就是让用户或我自己在任何Web浏览器中显示剧情。

4

是的,Xlsxwriter [docs] [pypi]在Python中创建excel charts有很多实用工具。您将需要使用xlsx文件格式,但对于不正确的参数没有太多反馈,并且无法读取输出。

import xlsxwriter 
import random 
# Example data 
# Try to do as much processing outside of initializing the workbook 
# Everything beetween Workbook() and close() gets trapped in an exception 
random_data = [random.random() for _ in range(10)] 
# Data location inside excel 
data_start_loc = [0, 0] # xlsxwriter rquires list, no tuple 
data_end_loc = [data_start_loc[0] + len(random_data), 0] 

workbook = xlsxwriter.Workbook('file.xlsx') 

# Charts are independent of worksheets 
chart = workbook.add_chart({'type': 'line'}) 
chart.set_y_axis({'name': 'Random jiggly bit values'}) 
chart.set_x_axis({'name': 'Sequential order'}) 
chart.set_title({'name': 'Insecure randomly jiggly bits'}) 

worksheet = workbook.add_worksheet() 

# A chart requires data to reference data inside excel 
worksheet.write_column(*data_start_loc, data=random_data) 
# The chart needs to explicitly reference data 
chart.add_series({ 
    'values': [worksheet.name] + data_start_loc + data_end_loc, 
    'name': "Random data", 
}) 
worksheet.insert_chart('B1', chart) 

workbook.close() # Write to file 

output of exmaple