[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 的强大能力。

相关推荐
love530love26 分钟前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫1 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………1 小时前
SortedList
python
这里有鱼汤1 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜1 小时前
Java25 新特性介绍
java·python·算法
深栈2 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn
MediaTea2 小时前
Python:匿名函数 lambda
开发语言·python
hui函数2 小时前
Python全栈(基础篇)——Day07:后端内容(函数的参数+递归函数+实战演示+每日一题)
后端·python
MYX_3092 小时前
第二章 预备知识(线性代数)
python·线性代数·机器学习
zhangfeng11332 小时前
亲测可用,R语言 ggplot2 箱线图线条控制参数详解,箱线图离散数值控制
开发语言·python·r语言·生物信息