Python 对Excel 操作详解文档摘要:本文档主要介绍如何通过python 对office excel 进行读写操作,使用了xlrd 、xlwt 和xlutils 模块。
另外还演示了如何通过Tcl tcom 包对excel 操作。
关键字:Python、Excel、xlrd 、xlwt 、xlutils、TCl 、tcom1 Python 简介Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。
它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。
它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。
与Scheme、Ruby、Perl 、Tcl 等动态语言一样,Python 具备垃圾回收功能,能够自动管理存储器使用。
它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。
Python 虚拟机本身几乎可以在所有的作业系统中运行。
使用一些诸如py2exe、PyPy、PyInstaller 之类的工具可以将Python 源代码转换成可以脱离Python 解释器运行的程序。
2 Python 安装Python 目前的版本已经更新到3.4.0 ,本文使用的版本为2.7.5 ,所有的版本都可以在python 官网下载,至于 2.x 和 3.x 版本的具体区别也可以在官网查看。
从官网下载了python 2.7.5 安装文件后,直接双击就可以安装pythonPython 也是一种实时交互语言,可以通过自带的IDLE 编写python 语句并反馈回显信息,可以通过图 1 方式调出python IDLE 。
图1也可以在cmd下输入python ,但默认情况下python并没有添加到windows 环境变量中,导致在cmd下输入python的时候出现提示“ 'python'不是内部或外部命令,也不是可运行的程序或批处理文件。
”,windows 下可执行文件在运行时首先在当前目录下搜索,因为进入cmd 下默认路径一般为C:\Documents and Settings\Administrator> ,而在这个路径下是找不到python 的,所以提示出错,可以进入到python 安装目录下,然后执行python 就可以进入交互命令行模式下。
如果懒的每次都进入python 安装,此时需要将python 安装路径添加到系统变量中,然后windows 在执行命令的时候会去环境变量中查找路径,具体配置如图 2 所示,在Path 中添加python 的安装路径“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 以后版本中,print 不再是一个语句,而是一个函数,所以如果想要输出a,用法为print(a))。
在Tel中求1和10的和或者变量之间的加减乘除运算需要使用expr 命令,在python 则直接写表达式就可以了,如图 3 所示。
图3Python 很多功能都是靠模块实现的, 比如ftplib 模块负责ftp 功能的实现, math 模块囊括了基本数学公式,如果我们想要引用这些模块,需要使用命令import 模块名称,如import ftplib 和import math 。
如果想使用math 模块中的函数floor ,可以使用命令math.floor(28.5) ,语法为“模块. 函数”, 如果想要直接使用floor 函数,必须提前引用,命令为from math import floor , 那样就可以直接使用命令floor(28.5) 了。
如果觉得floor 这个函数名称太长了或者不好记忆,可以通过变量引用函数,如 f = math.floor ,这样变量 f 就充当了math.floor的功能了。
上面提到的模块ftplib 和math都是在python 安装的时候已经安装了,而接下来重点介绍的xlrd 、xlwt 、xlutils 模块都不是随python 安装的。
需要手动下载安装,第5节会详细介绍模块的安装。
当成功导入了某个模块后,可以通过函数dir ( 模块名) 查看这个模块包含哪些函数,如果对某个函数的作用不了解,可以通过help 函数查看,如help(math.pow)本文只是带领大家入门, python 的其他语法可以参考其它资料学习。
4 Tcl 对Excel 操作在使用python 对exeel 操作之前搜索过如何通过Tel 对exeel 操作, Tel 本身没有提供对excel 操作的命令,可以通过tcom 外部包来调用excel 的接口实现,但是个人感觉实现起来比较麻烦,msdn网站上虽然提供了excel的接口,但示例都是针对VB脚本语言写的,Tel如果想要调用的话还需要转换,如下是一段简单的Tcl 代码展示如何通过tcom 对excel 进行操作,但也花了本人不少时间琢磨。
# 加载tcom 包package require tcomset filename "F:/1.xls"#创建com实例,打开工作表,下面四句都是套路set excel [::tcom::ref createobject "Excel.Application"] set workbooks [$excel Workbooks]set workbook [$workbooks Open $filename]set worksheets [$workbook Worksheets]# "sheet1" 为sheet 的名称set worksheet [$worksheets Item "sheet1"]# 创建单元格对象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 [$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 也是通过导入外部模块来实现对excel 的操作,xlrd 负责对excel 的读取,xlwt 负责对excel 的写入,xlutils 依赖于xlrd 和xlwt ,可以复制excel 文件。
这三个包都可以在网站下载。
本文使用的xlrd 版本为0.8.0 从网上下载好xlrd 和xlwt 后,解压缩到C 下,此时在命令行下输入import xlrd 或者import xlwt ,会出现提示ImportError: No module named xlwt ,这表明还没有安装xlwt 模块。
python 导入一个模块的过程要求有一个叫做“路径搜索”的操作过程,即是在文件系统“预先设定的区域”查找模块文件以加载模块的过程。
这个预先设定的区域其实是python 搜索路径的一组目录。
这个目录保存在sys.path 中,如果你想知道python 导入模块时会在哪些路径搜索模块,你可以执行以下命令查看搜索路径目录:>>> import sys>>> sys.path在sys.path 中找到一个路径为,所以我们把模块解压缩到这个目录下。
命令>>>') 在最后添加一个目录,') 在第一位插入一个目录。
解压缩完成并放在正确目录后,在cmd 下进入package 当前目录,然后输入命令“ C:\Python2.7.5 ”,安装完成后可以输入import xlrd ,dir(xlrd) 来确认是否已经安装正确。
6 xlrd 简单使用方法>>>import xlrdxlrd.open_workbook("C:\Users\HuZhangdong\Desktop\ASB >>>excel解 xlwt 的用法。
7 xlwt 简单使用方法#-*- coding: UTF-8 -*- # import os,xlwt,datetime #data =xlwt.Workbook() # 新建测试床环境信息图 .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.cell_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 读取的操作了,接下给大家讲设置编码格式为 utf-8 导入模块一个Workbooksheet = data.add_sheet(u"sheet") # 新建一个sheet ,名称为'sheet' style1 = xlwt.XFStyle() # 创建格式style1style2 = xlwt.XFStyle()style3 = xlwt.XFStyle()#设置字体格式font1 = xlwt.Font() # 创建font1 = 'Times New Roman' # 字体为'Times New Roman'font1.bold = True # 加粗font1.colour_index = 2 # 字体颜色为红色,0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan# 设置上标font1.height = 0x190 #0x190 是16 进制,换成10进制为400,然后除以20,就得到字体的大小为20style1.font = font1 # 将创建的font1 字体格式应用到style1 上font2 = xlwt.Font() # 创建font2 = "Algerian" # 字体为'Algerian'font2.colour_index = 3 # 字体颜色为绿色斜体font2.italic = True #font2.struck_out = True # 删除线字体大小为30font2.height = 0x258 #上style2.font = font2 # 将创建的font2 字体格式应用到style2#设置列宽sheet.col(0).width = 6000sheet.col(1).width = 12000 sheet.set_col_default_width(2) #设置单元格对齐方式alignment = xlwt.Alignment() # 创建alignment style3.alignment = alignment #应用alignment 到style3 上#插入时间style3.num_format_str = 'YYYY-MM-DD HH:MM:SS' # 设置时间格式#设置单元格背景颜色pattern_yellow = xlwt.Pattern() # 创建pattern_yellowpattern_yellow.pattern_fore_colour = 5 # 设置填充颜色为yellow 黄色style1.pattern = pattern_yellow # 把设置的pattern 应用到style3 上pattern_red = xlwt.Pattern() # 创建pattern_redpattern_red.pattern_fore_colour = 2 # 设置填充颜色为red 红色style2.pattern = pattern_red # 把设置的pattern 应用到style4 上#设置单元格边框borders = xlwt.Borders() # gh 0x0D. borders.left_colour = 0x10 # borders.right_colour = 0x20创建bordersborders.top_colour = 0x30borders.bottom_colour = 0x40设置左边框线条颜色style1.borders = borders # 将borders 应用到style1 上sheet.write(3, 0, 'HuZhangdong', style1) #'HuZhangdong' ,格式引用 style1sheet.write(4, 0, 'YinMengran' , style2) #'YinMengran' ,格式引用 style2data.save(u'e:\\3.xls') #函数 xlwt.Workbook() 只能新建一个 excel 文档,不能打开一个已经存在的 文档,下一章会讲解如何通过 xlutils 修改一个已经存在的 excel 文档。