摘要:
- 利用xlrd读取excel
- 利用xlwt写excel
- 利用xlutils修改excel
利用xlrd读取excel
先需要在命令行中pip install xlrd;读取xls文件的流程为:
加载文件->选中第几个表格->按先行后列的顺序读
通用demo
1
2
3
4
5
6
7
|
import xlrd
filename = "test.xls" #文件路径
wb = xlrd.open_workbook(filename) #加载这个xls文件
sh = wb.sheet_by_index( 0 ) #选中第1个表格
rows = sh.nrows #rows为该表格的行数
for i in range ( 1 ,rows): #从第二行开始按行读取
title = sh.cell(i, 0 ).value #取第i+1行,第1列的数据
|
diy功能
1
2
3
4
5
6
7
8
9
|
根据列名获取内容的函数
def get_col_index(name,workbook,sheet):
for i in range (sheet.ncols):
name2 = sheet.cell( 0 ,i).value
print (name2)
if name2 = = name:
return i
return - 1
sheet.cell( 1 ,get_col_index( "创建时间" )).value
|
再拓展一点:
1
2
3
4
5
6
7
8
|
sh = wb.sheet_by_name(sheetname) #通过表格名称选中表格
print (wb.sheet_names()) #打印该xls文件的所有表格名称
sh.row(i) #获得第i+1行的所有数据组成的list
ncols = sh.ncols #获得该表格的所有列数
sh.row_values(rowx, start_colx = 0 , end_colx = None ) #获取第rowx+1行的某几列的数据并组成的list
sh.col(colx, start_rowx = 0 , end_rowx = None ) #获取第colx+1列的某几行的数据并组成的list
sh.cell(i,j).value #获取第i+1行第j+1列的数据
sh.cell(i,j).ctype #获取第i+1行第j+1列的数据类型
|
注意date类型
说起数据类型,补充一点,xlrd读取xls文件单元格的数据类型有五种,数字与类型的对应关系为:
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
当单元格某个值为date类型时,不加处理输出的是一个浮点数,此时需要判断ctype并进行一次转换:
1
2
3
4
|
from xlrd import xldate_as_tuple
cell = sh.cell(i, 10 ).ctype
if cell.ctype = = 3 :
date = datetime( * xldate_as_tuple(cell.value, 0 ))
|
利用xlwt写exce
先需要在命令行中pip install xlwt;写xls文件的流程为:
加载文件->选中第几个表格->按先行后列的顺序读
通用demo
1
2
3
4
5
|
import xlwt
file = xlwt.Workbook() #新建个文件
sheet = file .add_sheet( 'test_sheet0' ,cell_overwrite_ok = True ) #新建个表格,指定表名以及是否可覆盖写
sheet.write(i,j,value) #在第i+1行和第j+1列写value(i、j从0开始)
file .save( "test_xls.xls" ) #保存成xls文件并指定文件名
|
更多功能
1
2
3
4
5
6
7
8
9
10
11
12
|
#设置某列的宽度
sheet.col( 0 ).width = 200
#写日期
style = xlwt.XFStyle()
style.num_format_str = 'D-MMM-YY'
worksheet.write( 0 , 0 , datetime.datetime.now(), style)
#写公式
sheet.write( 1 , 1 , xlwt.Formula( 'SUM(A1,B1)' ))
#合并单元格的写
sheet.write_merge( 0 , 0 , 0 , 3 , 'First Merge' )
#ps:
#write_merge(x, x + h, y, w + y, value, sytle) x和y表示当前行列,h和w为要合并的行数和列数
|
更炫酷一点
既然是写,何不来点style:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
style = xlwt.XFStyle()
#修改字体:
font = xlwt.Font() #为样式创建字体
font.name = 'Times New Roman' #字体名称
font.bold = True #黑体
font.colour_index = 2 #修改字的颜色
font.underline = True #下划线
style.font = font #使用到样式中
sheet.write( 0 , 1 , "编号" ,style)
#修改单元格背景色
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5 #色号,可以在源代码中看到色号和颜色的对应关系
style = xlwt.XFStyle()
style.pattern = pattern
sheet.write( 0 , 2 , "编号" ,style)
|
利用xlutils修改excel
修改excel文件的流程为:
将xlrd加载的xls文件(xlrd对象)复制为xlwt对象,然后用xlwt对象操作excel
demo
1
2
3
4
5
6
7
8
9
10
11
12
|
import xlrd
import pymysql
from xlrd import open_workbook
from xlutils.copy import copy
import xlwt
file_name = "test_update.xls"
workbook = xlrd.open_workbook(file_name)
sheet = wb.sheet_by_index( 0 )
workbook_update = copy(workbook)
sheet_update = workbook_update.get_sheet( 0 )
sheet_update.write(i,j,value)
workbook_update.save(file_name)
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/lk7688535/article/details/80986890