Python操作Excel

Stella981
• 阅读 712

前言:

Python操作Excel使用openpyxl模块,python中有好几个与excel相关操作的模块。

xlrd库:从excel中读取数据,支持xls、xlsx格式。

xlwt库:对excel进行修改操作,不支持对xlsx格式的修改。

xlutils库:在xlrd和xlwd中对一个已存在的文件进行修改。

openpyxl库:主要针对xlsx格式的excel进行读取和编辑。

一、openpyxl模块介绍

openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。

二、安装openpyxl模块

命令行中运行:pip install openpyxl

三、Excel中的三大对象:WorkBook、Sheet、Cell

在excel中主要的操作是在sheet中对数据进行读、写、修改的操作。操作流程如下:

1)生成一个工作薄(workbook)对象,workbook = load_workbook("这里写excel文件路径")。

2)获取某个表单(sheet)对象,sheet = workbook["这里写sheet名字"]。

3)在表单对象中的单元格(cell)中读、写、修改数据。

源码如下:

 1 from openpyxl import load_workbook  #引入库
 2 
 3 # 1.生成一个工作薄对象
 4 workbook = load_workbook('testdata.xlsx')
 5 
 6 #获取指定的表单
 7 sheet = workbook['Sheet1']
 8 
 9 # 获取第一个表单
10 ws = workbook.active
11 
12 # 读取表单中的数据
13 data = sheet.cell(row=2,column=1).value
14 print(data)
15 
16 # 修改表单中的数据
17 sheet.cell(row=2,column=3).value = 18
18 
19 # 保存数据
20 workbook.save('testdata.xlsx')
21 print('保存成功')
22 
23 #获取总行数
24 print('共有',sheet.max_row,'行')
25 print('共有',sheet.max_column,'列')
26 
27 # 读取所有的数据
28 # 按行读取
29 for index in range(1,sheet.max_row+1):
30     print('行号',index)
31     for i in range(1,sheet.max_column+1):
32         print('列号:',i,'内容:',sheet.cell(row=index,column=i).value)

四、读取sheet中所有数据通用类函数,列表嵌套列表 

from openpyxl import load_workbook
 
 class DoExcel:
     def __init__(self,file_path,sheet_name):
         self.file_path = file_path
         self.wb = load_workbook(file_path)
         self.sheet = self.wb[sheet_name]
   
     # 第一种:列表嵌套列表,缺点:要数每个值的索引
     def do_excel(self):
         maxrow = self.sheet.max_row  #获取最大行
         maxrol = self.sheet.max_column #获取最大列
         test_datas = []  #所有数据
         for i in range(2,maxrow+1):
             single_data = []  #每行数据
             for j in range(1,maxrol+1):
                 new_data = self.sheet.cell(i,j).value
                single_data .append(new_data)
             test_data.append(single_data )
         # print(test_data)
         return test_data  #返回所有数据

if __name__ == '__main__':
    test_data = DoExcel('test_data.xlsx','test_data').do_excel()

 五、读取sheet中所有数据通用类函数,列表嵌套字典

from openpyxl import load_workbook

class DoExcel:
    def __init__(self,file_path,sheet_name):
        self.file_path = file_path
        self.wb = load_workbook(file_path)
        self.sheet = self.wb[sheet_name]

    # 第二种:列表嵌套字典,每一行数据保存在字典里
    def do_excel(self,button,case_id_list):
        maxrow = self.sheet.max_row  #获取最大行
        maxcolumn = self.sheet.max_column  #获取最大列

        # ---获取所有表头,也就是第一行---
        headers = []
        for col in range(1,maxcolumn+1):
            headers.append(self.sheet.cell(1,col).value)

        test_datas = []    #所有数据
        for row in range(2,maxrow+1):
            single_data = {}  #存储单行数据
            for i in range(1,len(headers) + 1):
                single_data[headers[i-1]] = self.sheet.cell(row,i).value
            test_datas.append(single_data)
        print(test_datas)

if __name__ == '__main__':
     test_data = DoExcel('test_data.xlsx','test_data').do_excel()
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
大家好,我是早起。在之前的文章中我们曾详细的讲解了如何使用openpyxl操作Excel,其实在Python中还有其他可以直接操作Excel文件的库,如xlwings、xlrd、xlwt等等,本文就将讲解另一个优秀的库xlwings开头还是想说一下,各个库之间没有明确的好坏之分,每个库都有其适合的应用场景,并且xlwings和openpyxl
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
Python 操作excel
python操作excel使用xlrd、xlwt和xlutils模块。xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的一、python 读取excelimportxlrdbookxlrd.open_workbook('all_stu.xls')打开一个excelsheetb
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这