[python3]Excel解析库-xlutils

`xlutils` 是一组用于处理 Excel 文件的 Python 库,它实际上是 `xlrd` 和 `xlwt` 的扩展,提供了额外的功能来操作 Excel 文件。`xlutils` 主要由三个部分组成:`xlutils.copy`、`xlutils.filter` 和 `xlutils.view`,它们分别用于复制和修改现有 Excel 文件、过滤数据以及查看 Excel 文件的内容。

安装

要使用 `xlutils`,首先需要安装它。可以通过 pip 来安装最新版本:

复制代码
```bash
pip3 install xlutils
```

由于 `xlutils` 依赖于 `xlrd` 和 `xlwt`,确保你也安装了这两个库(注意,对于 `.xls` 文件的支持,`xlrd` 版本应低于2.0.0,因为从2.0.0开始,`xlrd` 不再支持 `.xls` 文件):

复制代码
```bash
pip install xlrd<2.0.0 xlwt
```

基本用法

复制代码
#### 使用 `xlutils.copy` 修改现有文件

`xlutils.copy` 允许你读取一个现有的 `.xls` 文件,并创建一个可编辑的副本。然后你可以对这个副本进行修改,最后保存为新的文件或覆盖原文件。

```python
import xlrd
from xlutils.copy import copy

# 打开现有的工作簿
rb = xlrd.open_workbook('example.xls', formatting_info=True)

# 创建副本
wb = copy(rb)

# 获取第一个工作表
sheet = wb.get_sheet(0)

# 修改单元格内容
sheet.write(0, 0, 'Updated Value')

# 保存更改到新文件
wb.save('updated_example.xls')
```

#### 使用 `xlutils.filter` 过滤数据

`xlutils.filter` 提供了一种机制,可以让你通过定义过滤器来自定义处理 Excel 文件的方式。例如,你可以编写一个过滤器来移除空白行或应用特定的格式化规则。

```python
from xlutils.filter import process, XLRDReader, XLWTWriter
from xlrd import open_workbook
from xlwt import Workbook

def remove_blank_rows(record):
    if record.name == 'row':
        if not any(cell.value for cell in record.cells):
            return False
    return True

# 打开现有的工作簿
book = open_workbook('example.xls')

# 设置输入输出处理器
process(
    XLRDReader(book, 'example.xls'),
    XLWTWriter(),
    sheet_records=[remove_blank_rows]  # 应用过滤器
)

# 保存结果到新文件
writer.save('filtered_example.xls')
```

#### 使用 `xlutils.view` 查看文件内容

`xlutils.view` 提供了一些简单的工具来查看 Excel 文件的内容,主要用于调试目的。例如,它可以将 Excel 表格转换为 HTML 格式以便在浏览器中查看。

```python
from xlutils.view import view

# 打开现有的工作簿并查看其内容
view('example.xls')
```

### 注意事项

- `xlutils` 只适用于 `.xls` 文件格式。如果你需要处理 `.xlsx` 文件,请考虑使用其他库如 `openpyxl` 或 `XlsxWriter`。
- 由于 `xlutils` 依赖于 `xlrd` 和 `xlwt`,而这些库已经不再积极维护,因此对于现代项目来说,可能更推荐使用更新的库来进行 Excel 文件的操作。
- 在处理较大文件时,`xlutils` 可能会遇到性能问题,因为它需要将整个文件加载到内存中进行处理。

### 示例:完整代码示例

以下是一个完整的例子,演示了如何使用 `xlutils` 修改现有的 `.xls` 文件并在其中添加新的数据:

```python
import xlrd
from xlutils.copy import copy

def update_excel_file(input_file, output_file):
    # 打开现有的工作簿
    rb = xlrd.open_workbook(input_file, formatting_info=True)

    # 创建副本
    wb = copy(rb)

    # 获取第一个工作表
    sheet = wb.get_sheet(0)

    # 添加新数据
    new_data = [
        ['New Data 1', 'Value 1'],
        ['New Data 2', 'Value 2']
    ]
    start_row = sheet.nrows  # 获取当前行数以确定插入位置

    for row_index, row_data in enumerate(new_data, start=start_row):
        for col_index, value in enumerate(row_data):
            sheet.write(row_index, col_index, value)

    # 保存更改到新文件
    wb.save(output_file)

if __name__ == "__main__":
    input_file = 'example.xls'
    output_file = 'updated_example.xls'
    update_excel_file(input_file, output_file)
```

总结

`xlutils` 是一个有用的工具集,特别适合那些需要频繁读取和修改 `.xls` 文件的项目。然而,考虑到 `xlrd` 和 `xlwt` 的局限性及其缺乏活跃维护的状态,在选择工具时应该权衡项目的长期需求和技术栈的选择。

相关推荐
BK贝壳2 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949654 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨6 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪6 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
在世修行8 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885728 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI8 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
信誓旦旦的程序猿9 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口