[python3]Excel解析库-xlwings
`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 文件**:
```python
import xlwings as xw
@xw.func
def hello(name):
return f"Hello {name}!"
```
2. **在 Excel 中运行 Python 函数**:
- 在 Excel 中按 `Alt + F11` 打开 VBA 编辑器。
- 插入模块并添加以下代码来启动 Python 解释器:
```vba
Sub 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 np
def 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 的强大能力。