翻译: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)