1、Python对 Excel操作详解文档摘要:本文档主要介绍如何通过 python对 office excel进行读写操作,使用了 xlrd、xlwt 和 xlutils模块。另外还演示了如何通过 Tcl tcom包对 excel操作。关键字:Python、 Excel、xlrd、xlwt、xlutils、TCl、tcom1 Python 简介Python是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语
2、句块。与 Scheme、Ruby、Perl、Tcl 等动态语言一样,Python 具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python 虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如 py2exe、PyPy、PyInstaller 之类的工具可以将Python源代码转换成可以脱离 Python解释器运行的程序。2 Python 安装Python目前的版本已经更新到 3.4.0,本文使用的版本为2.7.5,所有的版本都可以在 python官网 http:/www.python.org/下载,至于
3、2.x和 3.x版本的具体区别也可以在官网查看。从官网下载了 python 2.7.5安装文件 python-2.7.5.msi后,直接双击就可以安装 python了,可以选择安装路径,我改为C:Python2.7.5了,然后一路 next就完成安装了,安装完成后在C盘下就多了一个文件夹 Python2.7.5。Python也是一种实时交互语言,可以通过自带的 IDLE编写python语句并反馈回显信息,可以通过图 1方式调出 python IDLE。图 1也可以在 cmd下输入 python,但默认情况下 python并没有添加到 windows环境变量中,导致在 cmd下输入 python
4、的时候出现提示“python 不是内部或外部命令,也不是可运行的程序或批处理文件。 ”,windows 下可执行文件在运行时首先在当前目录下搜索,因为进入 cmd下默认路径一般为 C:Documents and SettingsAdministrator,而在这个路径下是找不到 python的,所以提示出错,可以进入到 python安装目录下,然后执行 python就可以进入交互命令行模式下。如果懒的每次都进入 python安装,此时需要将 python安装路径添加到系统变量中,然后 windows在执行命令的时候会去环境变量中查找路径,具体配置如图 2所示,在Path中添加 python的安
5、装路径“C:Python2.7.5;” ,主要路径后面要加”;”分号表面这是一个路径的结束,此时无论在哪个路径下都可以执行 python调出交互命令行。图 23 Python 语法入门在 Python简介中提到 Python是一种直译式电脑编程语言,体现在语法中,如要将变量 a赋值为 1,Tcl 使用命令%set a 1(本文中为了区分 Tcl和 Python的命令,Tcl 命令前会加上“%” ,否则默认为 Python命令) ,在 python中命令为 a = 1,输出 a的值可以直接输入 a,也可以通过 print语句输出 a的值,命令为 print a(在python 3.0以后版本中,
6、print 不再是一个语句,而是一个函数,所以如果想要输出 a,用法为 print(a)) 。在 Tcl中求 1和 10的和或者变量之间的加减乘除运算需要使用 expr命令,在 python则直接写表达式就可以了,如图 3所示。图 3Python很多功能都是靠模块实现的,比如 ftplib模块负责 ftp功能的实现,math 模块囊括了基本数学公式,如果我们想要引用这些模块,需要使用命令 import 模块名称,如 import ftplib和import math。如果想使用 math模块中的函数 floor,可以使用命令 math.floor(28.5),语法为“模块.函数” ,如果想要直
7、接使用floor函数,必须提前引用,命令为 from math import floor,那样就可以直接使用命令 floor(28.5)了。如果觉得 floor这个函数名称太长了或者不好记忆,可以通过变量引用函数,如 f = math.floor,这样变量 f就充当了 math.floor的功能了。上面提到的模块 ftplib和 math都是在 python安装的时候已经安装了,而接下来重点介绍的 xlrd、xlwt、xlutils 模块都不是随 python安装的。需要手动下载安装,第 5节会详细介绍模块的安装。当成功导入了某个模块后,可以通过函数 dir (模块名)查看这个模块包含哪些函数
8、,如果对某个函数的作用不了解,可以通过help函数查看,如 help(math.pow)本文只是带领大家入门,python 的其他语法可以参考其它资料学习。4 Tcl 对 Excel 操作在使用 python对 excel操作之前搜索过如何通过 Tcl对 excel操作,Tcl 本身没有提供对 excel操作的命令,可以通过 tcom外部包来调用 excel的接口实现,但是个人感觉实现起来比较麻烦,msdn网站上虽然提供了 excel的接口,但示例都是针对 VB脚本语言写的,Tcl 如果想要调用的话还需要转换,如下是一段简单的 Tcl代码展示如何通过 tcom对 excel进行操作,但也花了本
9、人不少时间琢磨。# 加载 tcom包package require tcomset filename “F:/1.xls“# 创建 com实例,打开工作表,下面四句都是套路set excel :tcom:ref createobject “Excel.Application“set workbooks $excel Workbooksset workbook $workbooks Open $filenameset worksheets $workbook Worksheets# “sheet1“为 sheet的名称set worksheet $worksheets Item “sheet1“
10、# 创建单元格对象set cells $worksheet Cells# 给单元格 B2赋值为“hsdf”$cells Item 2 B “hsdf“# 获取 sheet的个数并赋值给 sheetCountset sheetCount $worksheets Count# 获取 A1至 A15单元的范围对象set range $worksheet Range A1 A15# 给 A1至 A15单元赋值$range Value2 “abcdefg“# 获取 A1至 A15的值,并赋值给 A,A是一个列表 listset A $range Value2# 设置单元的背景色set interior
11、$range Interior$interior Color expr 0x00FFE0# 设置单元的前景色和字体大小、加粗、斜体、字体set font $range Font$font Color expr 0xFF0000$font Bold 1$font Size 10$font Italic 0$font Name “华文行楷“# 设置单元格的宽度为自动调整set entire $range EntireColumn$entire AutoFit# 保存文档$workbook Save# 显示 Excel$excel Visible 15 xlwt 和 xlrd 模块的安装Python
12、也是通过导入外部模块来实现对 excel的操作,xlrd 负责对 excel的读取,xlwt 负责对 excel的写入,xlutils 依赖于xlrd和 xlwt,可以复制 excel文件。这三个包都可以在网站http:/www.python-excel.org/下载。本文使用的 xlrd版本为0.8.0,xlwt 版本为 0.7.5。从网上下载好 xlrd和 xlwt后,解压缩到 C:Python2.7.5Lib下,此时在命令行下输入 import xlrd或者import xlwt,会出现提示 ImportError: No module named xlwt,这表明还没有安装 xlwt模
13、块。python 导入一个模块的过程要求有一个叫做“路径搜索”的操作过程,即是在文件系统“预先设定的区域”查找模块文件以加载模块的过程。这个预先设定的区域其实是 python搜索路径的一组目录。这个目录保存在 sys.path中,如果你想知道 python导入模块时会在哪些路径搜索模块,你可以执行以下命令查看搜索路径目录: import sys sys.pathD:pythonshell2.7.5,C:Python2.7.5Libidlelib,C:Python2.7.5libsite-packagessetuptools-1.3-py2.7.egg,C:Python2.7.5libsite-
14、packagesxlutils-1.7.0-py2.7.egg,C:Windowssystem32python27.zip,C:Python2.7.5DLLs,C:Python2.7.5lib,C:Python2.7.5libplat-win, C:Python2.7.5liblib-tk,C:Python2.7.5,C:Python2.7.5libsite-packages,C:Python2.7.5libsite-packageswin32,C:Python2.7.5libsite-packageswin32lib,C:Python2.7.5libsite-packagesPythonwi
15、n在 sys.path中找到一个路径为C:Python2.7.5lib,所以我们把模块解压缩到这个目录下。命令sys.path.append(C:Python2.7.5lib)在最后添加一个目录,sys.path.insert(0, C:Python2.7.5lib )在第一位插入一个目录。解压缩完成并放在正确目录后,在 cmd下进入 package当前目录,然后输入命令“C:Python2.7.5Libxlrd-0.8.0python setup.py install”,安装完成后可以输入 import xlrd,dir(xlrd)来确认是否已经安装正确。6 xlrd 简单使用方法impor
16、t xlrdexcel = xlrd.open_workbook(“C:UsersHuZhangdongDesktopASB测试床环境信息图.xls“) #打开文件并将对象存储到 excel中sheet = excel.sheet_by_index(0) #通过索引读取 sheet对象,第一个 sheet的索引为“0“row_3 = sheet.row_values(2) #读取第 3行的所有数据,并以列表的形式存储到 row_3中col_3 = sheet.col_values(2) #读取第 3列的所有数据,并以列表 list的形式存储到 col_3中cell_12_7 = sheet.c
17、ell_value(11,6) #读取第 12行第 7列的数据,并存储到 cell_12_7中cell_11_11 = sheet.cell(10,10).value #读取第 11行第11列的数据,并存储到 cell_11_11中cell_7_8 = sheet.row(6)7.value #读取第 7行第8列的数据cell_7_8 = sheet.cel(7)6.value #读取第 8列第7行的数据num_rows = sheet.nrows #读取 sheet的总行数num_cols = sheet.ncols #读取 sheet的总列数基本上面的命令已经可以满足目前对 excel读取
18、的操作了,接下给大家讲解 xlwt的用法。7 xlwt 简单使用方法#-*- coding: UTF-8 -*- #设置编码格式为 utf-8import os,xlwt,datetime #导入模块data =xlwt.Workbook() #新建一个 Workbooksheet = data.add_sheet(u“sheet“) #新建一个 sheet,名称为sheetstyle1 = xlwt.XFStyle() #创建格式 style1style2 = xlwt.XFStyle()style3 = xlwt.XFStyle()#设置字体格式font1 = xlwt.Font() #创
19、建 font1font1.name = Times New Roman #字体为Times New Romanfont1.bold = True #加粗font1.colour_index = 2 #字体颜色为红色,0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyanfont1.underline = xlwt.Font.UNDERLINE_DOUBLE #下划线类型,UNDERLINE_DOUBLE 代表双下划线,另外还有 UNDERLINE_NONE, UNDERLINE_
20、SINGLE, UNDERLINE_SINGLE_ACC, UNDERLINE_DOUBLE, UNDERLINE_DOUBLE_ACCfont1.escapement = xlwt.Font.ESCAPEMENT_SUPERSCRIPT #设置上标font1.family = xlwt.Font.FAMILY_ROMANfont1.height = 0x190 #0x190是 16进制,换成 10进制为400,然后除以 20,就得到字体的大小为 20style1.font = font1 #将创建的 font1字体格式应用到style1上font2 = xlwt.Font() #创建 fon
21、t2font2.name = “Algerian“ #字体为Algerian font2.colour_index = 3 #字体颜色为绿色font2.italic = True #斜体font2.struck_out = True #删除线font2.height = 0x258 #字体大小为 30style2.font = font2 #将创建的 font2字体格式应用到style2上#设置列宽sheet.col(0).width = 6000sheet.col(1).width = 12000sheet.set_col_default_width(2)#设置单元格对齐方式alignmen
22、t = xlwt.Alignment() #创建 alignmentalignment.horz = xlwt.Alignment.HORZ_CENTER #设置水平对齐为居中,May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTEDalignment.vert = xlwt.Alignment.VERT_CENTER #设置垂直对齐为居中,May be: VERT_TOP, VERT_CENTER
23、, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTEDstyle3.alignment = alignment #应用 alignment到 style3上#插入时间style3.num_format_str = YYYY-MM-DD HH:MM:SS #设置时间格式sheet.write(1,1,datetime.datetime.now(),style3) #在第2行第 2列插入当前时间,格式为 style3#设置单元格背景颜色pattern_yellow = xlwt.Pattern() #创建 pattern_yellowpattern_yell
24、ow.pattern = xlwt.Pattern.SOLID_PATTERN #设置填充模式为全部填充pattern_yellow.pattern_fore_colour = 5 #设置填充颜色为 yellow黄色style1.pattern = pattern_yellow #把设置的 pattern应用到style3上pattern_red = xlwt.Pattern() #创建 pattern_redpattern_red.pattern = xlwt.Pattern.SOLID_PATTERN #设置填充模式为全部填充pattern_red.pattern_fore_colour
25、= 2 #设置填充颜色为 red红色style2.pattern = pattern_red #把设置的 pattern应用到style4上 #设置单元格边框borders = xlwt.Borders() #创建 bordersborders.left = xlwt.Borders.DASHED #设置左边框的类型为虚线 May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DO
26、TTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.borders.right = xlwt.Borders.THIN #设置右边框的类型为细线borders.top = xlwt.Borders.DOTTED #设置上边框的类型为打点的borders.bottom = xlwt.Borders.THICK #设置底部边框类型为粗线borders.left_colour = 0x10 #设置左边框线条颜色borders.right_colour = 0x20borders.top_colo
27、ur = 0x30borders.bottom_colour = 0x40style1.borders = borders #将 borders应用到 style1上style2.borders = borders #将 borders应用到 style2上sheet.write(3, 0, HuZhangdong, style1) #在第 4行第 1列写入HuZhangdong,格式引用 style1sheet.write(4, 0, YinMengran , style2) #在第 5行第 1列写入YinMengran,格式引用 style2data.save(ue:3.xls) #保存到
28、 e:3.xls函数 xlwt.Workbook()只能新建一个 excel文档,不能打开一个已经存在的文档,下一章会讲解如何通过 xlutils修改一个已经存在的 excel文档。8 xlutils 简单使用方法本章将讲解如何使用 xlutils编辑一个已经存在的文档,需要导入 xlutils模块,下载地址是 http:/www.python-excel.org/,模块成功安装后就开始编写脚本吧。#-*- coding:utf-8 -*- #设置当前编码格式为 utf-8import xlwt #导入 xlwt模块import xlrd #导入 xlrd模块from xlutils.copy
29、 import copy #导入 import模块的copy函数,接下来就可以直接使用函数 copy了。fileName = “E:4.xls“sheetName = “sheet1“styleBoldRed = xlwt.easyxf(font: color-index red, bold on) #设置字体,颜色为红色,加粗oldWb = xlrd.open_workbook(fileName, formatting_info=True) #使用 xlrd.open_workbook函数打开文件,formatting_info=True 表示保留该文件的格式newWb = copy(old
30、Wb) #通过 copy函数把 oldWb copy到newWb,然后通过编辑 newWb来实现编辑已经存在的文件。newWs = newWb.get_sheet(0) #读取第一个 sheetnewWs.write(4, 0, “value1“,styleBoldRed) #第 5行第 1列写入值“value1” ,格式采用 styleBoldRed。newWs.write(4, 1, “value2“,styleBoldRed) #第 5行第 2列写入值“value2”newWs.write(4, 2, “value3“,styleBoldRed) #第 5行第 3列写入值“value3”newWb.save(fileName) #文件保存为“E:4.xls“