python中的excel操作

news/2024/7/21 4:15:09 标签: python, excel

excel_0">操作excel

在Python中,处理Excel文件的常用模块有xlrdxlwtopenpyxl。以下是对这些模块的简要介绍:

  1. xlrd:

    • xlrd是一个用于读取Excel(.xls.xlsx)文件数据的库。
    • 它提供了方便的API来访问Excel文件中的工作表、行、列和单元格。
    • xlrd支持旧版Excel格式(.xls, 即Excel 97-2003)。
  2. xlwt:

    • xlwt是一个用于写入数据到旧版Excel(.xls, 即Excel 97-2003)文件格式的库。
    • 它允许用户创建新的Excel文件并对其进行编辑,如添加样式、字体等。
  3. openpyxl:

    • openpyxl是一个专门用于读取和写入最新版本的Excel文件(.xlsx, 即从Office 2007开始使用的格式)。
    • 它支持更复杂操作,例如修改现有工作簿或创建新工作簿、插入公式、图表等。

使用 xlrd 读取 Excel 文件

python">import xlrd

# 打开一个Workbook,只能打开旧的excel文件,不支持.xlsx文件
workbook = xlrd.open_workbook('./data/30/example.xls')

# 获取所有sheet名称
sheets = workbook.sheet_names()
print(sheets)

# 根据索引获取第一个sheet
sheet = workbook.sheet_by_index(0)

# 获取行数和列数
rows = sheet.nrows
cols = sheet.ncols

# 遍历所有行,并打印每一列值
for row_idx in range(rows):
    for col_idx in range(cols):
        cell_value = sheet.cell_value(row_idx, col_idx)
        print(cell_value, end='\t')
    print()


使用 xlwt 写入 Excel 文件

python">import xlwt

# 创建Workbook对象
workbook = xlwt.Workbook()

# 添加Sheet页,默认名为"testXLWTSheet"
worksheet = workbook.add_sheet('testXLWTSheet')

# 写入数据到单元格(行号, 列号, 值)
worksheet.write(0, 0, 'Hello')
worksheet.write(1, 0, 'World')

# 最后保存为.xls文件
workbook.save('./data/31/example.xlsx')
workbook.save('./data/31/example.xls')

使用 openpyxl 操作 Excel 文件

读取 .xlsx
python">from openpyxl import load_workbook

from openpyxl.cell.cell import Cell

wb = load_workbook('./data/32/example.xlsx')

# 获取当前活跃的sheet,默认就是第一个sheet
sheet = wb.active
# 或者 wb.get_sheet_by_name('test_title测试标题') 【官方说过时!!】
# 或者 wb['test_title测试标题'] 【推荐方案】

print(sheet.title)


# 使用Type Hints:
# 为了提高代码清晰度和后续维护性,在编写函数或处理复杂数据结构时,推荐使用Type Hints(Python 3.5+ 引入)。
def process_cell(cell: Cell):
    # 现在你可以享受自动补全和类型检查
    print(cell.value)
    # print(type(cell))  # 打印 <class 'openpyxl.cell.cell.Cell'>
    # print(dir(cell))  # 列出所有属性和方法


# 将sheet结果转成list(list())
result = []

# values_only参数为True时,只获取单元格的值,否则获取单元格对象Cell
for row in sheet.iter_rows(values_only=False):
    # print(row) # 打印每一行的单元格对象
    row_result = list()
    for cell in row:
        process_cell(cell)
        row_result.append(cell.value)
    result.append(row_result)

print(result)

# 将sheet结果转成list(tuple())
print([tuple(row) for row in sheet.iter_rows(values_only=True)])

写入 .xlsx
python">from openpyxl import Workbook
# from openpyxl.worksheet.worksheet import Worksheet

wb = Workbook()
ws = wb.active  # 默认创建了名为'Sheet' 的sheet页.

# 通过指定行列写入一格数据
ws['A1'] = "Hello"
ws['B1'] = "World!"
ws['A2'] = "test_new_line"

# 通过append写入一行数据,注意append的参数是一个list
# 同时是在没有数据的行开始写入
ws.append([1, 2, 3])
ws.append(['中文', 'aaaa', 11111])

# 通过行写入多行数据
rows = [
    ['Number', 'Batch 1', 'Batch 2'],
    [2, 40, 30],
    [3, 40, 25],
    [4, 50, 30],
    [5, 30, 10],
    [6, 25, 5],
    [7, 50, 10],
]
for row in rows:
    ws.append(row)


print(type(ws))

# 保存
wb.save("./data/32/example2.xlsx")

安装

pip install xlrd xlwt openpyxl 

openpyxl

目前,openpyxl是处理Excel文件(尤其是.xlsx格式)的最常用Python库。这是因为它提供了对最新Excel文件格式的完整支持,并且可以很容易地读取和写入这些文件。与此同时,它也支持许多高级功能,如样式、过滤、图表、公式等。

虽然xlrdxlwt在以前非常流行,但由于以下原因,它们的使用已经减少:

  1. xlrd自版本2.0起不再支持.xlsx文件格式。
  2. xlwt只能用来创建.xls(Excel 97-2003)格式的文件,并不能创建或编辑.xlsx(Excel 2007及以后版本)格式。

如果你需要处理旧版的.xls文件,则可能还需要使用到这些库。但对于大多数现代应用程序而言,推荐使用如下库:

  • openpyxl:适合读写 .xlsx 文件。
  • pandas:一个强大的数据分析工具包,在内部也可以利用 openpyxl, xlrd, 或其他引擎来读写Excel文件。

在选择合适工具时,请考虑你所需处理的特定任务和数据类型。如果你正在开发新项目并且不受限于旧版Office软件,则建议优先选择 openpyxl 或者通过 pandas, 这两者都能更好地兼容现代 .xlsx 格式并提供更多功能。

1. 单元格样式

openpyxl允许你为单元格设置字体、边框、填充色、对齐方式等样式。

python">from openpyxl import Workbook
from openpyxl.styles import Font, Color, Alignment, Border, Side

wb = Workbook()
ws = wb.active

# 设置字体样式
a1 = ws['A1']
a1.font = Font(name='Calibri', size=11, bold=True, italic=True, color='FF0000')
ws['A1'] = 'test_font'

# 设置填充颜色
from openpyxl.styles import PatternFill

a2 = ws['A2']
a2.fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
ws['A2'] = 'test_font'

# 设置对齐方式
a3 = ws['A3']
a3.alignment = Alignment(horizontal='center', vertical='center')
ws['A3'] = 'test_font'

# 批量设置
for row in ws["A4:F4"]:
    for cell in row:
        cell.font = Font(name='Calibri', size=11, bold=True, italic=True, color='FF0000')
        cell.value = 'test_font'

wb.save('./data/openpyxl_export/styled.xlsx')

2. 公式

可以直接在单元格中输入公式,就像在Excel中一样。

python"># 公式
ws['B1'] = 10
ws['B2'] = 20

# 在B3中使用公式求和B1和B2的值。
ws['B3'] = '=SUM(B1:B2)'

# 在B4中使用公式求积B1和B2的值。
ws['B4'] = '=PRODUCT(B1:B2)'

# 在B5中使用公式求平均值B1和B2的值。
ws['B5'] = '=AVERAGE(B1:B2)'

# 在B6中使用公式求最大值B1和B2的值。
ws['B6'] = '=MAX(B1:B2)'

# 在B7中使用公式求最小值B1和B2的值。
ws['B7'] = '=MIN(B1:B2)'


wb.save('./data/openpyxl_export/styled.xlsx')

3. 合并与拆分单元格

python"># 合并A4到D4区域的单元格。
ws.merge_cells('A4:D4')
ws.merge_cells('A5:D5')  # 合并后,单元格的值会显示在合并区域的第一个单元格中。

# 拆分之前合并过的单元格。
ws.unmerge_cells('A4:D4')  # 拆分后,合并区域的值会显示在第一个单元格中。

wb.save('./data/openpyxl_export/styled2.xlsx')

4. 插入与删除行/列

python"># 插入行和列。
ws.insert_rows(5)  # 在第5行之前插入一行。
ws.insert_cols(2)  # 在第2列之前插入一列。
wb.save('./data/openpyxl_export/styled4.xlsx')

# 删除行和列。
ws.delete_rows(4)  # 删除第4行,删除后,往下的行会自动上移。
ws.delete_cols(2)  # 删除第1列,删除后,往右的列会自动左移。

wb.save('./data/openpyxl_export/styled5.xlsx')

5. 调整行高与列宽

python"># 设置第一行的高度。
ws.row_dimensions[1].height = 200

# 设置C列的宽度。
ws.column_dimensions['C'].width = 300

wb.save('./data/openpyxl_export/styled6.xlsx')

6. 图表创建

可以创建各种图表(如柱状图、折线图等)并添加到工作簿中。

python"># 图表创建
from openpyxl.chart import BarChart, Reference

values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10)
chart = BarChart()
chart.add_data(values)

ws.add_chart(chart, "E5")  # 将图表添加到E5位置

wb.save('./data/openpyxl_export/styled7.xlsx')

7. 使用Pandas DataFrame读写数据

如果你正在处理大量数据,使用Pandas DataFrame进行读写可能更加方便。

python"># 使用pandas导出数据
import pandas as pd

# 创建一个DataFrame
# Name和Age是列名
df = pd.DataFrame({'Name': ['John', 'Smith', 'Yirui'], 'Age': [30, 25, 15]})

from openpyxl.utils.dataframe import dataframe_to_rows

# 将DataFrame写入到ws中,index=False表示不写入索引列(在第一列,列名为空,索引数据从0开始),header=True表示写入列名。
for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)

wb.save('./data/openpyxl_export/styled8.xlsx')

以上只是openpyxl库提供功能的一部分。通过这些高级特性,你可以实现几乎所有常见的Excel操作,并能够创建非常复杂和动态化定制化程度很高的报告或数据集。为了深入学习更多细节及最佳实践,请参考openpyxl官方文档。


http://www.niftyadmin.cn/n/5440026.html

相关文章

L1-027 出租(PTA)

文章目录 L1-027 出租题目描述模拟哈希表二分查找 L1-027 出租 题目描述 下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&a…

编程语言那么多,为什么偏偏是C语言成了大学的必修课?

编程语言那么多&#xff0c;为什么偏偏是C语言成了大学的必修课&#xff1f; 必修JAVA? c#不服 必修Python? JAVA不服 甚至你必修到一半&#xff0c;Python落伍了都有可能。 当年我们还以必修JAVA&#xff0c;JSP为主要论点&#xff0c;然而刚过两年&#xff0c;JSP就成古…

wireshark数据捕获实验简述

Wireshark是一款开源的网络协议分析工具&#xff0c;它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图&#xff1a; 实验基础配置&#xff1a; 服务器&#xff1a; ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…

机器学习——编程从零实现决策树【二】

第一节的内容&#xff1a;机器学习——编程实现从零构造训练集的决策树-CSDN博客 目录 v2&#xff1a;划分验证集&#xff0c;优化预测 1&#xff09;划分训练集和验证集 2&#xff09;完善预测过程 3&#xff09;训练模型并验证 v3&#xff1a;k折交叉验证 1&#xff0…

mongodb进阶聚合查询各种写法

mongodb聚合sql写法 1、聚合查询配上分页加排序 DBQuery.shellBatchSize 30000 db.getCollection(svOrderRecordMo).aggregate([ {$match:{"actionType":9}}, {$group:{_id:"$svOrderId",total:{"$sum":1}}}, {$sort:{"createTime"…

监测数据计算换算的关键步骤与策略

在工程监测领域&#xff0c;数据的准确计算与换算是确保工程安全和稳定性的关键。本文旨在阐述一套高效的监测数据计算换算策略&#xff0c;它包括准确设定基准值、及时处理原始数据、监控数据变化趋势&#xff0c;并在必要时迅速响应的全面流程。 1、监测物理量换算的核心是建…

har的编译及引用

1.创建HAR 选择文件->新建->模块&#xff0c;然后再下一个页面选择static library,之后在接下来的页面设置模块名字&#xff0c;然后下一步直到完成。 2.创建成功后在新建的模块下编写自己的代码内容。 3.编译HAR 编译默认是从Index.ets文件下进行导出&#xff0c;如果…

C# Winform实现数据双向绑定

DataGridView绑定数据时通常会使用控件得DataSource属性。 但是当我们修改绑定的数据时表格不会立即刷新&#xff0c;需要使用Refresh()方法控制表格刷新数据源。 下面介绍如何实现数据的双向绑定&#xff08;数据源改变时&#xff0c;对应控件立即改变&#xff09; 数据源的对…