• functions是一个用逗号隔开的函数列表，自变量名是x，中间不能有空格。
• min是x轴的最小值
• max是x轴的最大值
• points是描绘图像的点数

```   1 # com client for excel
2 from math import *
3 from win32com.client import Dispatch
4 from win32com.client import constants
5 from sys import *
6 from string import *
7 import win32clipboard as w
8
9 def evalFunc(func, x):
10     try: return eval(func)
11     except: return ""
12
13 funcs, xmin, xmax, points = argv[1], float(argv[2]), float(argv[3]), int(argv[4])
14 funclist = funcs.split(",")
15 xdata = [float(x)/points * (xmax - xmin) + xmin for x in range(0,points)]
16 ydata = [ [evalFunc(func, x) for x in xdata] for func in funclist]
17
18 xlApp = Dispatch("Excel.Application")
19 xlApp.Visible = True
21 sheet = xlApp.ActiveWorkbook.ActiveSheet
22
23 for n, f in enumerate(["x"] + funclist):
24     sheet.Cells(1,n+1).Value = f
25
26 def setClipText(aString):
27     w.OpenClipboard()
28     w.EmptyClipboard()
29     w.SetClipboardText(aString)
30     w.CloseClipboard()
31
32 def setExcelText(sheet, x, y, clipstr):
33     sheet.Cells(x,y).Select()
34     setClipText(clipstr)
35     sheet.Paste()
36
37 for n, data in enumerate([xdata] + ydata):
38     setExcelText(sheet, 2, n+1, "\n".join(map(str, data)))
39
41 chart = xlApp.ActiveChart
42 chart.ChartType = constants.xlXYScatterSmoothNoMarkers
43 range = "A1:%s%d" % (ascii_uppercase[len(funclist)],points+1)
44 chart.SetSourceData (Source=sheet.Range(range), PlotBy=constants.xlColumns)
45 chart.Location(constants.xlLocationAsObject, sheet.Name)
46 #xlApp.Visible = True
```

# 反馈

• 如果是函数图表制作， gunplot 等等优秀软件比使用 Excel 要方便和快捷的多哪………… ZoomQuiet

• Page.execute = 0.046s
• getACL = 0.015s
• init = 0.001s