zoukankan      html  css  js  c++  java
  • Python操作Excel

    前言:

    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()
  • 相关阅读:
    Mybatis使用resultType实现一对一查询
    利用webSocket使网页和服务器通信
    hdu--1728--special bfs
    hdu--1429--状压bfs
    hdu--3006--不知为何wa
    hdu--3001--类似旅行商<tsp>
    hdu--2660--二维费用背包
    hdu--4632--dp
    hdu--4497--数论
    hdu--4496--并查集
  • 原文地址:https://www.cnblogs.com/lizhe860/p/9042528.html
Copyright © 2011-2022 走看看