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

[python3]Excel解析库-openpyxl

https://openpyxl.readthedocs.io/en/stable/

`openpyxl` 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许开发者创建、修改和保存电子表格,而无需依赖 Microsoft Excel 软件本身。`openpyxl` 支持读取和写入 Excel 的工作簿(Workbook)、工作表(Worksheet)、单元格(Cell)以及样式等元素。

### 安装

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


pip3 install openpyxl

### 基本用法

#### 创建一个新的工作簿

```python
from openpyxl import Workbook

# 创建一个新的工作簿对象
wb = Workbook()

# 获取活动的工作表
ws = wb.active

# 给工作表命名
ws.title = "Sample Sheet"

# 写入数据到单元格
ws['A1'] = "Hello"
ws['B1'] = "World"

# 保存文件
wb.save("sample.xlsx")
```

#### 打开现有的工作簿

```python
from openpyxl import load_workbook

# 加载现有工作簿
wb = load_workbook('existing_file.xlsx')

# 获取所有工作表的名字
print(wb.sheetnames)

# 选择特定的工作表
ws = wb["Sheet1"]

# 或者通过索引获取第一个工作表
ws = wb.worksheets[0]
```

#### 遍历工作表中的行和列

```python
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
    print(row)  # 输出每一行的数据元组

# 或者逐个访问单元格
for cell in ws["A"]:
    print(cell.value)
```

#### 添加新的工作表

```python
# 创建新的工作表并指定位置
ws2 = wb.create_sheet("My New Sheet", 0)  # 在最前面插入新工作表
```

#### 修改单元格样式

```python
from openpyxl.styles import Font, Color, Alignment, Border, Side, PatternFill

# 设置字体样式
cell = ws['A1']
cell.font = Font(name='Arial', size=14, bold=True, italic=False)

# 设置对齐方式
cell.alignment = Alignment(horizontal="center", vertical="center")

# 设置边框
thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))
cell.border = thin_border

# 设置背景颜色
cell.fill = PatternFill(start_color="FFCC66", end_color="FFCC66", fill_type="solid")
```

#### 合并和拆分单元格

```python
# 合并单元格
ws.merge_cells('A1:B2')

# 拆分已合并的单元格
ws.unmerge_cells('A1:B2')
```

#### 插入图表

```python
from openpyxl.chart import BarChart, Reference

# 准备数据
data = Reference(ws, min_col=1, min_row=1, max_col=3, max_row=4)

# 创建柱状图
chart = BarChart()
chart.add_data(data, titles_from_data=True)

# 将图表添加到工作表中
ws.add_chart(chart, "E5")
```

### 更多高级功能

- **公式**:可以在单元格中设置公式,例如 `ws['A1'] = '=SUM(A2:A4)'`
- **冻结窗格**:使用 `ws.freeze_panes = 'A2'` 来冻结顶部一行或左侧一列。
- **条件格式**:可以为单元格应用条件格式规则。
- **批注**:支持给单元格添加批注。
- **保护工作表**:可以启用工作表保护以防止意外更改。

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

以下是一个完整的例子,演示了如何创建包含简单表格的工作簿,并对其进行一些基本操作:

```python
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side

# 创建一个新的工作簿对象
wb = Workbook()

# 获取活动的工作表
ws = wb.active
ws.title = "Sales Data"

# 添加标题行
headers = ["Product", "Q1 Sales", "Q2 Sales"]
ws.append(headers)

# 设置标题行样式
for col in range(1, len(headers) + 1):
    cell = ws.cell(row=1, column=col)
    cell.font = Font(bold=True)
    cell.alignment = Alignment(horizontal="center")

# 添加数据行
data = [
    ("Widget A", 120, 150),
    ("Widget B", 90, 110),
    ("Widget C", 75, 85)
]

for row in data:
    ws.append(row)

# 保存文件
wb.save("sales_report.xlsx")
```

以上是关于 `openpyxl` 的一些基础知识和常用功能。


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

相关文章:

  • 利用大语言模型解决推理任务
  • visual studio 自动调整代码格式的问题:
  • 源代码编译安装X11及相关库、vim,配置vim(3)
  • Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?
  • MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分
  • CSS 学习之正确看待 CSS 世界里的 margin 合并
  • Python----Matplotlib数据可视化
  • Springboot应急安全学习平台k4u90
  • 索引(MySQL)
  • 信息学奥赛一本通:1311:【例2.5】求逆序对
  • 矩阵Matrix(POJ2155)
  • uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端
  • 【Duilib】 List控件支持多选和获取选择的多条数据
  • 嵌入式 TCP/UDP/透传/固件
  • JVM实战—如何分析jstat统计来定位GC
  • github gitbook写书
  • 算法基础 - 二分查找
  • 定位,CSS高级技巧,修饰属性(定位,css精灵,字体图标)
  • 在K8S上部署OceanBase的最佳实践
  • Mac修改文件权限
  • 如何在 JavaScript 中实现日期格式化?
  • mac无限刷新navicat试用时间
  • linux RT-Preempt -- 优先级继承实现
  • 如何使用Spark Streaming
  • rk3568 上Qt5.12.12迁移问题解决
  • R 语言科研绘图第 14 期 --- 柱状图-分组堆叠