python EXCEL处理
学习完本篇,你将会
- 了解并掌握如何操作execl
- 能大数据操作excel
EXCEL组成结构
- EXCEL由工作薄、工作表、单元格三部分组成。
工作薄:工作薄相当于Word的文档,一个工作薄文件由若干个工作表组成。
工作表:一张文件表由若干大小相同的单元格组成。
单元格:单元格是EXCEL的最基本单位,用于输入文件和数据内容
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.读取表中的行数
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')