包
python操作excel的包有不少,这次记录xlrd、xlwt、xlutils三个包的使用。
从名字可以看出来,
xlrd用于excel的读取,
xlwt用于excel的写入。
xlutils呢,用于xlrd和xlwt的转换。
使用流程
你希望在一个有内容的excel中写入东西,那么需要先用xlrd打开excel,然后用xlutils将xlrd转换为xlwt,还是挺麻烦的。
代码示例
现在有两张学生名单表,记录了选修xx课的学生名单,t1.xls,t2.xls。t2是开学之初选了这门课的学生吗名单,t2是学期末加上补选学生的最终名单表。
平时作业情况都记录在t2中,现在希望将t2的信息写入t1中,由于两个表的学生信息并不一一对应(t1包含t2),且学生人数超过100人,一个一个粘贴辅助非常麻烦,于是使用python来自动化操作。
import xlrd,xlwt
from xlutils.copy import copy
t1 = xlrd.open_workbook("t1.xls") #打开t1
t2 = xlrd.open_workbook("t2.xls") #打开t2
t1_sheet = t1.sheets()[0] #获取工作空间
t2_sheet = t2.sheets()[0]
t1_rows = t1_sheet.nrows #获取各个表的总行数
t2_rows = t2_sheet.nrows
n = 22 #平时作业占的总列数,一共有22次平时作业,占22列
t1_w = copy(t1_sheet) #使用xlutils的copy函数,将t1从读取模式转换为写入模式
t1_ws = t1_w .get_sheet(0) #获取工作空间
for i in range(t1_rows): #遍历整个t1表,若t1表中的学生学号存在于t2表中,则将t2的作业情况写入t1中
if(i>0):
for j in range(t2_rows): #遍历t2
if(t2_sheet.cell(j,2).value == t1_sheet.cell(i,2).value): #若找到该学生,则将信息写入t1(学号索引为2)
for k in range(n):
t1_ws.write(i,7+k,t2_sheet.cell(j,5+k).value) #写入操作(将t2中5-27列的信息写入t1表7-29列中)
t1_w .save('demo.xls') #记住保存,不然以上操作不会记录