zoukankan      html  css  js  c++  java
  • python EXCEL处理

    python EXCEL处理

    学习完本篇,你将会

    • 了解并掌握如何操作execl
    • 能大数据操作excel

    EXCEL组成结构

    • EXCEL由工作薄、工作表、单元格三部分组成。
      工作薄:工作薄相当于Word的文档,一个工作薄文件由若干个工作表组成。
      工作表:一张文件表由若干大小相同的单元格组成。
      单元格:单元格是EXCEL的最基本单位,用于输入文件和数据内容
      图1

    Python操作EXCEL库

    • Python操作EXCEL库有很多,常用的4中
      1.Win32 COM:此方法只能在win平台下操作EXCEL,跨平台,如IOS,LINUX系统
      下不支持。
      2.xlrd:读EXCEL表,读写速度快,但目前新版的excel操作有问题
      3.xlwt:写EXCEL表,操作速度快,但对新版的excel操作有问题
      4.Openpyxl:可读写EXCEL表,专门处理EXCEL2007及以上版本产生的xlsx文件,
      可以转换xls和xlsx之间。
    • 注意事项:Excel文件是gbk编码,读入时先decode(‘gbk’).encode为需要的编码

    Openpyxl下载安装

    • Openpyxl下载路径: https://pypi.python.org/pypi/openpyxl
    • 安装文件方式有两种,一种是下载安装包离线安装,另一种是在线安装。
      1.离线安装:下载安装包openpyxl.tar.gz,如果在linux下,需要通过
      “tar –xzvy openpyxl.tar.gz”命令解压,进入目录,找到setup.py,执行:python setup.py install
      2.在线安装:如果条件可以,可以通过pip命令安装,如果pip没有配置环境变量,需要进入pip目录。如果是win下直接打开cmd,输入cd /d D:Python27Scripts对应python27中Scripts目录。输入3.pip install openpyxl命令,即可安装。以及配置该目录环境变量可直接输入pip install openpyxl命令。如果发现pip命令不能识,可以输入pip.exe install openpyxl命令。
    • 如果想在EXCEL中处理图片,还需要安装pillow(PIL)模块,pip install pillow

    Openpyxl数据类型

    • openpyxl定义多种数据类型,其中最重要的三种:
      1.NULL空值:对应python中的None,表示这个cell里没有数据。
      2.number:数字型,统一按照浮点数来进行处理。对应于python中的float。
      3.string:字符串型,对应于python中的unicode。

    • openpyxl处理excel文件三个对象:
      1.Workbook:工作簿,一个excel文件包含多个sheet。
      2.sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
      3.cell: 单元格,存储数据对象

    导入openpyxl文件库
    from openpyxl import Workbook 	#导入workbook类	
    from openpyxl import load_workbook 	 #导入load_workbook类
    #导入PatternFill, Border, Side, Alignment, Protection, Font, Color, Fill 这些类
    #这些类处理单元格填充样式
    from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, Fill 
    from openpyxl.styles import colors 
    from openpyxl.styles import Fill,fills from openpyxl.formatting.rule import ColorScaleRule
    

    openpyxl基本操作

    • 打开workbook:wb =workbook(‘file_name.xlsx’)
    • 保存workbook:wb.save (‘file_name.xlsx’)
    • 打开sheet:
    打开excel有多种方法
    1.通过名称:ws=wb[“sheet1”]
    2.通过名称:ws=wb.get_sheet_by_name(“sheet1”)
    3.通过名字集合来查找:sheet_names = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheet_names [index])
    4.通过当前活动sheet:ws=wb.active
    5.通过当前活动sheet:ws=wb.get_active_sheet() #默认为通过index为0的表
    
    • 创建sheet
    创建sheet方法有两种,一种是通过默认的方式,再更改表名,另一种是通过直接创建表名称创建文件。
    1.ws=wb.create_sheet()#默认插入到最后
       ws.title=“New Title” #修改表明
    2.ws=wb.create_sheet(0)#默认插入到开始
       ws.title=“New Title” #修改表明
    3.Ws=wb.create_sheet(title=“Pi”)
    

    单元格读写

    • 读单元格内容:
    读单元格内容有多种方式:通过‘A4’方式,也可以通过row,column方式
    通过‘A4’方式:c = ws[‘A4’].value也可以等同于c = ws.cell(‘A4’)
    通过row,column方式:c=ws.cell(row=4,column=2)
    
    • 写单元格内容:
    写单元格内容跟读单元格类似,同样有两种方式
    通过‘A4’方式:ws[‘A4’] = 4
    通过row,column方式:ws.cell(row=4,column=2).value=‘test’
                                      ws.cell(row = 4,column = 2,value = ‘test’) 
    
    • 访问多个单元格:
    可通过cell_range = ws[‘A1’,’C2’] 获取值cell_range[i][j]
    
    • 访问所有的单元格:
    可通过get_cell_collection()
    获取单元格行数: ws.max_row
    获取单元格列数: ws.max_column
    

    Openpyxl例子

    图1
    • 通过上述函数完成以下内容:
      1.读取表中的行数
      2.读取表中的列数
      3.读取表中的所有信息

    Openpyxl简单封装

    • 封装一个读写excel类,方便以后调用
      封装步骤:
      1.设置文件编码格式
      2.编写文件说明注释
      3.导入需要的库文件
      4.创建一个operatexecl类名
      5.编写类的说明注释
      6.创建需要的类属性
      7.创建构造器__init__(),可在构造器中打开文件,
      8.创建打开文件方法(注释包含,方法功能,输入参数,输出参数,创建时间,创建人,方法描述)
      9.创建一个保存文件方法
      10创建修改单元格方法
      11.创建获取单元格方法

    已完成的封装

    # -*- coding: gbk-*-
    # author:IT策士
    
    from openpyxl import load_workbook
    from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, Fill
    from openpyxl.styles import colors
    from openpyxl.styles import Fill,fills
    from openpyxl.styles.colors import *
    import os
    
    class Excel:
        workbook = ''
        filepath = ''
        def __init__(self,path):
            self.filepath = path
            if os.path.isfile(path) is not True:
                os.mkdir(path)
            self.workbook = load_workbook(path)
    
    
    
        def add_date(self,date,sheetName,row,column,bgcolor = YELLOW,fontcolor = RED):
            if self.workbook == '':
                return False
            try:
                self.sheet=self.workbook.get_sheet_by_name(sheetName)
            except BaseException,msg:
                print u"表格:%s" %sheetName
                return False
            try:
                self.sheet.cell(row=row, column=column, value=date)
                self.sheet.cell(row=row, column=column).fill = PatternFill(start_color=Color(rgb=bgcolor),
                                                           end_color=Color(rgb=bgcolor), fill_type='solid')
                #self.sheet.cell(row=row, column=column).font = Font(color=Color(rgb=fontcolor),name="Calibri", sz=27, family=2, b=False, i=False, scheme="minor")
                self.sheet.cell(row=row, column=column).font = Font(color=Color(rgb=fontcolor))
                self.workbook.save(self.filepath)
            except BaseException,msg:
                print u"дÈëÊý¾Ýʧ°Ü"
                return False
    
        def get_date(self,sheetName,row,column):
            if self.workbook == '':
                return False
            try:
                print sheetName
                self.sheet = self.workbook.get_sheet_by_name(sheetName)
            except BaseException, msg:
                print u"ÎÞЧµÄsheetÃû³Æ:%s" % sheetName
                return False
            try:
                getvalue = self.sheet.cell(row=row, column=column).value
            except BaseException,msg:
                print u"¶ÁÊý¾Ýʧ°Ü"
                return False
            return getvalue
    
        def search(self,date,sheetName):
            list_result= []
            if self.workbook == '':
                return False
            try:
                self.sheet = self.workbook.get_sheet_by_name(sheetName)
            except BaseException, msg:
                print u"ÎÞЧµÄsheetÃû³Æ:%s" % sheetName
                return False
            try:
                maxrow = self.sheet.max_row
                maxcolumn = self.sheet.max_column
                for i in range(1,maxrow+1):
                    for j in range(1,maxcolumn+1):
                        try:
                            index = self.sheet.cell(row=i,column=j).value.find(date)
                        except BaseException,msg:
                            continue
                        if index>=0:
                            list_result.append([i, j])
            except BaseException,msg:
                print u"»ñÈ¡ÐС¢ÁÐÊýʧ°Ü"
                return False
            return list_result
    
        def close_excel(self):
            try:
                self.workbook.close()
            except BaseException,msg:
                print u"¹Ø±ÕÎļþʧ°Ü"
                return False
            return True
    
    if __name__ == '__main__':
        excel = Excel('demo2.xlsx')
        excel.add_date(u'tessdfsft',u'Sheet1',1,1)
        print excel.get_date(u'Sheet1',1,1)
        print excel.search('test',u'Sheet1')
    
    测试
  • 相关阅读:
    java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;解决
    springmvc-restful风格
    springmvc视图解析器配置
    spring整合mybatis以及配置事务
    spring AOP
    Spring AOP配置-xml
    springmvc-post请求 ---配置编码过滤器解决乱码
    实现支付宝接口
    spring-springmvc-mybatis整合
    OGLN两种表达式的区别
  • 原文地址:https://www.cnblogs.com/package/p/15315490.html
Copyright © 2011-2022 走看看