欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

处理Excel的Python算法_2_:批量处理Excel文件的模块——xlwings

程序员文章站 2024-02-23 20:10:28
...

xlwings官方文档

处理Excel的Python算法_2_:批量处理Excel文件的模块——xlwings
官方网站:https://www.xlwings.org/pro

Quickstart

1、脚本编写:通过Python与Excel自动化/交互

创建excel工作簿实例

import xlwings as xw
wb = xw.Book()  # 创建一个新的excel文件
wb = xw.Book('FileName.xlsx')  # 连接当前目录下的excel文件
wb = xw.Book(r'C:\path\to\file.xlsx')  # 连接到路径下的excel文件

同一文件多个实例

如果在两个Excel实例中打开了同一个文件,则需要完全限定它并包含app实例。你可以通过xw.apps.keys()找到你的excel示例:

xw.apps[10559].books['FileName.xlsx']

创建sheet实例

sht = wb.sheets['Sheet1']

读写sheet文档

# 读写单个单元格:
sht.range('A1').value = 'Foo 1'
sht.range('A1').value
# 有许多便利功能,例如拓展读写单元格范围:
sht.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]
sht.range('A1').expand().value
---------------------------
Foo1  Foo2  Foo3
10.0  20.0  30.0
# 功能强大的转换器可处理大多数感兴趣的数据类型,包括双向的Numpy数组和Pandas DataFrame:
import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
sht.range('A1').value = df
sht.range('A1').options(pd.DataFrame, expand='table').value
---------------------------
       a    b
0.0  1.0  2.0
1.0  3.0  4.0
# Matplotlib图形可以在Excel中显示为图片:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([1, 2, 3, 4, 5])
[<matplotlib.lines.Line2D at 0x1071706a0>]
sht.pictures.add(fig, name='MyPlot', update=True)
<Picture 'MyPlot' in <Sheet [Workbook4]Sheet1>>

2、宏:从Excel调用Python

您可以通过单击Run加载项中的按钮(v0.16中的新增功能)来调用Python函数,也可以通过VBA使用该RunPython函数来调用Python函数:

该Run按钮需要一个main在Python模块中调用的函数,该函数的名称与您的工作簿相同。这种方法的优点在于,您不需要将工作簿启用宏,可以将其另存为xlsx。

如果要调用任何Python函数,无论它位于哪个模块中或具有什么名称,请使用RunPython:

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

默认情况下,RunPython期望hello.py与Excel文件位于同一目录中,但是您可以通过config进行更改。通过使用xw.Book.caller以下内容来参考调用Excel的工作簿:

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

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

要运行此程序,您需要安装xlwings加载项。进行所有设置的最简单方法是从Windows上的命令提示符或Mac上的终端使用xlwings命令行客户端。xlwings quickstart myproject

3. UDF:用户定义的功能(仅Windows)

用Python编写UDF很容易:

import xlwings as xw

@xw.func
def hello(name):
    return 'Hello {0}'.format(name)

转换器也可以与UDF一起使用。再次以Pandas DataFrame为例:

import xlwings as xw
import pandas as pd

@xw.func
@xw.arg('x', pd.DataFrame)
def correl2(x):
    # x arrives as DataFrame
    return x.corr()

通过单击xlwings加载项的导入按钮将该函数导入Excel:有关更多详细信息,请参见用户定义函数(UDF)。

简单示例

import xlwings as xw
 
# 创建工作簿
app = xw.App(visible = True, add_book = False) # 创建excel实例,启动窗口,暂不不创建工作簿
workbook = app.books.add() # 创建工作簿

# 保存工作簿
workbook.save('d:\\example.xlsx')
workbook.close()  # 关闭工作簿
app.quit()  # 退出Excel程序

# 打开工作簿
import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open(r'd:\example.xlsx')  # 打开D盘根文件夹下名
# 需要注意的是,指定的工作簿必须真实存在,并且不能处于已打开的状态。

# 操控工作表和单元格
import xlwings as xw
app = xw.App(visible = False)
workbook = app.books.add()
worksheet = workbook.sheets.add('产品统计表')
worksheet.range('A1').value = '编号'
workbook.save(r'd:\北京.xlsx')
workbook.close()
app.quit()