python_excel
1. xlrd, xlwt, xlutils的关系
Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读 取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而 xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。
2. xlrd, xlwt, xlutils的安装过程,以xlrd为例()
(1)http://pypi.python.org/pypi/xlrd下载xlrd-0.7.7.tar.gz。
(2)把下载的.gz包解压,如我把它们解压到F:DOWNLOAD下。
(3)在win7下打开cmd,在命令行输入F:,切换到F盘,再cd DOWNLOAD\xlrd-0.7.7,再输入 setup.py install.装完了。
xlwt的下载地址:https://pypi.python.org/pypi/xlwt
xlutils的下载地址:https://pypi.python.org/pypi/xlutils
3. xlrd, xlwt, xlutils三个包的API参考地址
http://pypi.python.org/pypi/xlrd
http://pypi.python.org/pypi/xlwt
http://pypi.python.org/pypi/xlutils
4. 使用xlrd读Excel
open_workbook()打开指定的Excel文件,返回一个Book对象。
通过Book对象可以得到各个Sheet对象(一个Excel文件可以有多个Sheet,每个Sheet就是一张表格)。
Book.nsheets返回Sheet的数目。
Book.sheets()返回所有Sheet对象的list。
Book.sheet_by_index(index)返回指定索引处的Sheet。相当于Book.sheets()[index]。
Book.sheet_names()返回所有Sheet对象名字的list。
Book.sheet_by_name(name)根据指定Sheet对象名字返回Sheet。
通过Sheet对象可以获取各个单元格,每个单元格是一个Cell对象。
Sheet.name返回表格的名称。
Sheet.nrows返回表格的行数。
Sheet.ncols返回表格的列数。
Sheet.row(r)获取指定行,返回Cell对象的list。
Sheet.row_values(r)获取指定行的值,返回list。
Sheet.col(c)获取指定列,返回Cell对象的list。
Sheet.col_values(c)获取指定列的值,返回list。
Sheet.cell(r, c)根据位置获取Cell对象。
Sheet.cell_value(r, c)根据位置获取Cell对象的值。
Cell.value返回单元格的值。
5. 使用xlwt写Excel
Workbook()是构造函数,返回一个工作簿的对象。
Workbook.add_sheet(name)添加了一个名为name的表,类型为Worksheet。
Workbook.get_sheet(index)可以根据索引返回Worksheet(前提是已经添加到Workbook中了)。
Worksheet.write(r, c, vlaue)是将vlaue填充到指定位置。
Worksheet.row(n)返回指定的行。
Row.write(c, value)在某一行的指定列写入value。
Worksheet.col(n)返回指定的列。
6. 使用xlutils的copy函数
from xlutils.copy import copy
wb = copy(rb)
rb是xlrd对应的读workbook,wb则对应xlwt对应的写workbook,wb可进行写的所有操作
7. 示例
【设计思想】
(1) 新增或者打开一个已存在的excel表格,excel表格存在一个工作本(Sheet1)
(2) 向excel表格中加入列名
(3) 向excel表格中加入每列的值
【代码】
#-*- coding:utf-8 -*-
import xlrd
import xlwt
import os
from xlutils.copy import copy #excel表格只存在一张工作表,每次保存之后,需要再重新打开一次excel表格
class OperateExcel(): def __init__(self, filePath):
self.filePath = filePath def open_excel(self):
"""打开excel"""
if not os.path.exists(self.filePath):
workbook = xlwt.Workbook("utf-8")
sheet = workbook.add_sheet(u"Sheet1")
workbook.save(filePath)
self.rb = xlrd.open_workbook(filePath)
self.rs = self.rb.sheet_by_name(u"Sheet1")
self.wb = copy(self.rb)
self.ws = self.wb.get_sheet(0) def set_col_name(self, colNames):
"""先建立excel表格的列"""
colNum = len(colNames)
for colNo in range(0, colNum):
self.ws.write(0, colNo, colNames[colNo]) self.save_excel()
self.open_excel() def get_colnumber_by_colname(self, colName):
"""获取某一列的列号"""
len = self.rs.row_len(0)
for colNo in range(0, len):
if self.rs.cell_value(0, colNo) == colName:
return colNo print "excel表中不存在列名:%s" % colName
return -1 def write_excel(self, rowValue):
"""向excel表格的默认追加内容""" keys = rowValue.keys()
for key in keys:
self.ws.write(self.rs.nrows, self.get_colnumber_by_colname(key), rowValue.get(key)) self.save_excel()
self.open_excel() def save_excel(self):
"""关闭excel"""
self.wb.save(self.filePath) if __name__ == "__main__":
filePath = u"E:/test.xls"
colName = (u"姓名",u"年龄",u"性别",u"学历") rowValuesList = list()
rowValue1 = {u"姓名":u"张三", u"年龄":u"", u"性别":u"男", u"姓名":u"本科" }
rowValue2 = {u"姓名":u"李四", u"年龄":u"" }
rowValue3 = {u"姓名":u"王五", u"性别":u"男" }
rowValuesList.append(rowValue1)
rowValuesList.append(rowValue2)
rowValuesList.append(rowValue3) excel = OperateExcel(filePath)
excel.open_excel()
excel.set_col_name(colName)
for rowValue in rowValuesList:
excel.write_excel(rowValue)
excel.save_excel()
8. 备注
描述内容,都来源于网络
python_excel的更多相关文章
- Python_Excel文件操作
''' 使用xlrd模块写入Excel文件 ''' import xlrd book=xlrd.open_workbook(r'/Users/c2apple/Desktop/纪录/测试报告/张涛文件盘 ...
- day03深浅拷贝、文件操作和函数初识
一.赋值.浅拷贝与深拷贝 直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法, ...
- python将Excel文件内容导入Mysql数据
为了方便起见,将所有字段类型设置为str,理解mysql的语法这个玩意贼简单 # _*_ coding:utf-8 _*_import pandas as pd #先装个pandas ,pip ins ...
随机推荐
- fscanf使用
函数名: fscanf 简述:C语言中基本的文件操作 功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束.这与fgets有区别,fgets遇到空格不结束. 简单的说 ...
- EventBus 一
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- 意法STM32F1系列MCU单片机解密芯片破解复制
意法STM32F1系列MCU单片机解密芯片破解复制 STM32F1系列MCU芯片解密: STM32F100解密 | STM32F101解密 | STM32F102解密 | STM32F103解密 | ...
- 数据库密码爆破HexorBase
数据库密码爆破HexorBase 数据库服务是服务器上最常见的一类服务.由于数据库保存大量的敏感信息,所以它的安全非常重要.测试数据库服务安全的重要方式,就是检查口令的强壮度. Kali Li ...
- js实现复制到剪贴板功能,兼容所有浏览器
http://www.cnblogs.com/PeunZhang/p/3324727.html https://github.com/zeroclipboard/ZeroClipboard 复制链接到 ...
- Linux下定时任务配置-crontab
实际中经常有一些任务需要定期执行,人工操作比较麻烦,如果定时执行将会省去很多人力,还可以在一些资源占用不多的时间段执行,linux下crontab命令就实现了这一便捷的功能,实现脚本的自动化运行. 常 ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- 归一化交叉相关Normalization cross correlation (NCC)
归一化交叉相关Normalization cross correlation (NCC) 相关系数,图像匹配 NCC正如其名字,是用来描述两个目标的相关程度的,也就是说可以用来刻画目标间的相似性.一般 ...
- MySQL、mybatis的查询条件-时间段
1.配置文件中的写法 <if test="startTime !=null and startTime !='' "> <![CDATA[ and createT ...
- python实现之决策树
一.Predict survival on the Titanic 使用泰坦尼克号上的乘客数据,对乘客是否存活进行预测 1.观察数据集合 可能遇到的问题 训练集和测试集特征值得属性并不重合.连续属性和 ...