`xlwings` 是一个强大的 Python 库,它允许你直接与 Microsoft Excel 进行交互。通过 `xlwings`,你可以轻松地在 Python 脚本或 Jupyter Notebook 中读取、写入和操作 Excel 文件,而无需手动打开 Excel 应用程序。此外,`xlwings` 还支持将 Python 函数作为宏(User Defined Functions, UDFs)嵌入到 Excel 中,从而扩展了 Excel 的功能。
安装
要使用 `xlwings`,首先需要安装它。可以通过 `pip` 来安装最新版本:
```bash
pip install xlwings
```
对于 Windows 用户,还需要确保已经安装了 Microsoft Excel。Mac 用户则可以使用自带的 Numbers 或者安装 Excel for Mac。
基本用法
#### 创建新的工作簿```python
import xlwings as xw# 创建一个新的工作簿
wb = xw.Book()# 获取活动的工作表
sheet = wb.sheets[0]# 写入数据到单元格
sheet.range('A1').value = 'Hello'
sheet.range('B1').value = 'World'# 保存文件
wb.save('example.xlsx')# 关闭工作簿
wb.close()
```#### 打开现有的工作簿```python
# 打开现有的工作簿
wb = xw.Book('existing_file.xlsx')# 获取所有工作表的名字
print(wb.sheet_names)# 选择特定的工作表
sheet = wb.sheets['Sheet1']# 或者通过索引获取第一个工作表
sheet = wb.sheets[0]
```#### 读取和写入数据```python
# 写入单个值
sheet.range('A1').value = 'Hello'# 写入多个值
sheet.range('A2').options(transpose=True).value = ['Python', 'is', 'awesome']# 读取单个值
cell_value = sheet.range('A1').value
print(cell_value) # 输出: Hello# 读取多个值
cell_values = sheet.range('A2:A4').value
print(cell_values) # 输出: ['Python', 'is', 'awesome']
```#### 遍历工作表中的行和列```python
# 遍历所有非空行
for row in sheet.used_range.rows:print([cell.value for cell in row])# 遍历指定范围内的行
for row in sheet.range('A1:B3').rows:print([cell.value for cell in row])
```#### 添加图表```python
import numpy as np# 准备一些数据
data = np.random.rand(5, 3)
sheet.range('A1').value = data# 插入柱状图
chart = sheet.charts.add(left=200, top=20, width=400, height=300)
chart.set_source_data(sheet.range('A1:C6'))
chart.chart_type = 'column_clustered'
```### 高级特性#### 将 Python 函数作为宏嵌入到 Excel 中`xlwings` 支持将 Python 函数注册为 Excel 中的 UDF(用户定义函数),这使得你可以在 Excel 公式中调用 Python 代码。1. **创建一个包含 UDF 的 Python 文件**:```pythonimport xlwings as xw@xw.funcdef hello(name):return f"Hello {name}!"```2. **在 Excel 中运行 Python 函数**:- 在 Excel 中按 `Alt + F11` 打开 VBA 编辑器。- 插入模块并添加以下代码来启动 Python 解释器:```vbaSub RunPython()RunPython ("import udf_module; udf_module.hello('World')")End Sub```- 或者直接在 Excel 单元格中使用公式调用 Python 函数:```excel=hello("World")```#### 使用 `xlwings` 与 Pandas 结合`xlwings` 和 `pandas` 结合得非常好,可以方便地将 DataFrame 读入或写出 Excel 文件。```python
import pandas as pd
import xlwings as xw# 创建一个示例 DataFrame
df = pd.DataFrame({'Column1': [1, 2, 3],'Column2': ['A', 'B', 'C']
})# 写入 DataFrame 到 Excel
wb = xw.Book()
sheet = wb.sheets[0]
sheet.range('A1').value = df# 从 Excel 读取 DataFrame
df_from_excel = sheet.range('A1').options(pd.DataFrame, expand='table').value
print(df_from_excel)
```### 示例:完整代码示例以下是一个完整的例子,演示了如何使用 `xlwings` 创建包含图表的工作簿,并将其保存到文件系统中:```python
import xlwings as xw
import numpy as npdef create_workbook_with_chart():# 创建一个新的工作簿wb = xw.Book()# 获取活动的工作表sheet = wb.sheets[0]# 准备一些随机数据data = np.random.rand(5, 3)sheet.range('A1').value = data# 插入柱状图chart = sheet.charts.add(left=200, top=20, width=400, height=300)chart.set_source_data(sheet.range('A1:C6'))chart.chart_type = 'column_clustered'# 保存文件wb.save('workbook_with_chart.xlsx')# 关闭工作簿wb.close()if __name__ == "__main__":create_workbook_with_chart()
```
总结
`xlwings` 是一个非常灵活且功能丰富的库,适用于需要与 Excel 紧密集成的应用场景。它不仅简化了 Python 和 Excel 之间的数据交换,还提供了将 Python 逻辑嵌入 Excel 的强大能力。