[python3]Excel解析库-xlwings

news2025/1/10 20:42:33

`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.coloradmin.cn/o/2274541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW大数据有什么应用场景?

LabVIEW在处理大数据时主要依赖于其强大的数据采集、信号处理、控制、以及实时系统的功能。以下是一些典型的应用场景: ​ 1. 工业自动化与制造 数据采集与监控:在生产线上,LabVIEW可以用来收集大量的传感器数据(如温度、压力、湿…

深入理解Mybatis原理》MyBatis的sqlSessi

sqlSessionFactory 与 SqlSession 正如其名,Sqlsession对应着一次数据库会话。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【OAuth2系列】集成微…

Open WebUI 与 AnythingLLM 安装部署

在前文 Ollama私有化部署大语言模型LLM(上)-CSDN博客 中通过Ollama来搭建运行私有化大语言模型,但缺少用户交互的界面,特别是Web可视化界面。 对此,本文以Open WebUI和AnythingLLM为例分别作为Ollama的前端Web可视化界…

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期,不少朋友在使用 O1 或 O1 Pro 模型时,都会碰到“降智”或“忽高忽低”的智力波动,比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题,你是不是也感到头疼呢? 为了找到更可靠的解决办法&#xf…

RK3562编译Android13 ROOT固件教程,触觉智能开发板演示

本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 关闭seli…

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景 实现效果 本案例展示了如何使用Three.js创建一个带有红蓝配置的半球光源的场景,并在其中添加一个旋转的球体。通过设置不同的光照参数,可以观察到球体表面材质的变化。 知识点 WebGLRenderer …

React+redux项目搭建流程

1.创建项目 create-react-app my-project --template typescript // 创建项目并使用typescript2.去除掉没用的文件夹,只保留部分有用的文件 3.项目配置: 配置项目的icon 配置项目的标题 配置项目的别名等(craco.config.ts&…

解决GitHub上的README.md文件的图片内容不能正常显示问题

一、问题描述 我们将项目推送到GitHub上后,原本在本地编写配置好可展现的相对路径图片内容,到了GitHub上却不能够正常显示图片内容,我们希望能够在GitHub上正常显示图片,如下图所示: 二、问题分析 现状:REA…

双模充电桩发展前景:解锁新能源汽车未来的金钥匙,市场潜力无限

随着全球能源转型的浪潮席卷而来,新能源汽车行业正以前所未有的速度蓬勃发展,而作为其坚实后盾的充电基础设施,特别是双模充电桩,正逐渐成为推动这一变革的关键力量。本文将从多维度深入剖析双模充电桩的市场现状、显著优势、驱动…

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式(Command Pattern) 命令模式(Command Pattern)命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap, show you my code总结 命令模式(Command Pattern) 命令模式&…

Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)

文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后,除了用户做的界面,最上面还有一个框,这就是window frame框。对于界面的元素,它们的原点是Qt界面的左上角或win…

LabVIEW水轮发电机组振动摆度故障诊断

本文介绍了基于LabVIEW的水轮发电机组振动摆度故障诊断系统的设计与实施过程。系统在通过高效的故障诊断功能,实现水轮发电机组的振动、温度等关键指标的实时监控与智能分析,从而提高电力设备的可靠性和安全性。 ​ 项目背景 随着电力行业对设备稳定性…

【JavaEE】—— SpringBoot项目集成百度千帆AI大模型(对话Chat V2)

本篇文章在SpringBoot项目中集成百度千帆提供的大模型接口实现Chat问答效果: 一、百度智能云 百度千帆大模型平台是百度智能云推出的一个企业级一站式大模型与AI原生应用开发及服务平台。 注册地址:https://qianfan.cloud.baidu.com/ 注册成功后&…

ARM交叉编译Boost库

Boost下载&#xff1a;点击跳转 编译过程&#xff1a; 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam&#xff08;位于第12行附近&#xff09; if ! gcc in [ feature.values <toolset> ] …

Cpp::C++11右值引用与移动构造(30)

文章目录 前言一、左值 & 右值二、左值引用 & 右值引用三、右值引用的意义四、右值引用和移动语义五、与编译器优化做的对比六、右值引用引用左值七、一些小问题能否将函数返回值设为 右值引用&#xff1f;函数传值返回&#xff0c;但在返回时能否手动 move 返回值&…

LeetCode:108.将有序数组转换为二叉搜索树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;108.将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff…

基于Redisson实现重入锁

一. 分布式锁基础 在分布式系统中&#xff0c;当多个客户端&#xff08;应用实例&#xff09;需要访问同一资源时&#xff0c;可以使用分布式锁来确保同一时刻只有一个客户端能访问该资源。Redis作为高性能的内存数据库&#xff0c;提供了基于键值对的分布式锁实现&#xff0c…

React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode

【2024最新版】React18 核心源码分析教程&#xff08;全61集&#xff09; Element对象与Fiber对象 在 React 中&#xff0c;Element 对象 和 Fiber 对象 是核心概念&#xff0c;用于实现 React 的高效渲染和更新机制。以下是它们的详细解读&#xff1a; 1. Element 对象 定…

急速了解什么是GPU服务器

GPU服务器是一种专门配置了高性能图形处理器&#xff08;GPU&#xff09;的服务器&#xff0c;旨在提供高性能计算、深度学习、科学计算等多种场景的计算服务。与传统的CPU服务器相比&#xff0c;GPU服务器在处理并行密集型计算任务时具有显著优势。本文将详细介绍GPU服务器的定…