本文主要记录一下Python处理excel表格的一些常用包,包括读取模块xlrd,写入模块xlwt和xlsxwriter
1. xlrd
note:
- xlrd可以读取xls(2003)、xlsx(2007及以上)
- xls的行数限制为65536,最大列数是256列;xlsx的行数限制为1048576,最大列数是1638列
基本操作:
1 | # 打开Excel表格 |
python读取excel中单元格类型为date(有的日期是以string格式存储,无需用此方式读取,依照上述基本操作);date类型的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式,先判断表格的ctype,如果等于3,则用时间格式处理:
if sheet.cell(row,col).ctype == 3:
date_value = xlrd.xldate_as_tuple(sheet.cell_value(rows,3),workbook.datemode) # (1992, 2, 22, 0, 0, 0)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d') # '1992/02/22'
读取合并单元格的内容(合并的单元格只是合并的第一个单元格的有值,其它的为空;只能获取合并单元格的第一个cell的行列索引,才能读到值;合并行单元格读取行的第一个索引,合并列单元格读取列的第一个索引):
1 | print sheet2.col_values(4)[1] # 好朋友 |
获取合并单元格的位置:读取文件的时候需要将formatting_info参数设置为True,默认是False
1 | workbook = xlrd.open_workbook(r'F:\demo.xlsx',formatting_info=True) |
merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1, 3, 4, 5)的含义是:第2到3行(不包括第4行)合并,(7, 8, 2, 5)的含义是:第3到5列合并。获取merge_cells返回的row和col低位的索引即可1
2
3
4
5
6
7
8
9print sheet2.cell_value(1,4) #(1, 3, 4, 5) 好朋友
print sheet2.cell_value(3,4) #(3, 6, 4, 5) 同学
print sheet2.cell_value(7,2) #(7, 8, 2, 5) 暂无
merge = []
for (rlow,rhigh,clow,chigh) in sheet2.merged_cells: # [(7, 8, 2, 5), (1, 3, 4, 5), (3, 6, 4, 5)]
merge.append([rlow,clow])
for index in merge: # [[7, 2], [1, 4], [3, 4]]
print sheet2.cell_value(index[0],index[1])
2. xlwt 与 xlsxwriter
- xlwt只能写.xls(2003)文件,xlsxwriter只能写.xlsx(2007及以后)表格
( 1 ) xlwt
1 | style0 = xlwt.easyxf('font: name 等线, color-index black, bold off, height 220') |
( 2 ) xlsxwriter
1 | workbook = xlsxwriter.Workbook('hello.xlsx') # 建立文件 |