Python量化

翻译:xlwings快速入门

2016-11-28  本文已影响3637人  mhye

更新说明下,这篇文字不是原创,是翻译自:xlwings_Quickstart

Quickstart

假设你已经安装了xlwings,如果还没有的话

pip install xlwings

在交互模式下通过python控制Excel

如果你在ipython/python交互模式下,同时你打开了一个Excel表格.可以简单地对当前活动进行操作,以及获取单元格信息.
简单粗暴

>>> import xlwings as xw
#A1单元格输入"Foo 1"
>>> xw.Range('A1').value = 'Foo 1'
#获取A1单元格的值
>>> xw.Range('A1').value
'Foo 1'

可以读取Numpy数组和Pandas的DataFrames数组,填充到单元格。同时也很容易从表格中按自己的方式读取数组

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
#填充到表格
>>> xw.Range('A1').value = df
从表格中读取
>>> xw.Range('A1').options(pd.DataFrame, expand='table').value
 a b
0.0 1.0 2.0
1.0 3.0 4.0
填充效果
一个完整的示例:创建一个电子表格,添加一个新的工作表,在指定工作表中添加数据。
>>> wb = xw.Book()
>>> wb.sheets.add()
<Sheet [Workbook1]Sheet2>
>>> wb.sheets['Sheet1'].range('A1').value = 'Foo1'

通常,你可以使用xw.Book就可以定位你打开的多个工作簿中的指定表格。

xw.Book("某某表.xlsx")

然后这篇指南上说可以通过xw.apps[0].books['filenme.xlsx']打开同名Excel,这里无法验证。
Matplotlib图标也可以作为图片显示在Excel中

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> plt.plot([1, 2, 3, 4, 5])
[<matplotlib.lines.Line2D at 0x1071706a0>]
>>> wb = xw.Book()
>>> wb.sheets[0].pictures.add(fig, name='MyPlot', update=True)
<Picture 'MyPlot' in <Sheet [Workbook4]Sheet1>>
pyplot效果图

宏:在Excel中调用python

这个我觉得还是蛮牛逼的,比方说你熟悉vba,又想写一些小工具做一些日常处理。
但是在这之前,你需要搞定加载项,这里有坑可以填:VBA模块安装,这里假定你能搞定这些。
加入你在你的alt+F11里谢了一段很牛逼的代码

Sub HelloWorld()
 RunPython ("import hello; hello.world()")
End Sub

这段代码的意思就是:我要通过RunPython模块导入hello.py脚本,并且执行它里面的函数。
现在你需要在表格的当前目录下新建一个hello.py文件,里面包含一个work函数。

# hello.py
import numpy as np
import xlwings as xw

def world():
 wb = xw.Book.caller()
 wb.sheets[0].range('A1').value = 'Hello World!'

好了,这段代码执行以后,会以调用这个函数的表格为当前表格,并且在当前表格的第一个工作表的A1填上'hello world!'

UDFs 用户自定义函数

编写UDF更加简单:

import xlwings as xw
@xw.func
def hello(name):
    return 'Hello {0}'.format(name)
上一篇下一篇

猜你喜欢

热点阅读