包
python操作excel的包有不少凫碌,這次記錄xlrd、xlwt戳葵、xlutils三個(gè)包的使用躲株。
從名字可以看出來,
xlrd用于excel的讀取涤姊,
xlwt用于excel的寫入暇番。
xlutils呢,用于xlrd和xlwt的轉(zhuǎn)換思喊。
使用流程
你希望在一個(gè)有內(nèi)容的excel中寫入東西壁酬,那么需要先用xlrd打開excel,然后用xlutils將xlrd轉(zhuǎn)換為xlwt恨课,還是挺麻煩的舆乔。
代碼示例
現(xiàn)在有兩張學(xué)生名單表,記錄了選修xx課的學(xué)生名單剂公,t1.xls希俩,t2.xls。t2是開學(xué)之初選了這門課的學(xué)生嗎名單纲辽,t2是學(xué)期末加上補(bǔ)選學(xué)生的最終名單表颜武。
平時(shí)作業(yè)情況都記錄在t2中贫母,現(xiàn)在希望將t2的信息寫入t1中,由于兩個(gè)表的學(xué)生信息并不一一對應(yīng)(t1包含t2)盒刚,且學(xué)生人數(shù)超過100人,一個(gè)一個(gè)粘貼輔助非常麻煩绿贞,于是使用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 #獲取各個(gè)表的總行數(shù)
t2_rows = t2_sheet.nrows
n = 22 #平時(shí)作業(yè)占的總列數(shù),一共有22次平時(shí)作業(yè)籍铁,占22列
t1_w = copy(t1_sheet) #使用xlutils的copy函數(shù)涡上,將t1從讀取模式轉(zhuǎn)換為寫入模式
t1_ws = t1_w .get_sheet(0) #獲取工作空間
for i in range(t1_rows): #遍歷整個(gè)t1表,若t1表中的學(xué)生學(xué)號存在于t2表中拒名,則將t2的作業(yè)情況寫入t1中
if(i>0):
for j in range(t2_rows): #遍歷t2
if(t2_sheet.cell(j,2).value == t1_sheet.cell(i,2).value): #若找到該學(xué)生吩愧,則將信息寫入t1(學(xué)號索引為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') #記住保存,不然以上操作不會記錄