Python笔记:操作Excel表格

Python中使用xlrd、xlwt、xlutils库操作Excel表格

最近一个项目需要将行人识别结果输出到Excel表中
python读写excel文件要用到三个库:xlrd、xlwt、xlutils,首先下载安装这三个库。

1
2
3
4
cd ~
sudo pip install xlrd
sudo pip install xlwt
sudo pip install 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文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已,如下图:

"图片描述"

我将所有功能封装成类,下面是一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# coding=utf-8
import xlrd
import xlwt
from xlutils.copy import copy
import time
class Excel:
#------读取excel表格------
def Read_Excel(self,excelFile):
data = xlrd.open_workbook(excelFile)
table = data.sheets()[0]
nrows = table.nrows #行数
ncols = table.ncols #列数
for i in xrange(0,nrows):
rowValues= table.row_values(i) #某一行数据
for item in rowValues:
print item
#------往Excel单元格写内容,每次写一行sheet------
#------sheet-页签名称;row-行内容列表;rowIndex-行索引;isBold-true粗体/false普通字体------
def WriteSheetRow(self,sheet,rowValueList,rowIndex,isBold):
i = 0
style = xlwt.easyxf('font: bold 1')
for svalue in rowValueList:
#strValue = unicode(str(svalue), 'utf-8')
if isBold:
sheet.write(rowIndex, i, svalue, style)
else:
sheet.write(rowIndex, i, svalue)
i = i + 1
#初始化,写入表头
def __init__(self,excelFile):
self.excelFile = excelFile
self.wbk =xlwt.Workbook()
self.sheet = self.wbk.add_sheet('sheet1', cell_overwrite_ok=True)
headList = ['UUID', 'Sex', 'Enter_time', 'Leave_time', 'Exit', 'During_time', 'Date', 'First', 'Image_url', 'Remark']
rowIndex = 0
self.WriteSheetRow(self.sheet, headList, rowIndex, True) #写入表头
self.wbk.save(self.excelFile)
if __name__ == "__main__":
Save_File = Excel('/home/chaowei/hu.xls') #生成一个新excel
oldWb = xlrd.open_workbook('/home/chaowei/hu.xls')
table = oldWb.sheets()[0]
rows = table.nrows #获取行数
newWb = copy(oldWb) #复制excel文件内容
newWs = newWb.get_sheet(0)
valueList = []
Enter_time = time.time()
time.sleep(1)
Leave_time = time.time()
During_time = round((Leave_time-Enter_time), 1)
valueList.append(1)
valueList.append(u"男")
valueList.append(time.strftime('%H:%M:%S', time.localtime(Enter_time)))
valueList.append(time.strftime('%H:%M:%S', time.localtime(Leave_time)))
valueList.append('2')
valueList.append(During_time)
valueList.append(time.strftime('%Y-%m-%d', time.localtime(Enter_time)))
valueList.append('1')
valueList.append('www')
valueList.append('NULL')
for i in range(10):
newWs.write(rows, i, valueList[i])
newWb.save('/home/chaowei/hu.xls')