2011-04-06 76 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