python EXCEL处理

时间:2024-02-19 16:02:08

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:\Python27\Scripts对应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')