Excel内嵌Python脚本中如何将统计点数写入单元格
Excel内嵌Python脚本中如何将统计点数写入单元格
我太懂你这种需求了——用Excel内嵌的Python做科学/数学相关的工作表,既要生成图表,又要把统计的单个数值回写到单元格里,之前找的资料要么全是数据库相关的复杂操作,要么没说到点上,确实头疼。
其实解决方法特别简单,Excel的Python集成里专门有和读取单元格的xl()对应的写函数xlw(),刚好能满足你把单个数值写入单元格的需求,完全不用搞复杂的操作。
具体修改步骤
在你的脚本里,等统计完number_of_points之后(比如循环结束后,或者脚本的末尾),添加一行代码,用xlw()把数值写入你指定的单元格就行。比如你想把结果写到J2单元格,就加:
xlw("J2", number_of_points)
修改后的完整代码
我把你的代码加上这行关键修改,标出来新增的部分:
import numpy as np import matplotlib.pyplot as plt fig = plt.figure(figsize=(10,10)) ax = fig.add_subplot(1, 1, 1) a = xl("F2") b = xl("G2") c = xl("H2") d = xl("I2") x = np.linspace(-10, 10, 400) y1 = -a*x+b y2 = 0*x+c # Create the plot plt.plot(x, y1, color='blue', ls='--') plt.plot(x, y2, color='red', ls='--') plt.axvline(x = d, color = 'g', ls = "--") number_of_points = 0 for i in range(-10, 11): for j in range(-10, 11): if a*i + j < b and j > c and i > d: plt.plot(i, j, 'go') # 'go' for green points number_of_points = number_of_points + 1 # 新增的写入单元格代码,这里写到J2,你可以改成你需要的地址 xlw("J2", number_of_points) # Major ticks every 20, minor ticks every 5 major_ticks = np.arange(-10, 11, 1) minor_ticks = np.arange(-10, 11, 1) ax.set_xticks(major_ticks) ax.set_xticks(minor_ticks, minor=True) ax.set_yticks(major_ticks) ax.set_yticks(minor_ticks, minor=True) ax.axhline(linewidth=1.2, color="k") ax.axvline(linewidth=1.2, color="k") # And a corresponding grid ax.grid(which='both') # Or if you want different settings for the grids: ax.grid(which='minor', alpha=0.2) ax.grid(which='major', color ="black", linewidth = 0.6, alpha=0.8) plt.xlim(-10, 10) plt.ylim(-10, 10) plt.show()
简单说明
xl()是Excel内嵌Python用来读取单元格内容的函数,xlw()就是对应的写入函数,专门用来把单个值、数组等写回Excel单元格,完全适配你要写单个统计数的场景,不用碰那些复杂的数据库API。- 你可以把
"J2"改成任何你想要的单元格地址,比如"K3",只要是当前工作表里的有效地址就行。
你生成的图表是这样的:
备注:内容来源于stack exchange,提问作者Mark Barry
相关产品推荐
相关产品推荐

