99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解
python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解
2018-04-17
收藏

python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解

本篇文章將介紹:
xlwt 常用功能
xlrd 常用功能
xlutils 常用功能
xlwt寫Excel時(shí)公式的應(yīng)用
xlwt寫入特定目錄(路徑設(shè)置)
xlwt Python語(yǔ)言中,寫入Excel文件的擴(kuò)展工具??梢詫?shí)現(xiàn)指定表單、指定單元格的寫入。支持excel03版到excel2013版。使用時(shí)請(qǐng)確保已經(jīng)安裝python環(huán)境
xlrd Python語(yǔ)言中,讀取Excel的擴(kuò)展工具。可以實(shí)現(xiàn)指定表單、指定單元格的讀取。使用時(shí)請(qǐng)確保已經(jīng)安裝python環(huán)境。
NOTICE:
xlwt對(duì)Excel只能進(jìn)行只寫操作
xrrd對(duì)Excel只能進(jìn)行只讀操作
此外,還有xlutils.copy可以實(shí)現(xiàn)Excel的復(fù)制再編輯。
1.python寫excel — xlwt常用功能
A.準(zhǔn)備工作
安裝xlwt :在終端中輸入pip install xlwt或者easy_install xlwt
引入xlwt包 :    
import xlwt # 寫
B.基礎(chǔ)教程
新建工作簿&增加sheet: 新建一個(gè)工作簿,然后往里添加sheet    
f = xlwt.Workbook() # 創(chuàng)建工作簿
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)
#一個(gè)excel表格中可以添加多個(gè)sheet
往sheet中寫入內(nèi)容: sheet.write函數(shù)可以傳三個(gè)參數(shù)
第i(參數(shù)1)第j(參數(shù)2)列存入內(nèi)容(參數(shù)3)    
sheet1.write(i, j, '第i行第j列存放此內(nèi)容', style)
# 這條語(yǔ)句實(shí)現(xiàn)的功能就是往第i行第j列存第三個(gè)參數(shù)的內(nèi)容,第四個(gè)參數(shù)是樣式(如字體,背景),可以不傳第四個(gè)參數(shù)。
合并單元格并寫入內(nèi)容:    
sheet1.write_merge(x, x + m, y, y + n, '內(nèi)容', style)
# 這條y語(yǔ)句表示將[x:x+m]行[y:y+n]列的矩陣合并成一個(gè)單元格。存放第五個(gè)參數(shù)的內(nèi)容,同理,style參數(shù)可以不傳參

最后使用f.save(‘demo')
就可以把f保存到excel了
C.實(shí)戰(zhàn)

我們可以先新建一個(gè)工作簿,然后往里添加兩個(gè)sheet,然后查看效果


#coding=utf-8
importxlwt
 
f=xlwt.Workbook()# 創(chuàng)建工作簿
sheet1=f.add_sheet(u'葡小萄', cell_overwrite_ok=True)
sheet2=f.add_sheet(u'小葡萄', cell_overwrite_ok=True)
 
f.save('xlwt_tutorial')



效果如下,發(fā)現(xiàn)表格xlwt_tutorial中有兩個(gè)sheet。

我們開(kāi)始往sheet中寫入內(nèi)容,不傳入style參數(shù)

先只使用write函數(shù)



#coding=utf-8
importxlwt
 
f=xlwt.Workbook()# 創(chuàng)建工作簿
sheet1=f.add_sheet(u'葡小萄', cell_overwrite_ok=True)
sheet2=f.add_sheet(u'小葡萄', cell_overwrite_ok=True)
 
row=0
temp=[u'姓名',u'年齡',u'學(xué)校',u'專業(yè)']
forpos,vinenumerate(temp):
 sheet1.write(row,pos,v)
row+=1
sheet1.write(row,0,u'葡萄')
sheet1.write(row,1,18)
sheet1.write(row,2,u'北京電影學(xué)院')
row+=1
sheet1.write(row,0,u'椰子')
sheet1.write(row,1,20)
sheet1.write(row,2,u'帝國(guó)國(guó)王科技大學(xué)')
 
f.save('xlwt_tutorial')



效果如下,我們建立了一個(gè)3行4列的表格。(write函數(shù)行和列值都是從0開(kāi)始的)

下面我們使用write_merge函數(shù)來(lái)合并單元格并寫入

在f.save之前添加一行代碼



sheet1.write_merge(1,2,3,3,u'漢語(yǔ)言文學(xué)')


效果如下,將第2-3行第4列合并


2.pythonxd讀excel —xlrd常用功能
A.準(zhǔn)備工作
安裝xlrd :在終端中輸入pip install xlrd或者easy_install xlrd
引入xlrd包 :    
import xlrd # 讀

B.基礎(chǔ)教程&實(shí)戰(zhàn)

打開(kāi)一個(gè)Excel,然后輸出所有sheet的名字    
#coding=utf-8
 
import xlrd
import uniout
 
f = xlrd.open_workbook(r'xlwt_tutorial')
print f.sheet_names()

輸出:[u'葡小萄', u'小葡萄']

得到表格里的所有的sheet    
for i in range(len(f.sheet_names())):
  sheet1 = workbook.sheet_by_index(i)

得到sheet中的內(nèi)容    
f = xlrd.open_workbook(r'xlwt_tutorial')
sheet1 = f.sheet_by_index(0) #打開(kāi)第一個(gè)sheet
sheet2 = f.sheet_by_name(u'小葡萄') #打開(kāi)名字為小葡萄的sheet
 
#輸出sheet的名稱,行數(shù),列數(shù)
print sheet1.name,sheet1.nrows,sheet1.ncols
print sheet2.name,sheet2.nrows,sheet2.ncols

輸出為:
葡小萄 3 4
小葡萄 0 0
.    
print sheet1.row_values(1) #獲取第二行內(nèi)容
print sheet1.col_values(2) #獲取第三列內(nèi)容

輸出為:
[u'葡萄', 18.0, u'北京電影學(xué)院', u'漢語(yǔ)言文學(xué)']
[u'學(xué)校', u'北京電影學(xué)院', u'帝國(guó)國(guó)王科技大學(xué)']
.


# 獲取單元格內(nèi)容
printsheet1.cell(1,0).value
 
# 獲取單元格內(nèi)容的數(shù)據(jù)類型
printsheet1.cell(1,1).ctype
 
#ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error



輸出為:
葡萄
2

3.xlutils 常用功能

A.準(zhǔn)備工作

安裝xlutils :在終端中輸入pip install xlutils或者easy_install xlutils
引入xlutils包 :



importxlutils



B.xlutils中copy功能

我們可能會(huì)遇到一個(gè)問(wèn)題,想對(duì)一個(gè)存儲(chǔ)好的Excel進(jìn)行編輯。
但是xlrd是只讀模式,不能進(jìn)行編寫。
而xlwt是只寫模式,不能讀入Excel文件進(jìn)行編輯。
我們可以采用xlrd打開(kāi)一個(gè)文檔,后采用xlutils中copy功能把文檔拷貝,然后進(jìn)行編輯即可。



importxlrd
fromxlutils.copyimportcopy
 
f=xlrd.open_workbook(r'xlwt_tutorial')
wb=copy(f)# 將f拷貝到wb
 
sheet1=wb.get_sheet(0)# 打開(kāi)sheet
printsheet1.name
sheet1.write(3,0,'change')
 
wb.save('xlwt_tutorial')


輸出為:
葡小萄
輸出的表格已經(jīng)改變。

PS: 可以看到第二行第四列和第三行第四列合并格已經(jīng)在COPY的時(shí)候被毀掉了。

4.xlwt寫Excel時(shí)公式的應(yīng)用

我們寫用xlwt寫一個(gè)表格



#coding=utf-8
importxlwt
 
f=xlwt.Workbook()# 創(chuàng)建工作簿
sheet1=f.add_sheet(u'得分統(tǒng)計(jì)', cell_overwrite_ok=True)
 
mdict={"monkey":{"writing":80,"reading":60,"speaking":70,"listening":60},
"grape":{"writing":100,"reading":80,"speaking":70,"listening":60}}
 
sheet1.write(0,0,u'得分統(tǒng)計(jì)')
sheet1.write(1,0,u'書法得分')
sheet1.write(2,0,u'閱讀得分')
sheet1.write(3,0,u'演講得分')
sheet1.write(4,0,u'聽(tīng)力得分')
temp=['writing','reading','speaking','listening']
 
forpos,nameinenumerate(mdict):
 sheet1.write(0,pos+1,name)
 forp,vinenumerate(temp):
  sheet1.write(p+1,pos+1,mdict[name][v])
 
f.save('得分統(tǒng)計(jì)')



打開(kāi)表格為:

我們現(xiàn)在想做的是統(tǒng)計(jì)grape的總分和monkey的總分:
在f.save之前加入代碼:


sheet1.write(5,0,u'總分統(tǒng)計(jì)')

foriinrange(len(mdict)):
 forstr=chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5'
 printforstr
 sheet1.write(5,i+1,xlwt.Formula(forstr))

輸出為:
B2+B3+B4+B5
C2+C3+C4+C5
打開(kāi)表格為:


5.xlwt寫入特定目錄(路徑設(shè)置)

由于代碼分層的緣故,使代碼整體框架優(yōu)美。
我們需要把文件寫入到特定目錄下。
但是由于xlwt中沒(méi)有直接寫入到特定目錄的函數(shù)。
因此使用shutil.move函數(shù)來(lái)把文件MOV到特定目錄下:

#coding=utf-8
importxlwt
importos
importshutil
 
path='../sheet/'
isExists=os.path.exists(path)# 判斷目錄是否存在
 
ifnotisExists:# 如果目錄不存在,新建目錄
 os.makedirs(path)
 
f=xlwt.Workbook()# 創(chuàng)建工作簿
sheet1=f.add_sheet(u'得分統(tǒng)計(jì)', cell_overwrite_ok=True)
 
mdict={"monkey":{"writing":80,"reading":60,"speaking":70,"listening":60},
"grape":{"writing":100,"reading":80,"speaking":70,"listening":60}}
 
sheet1.write(0,0,u'得分統(tǒng)計(jì)')
sheet1.write(1,0,u'書法得分')
sheet1.write(2,0,u'閱讀得分')
sheet1.write(3,0,u'演講得分')
sheet1.write(4,0,u'聽(tīng)力得分')
temp=['writing','reading','speaking','listening']
 
forpos,nameinenumerate(mdict):
 sheet1.write(0,pos+1,name)
 forp,vinenumerate(temp):
  sheet1.write(p+1,pos+1,mdict[name][v])
 
sheet1.write(5,0,u'總分統(tǒng)計(jì)')
foriinrange(len(mdict)):
 forstr=chr(65+i+1)+'2+'+chr(65+i+1)+'3+'+chr(65+i+1)+'4+'+chr(65+i+1)+'5'
 printforstr
 sheet1.write(5,i+1,xlwt.Formula(forstr))
 
f.save('得分統(tǒng)計(jì)')
shutil.move(u'得分統(tǒng)計(jì)', path)

效果圖:

總結(jié)

以上就是本文關(guān)于python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }