当前位置: 首页 > article >正文

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


http://www.kler.cn/a/469519.html

相关文章:

  • C++二十三种设计模式之迭代器模式
  • oracle基础:将字段从 VARCHAR 修改为 CLOB
  • 【Qt】控件概述和QWidget核心属性1(enabled、geometry、windowTitle、windowIcon、QRC机制)
  • LInux单机安装Redis
  • Ant Design Pro写项目的总结经验(react)
  • 数学建模入门——描述性统计分析
  • 捡鹅卵石C++
  • 走进深圳华为总部参观研学
  • 【AI日记】25.01.05 kaggle 比赛 3-4 | 周反思
  • Android NDK开发实战之环境搭建篇(so库,Gemini ai)
  • 爱诗科技PixVerseV3.5发布:短时极速生成,动漫效果超预期
  • Docker + JMeter + InfluxDB + Grafana搭建压测可视化实时监控
  • K8S中POD的生命周期之钩子函数
  • ubuntu开启root用户
  • jest使用__mocks__设置模拟函数不生效 解决方案
  • 为飞桨PaddlePaddle实现笛卡尔直积
  • 重庆市大数据局:基于可信数据空间的公共数据流通利用
  • 详解GPT-信息抽取任务 (GPT-3 FAMILY LARGE LANGUAGE MODELS)
  • 毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)
  • d3dcompiler_47.dll缺失怎么修复全攻略:原理、步骤及注意事项
  • JS中的aynsc和await
  • IO编程与正则表达式
  • 保姆级教程Docker部署MySQL镜像
  • 网络安全的主要防护对象有哪些?
  • Oracle删除归档日志
  • Mysql数据实时同步到Es上