很可惜 T 。T 您現(xiàn)在還不是作者身份,不能自主發(fā)稿哦~
如有投稿需求,請(qǐng)把文章發(fā)送到郵箱tougao@appcpx.com,一經(jīng)錄用會(huì)有專人和您聯(lián)系
咨詢?nèi)绾纬蔀榇河鹱髡哒?qǐng)聯(lián)系:鳥哥筆記小羽毛(ngbjxym)
作者介紹
@阿星
互聯(lián)網(wǎng)資深數(shù)據(jù)分析師。
專注自動(dòng)化,醉心自動(dòng)化處理一切。
“數(shù)據(jù)人創(chuàng)作者聯(lián)盟”成員。
人生苦短,我用python。
相信做過報(bào)表的都對(duì)其煩不勝煩,周報(bào),月報(bào),季報(bào);一期期的報(bào)表,一次次的心酸淚,煩不勝煩。至于作者是怎么知道的,因?yàn)槲乙彩沁@個(gè)苦逼報(bào)表大軍的一員。
是這樣的,當(dāng)時(shí)參與公司的一個(gè)項(xiàng)目,我的任務(wù)是出報(bào)表,聽到任務(wù)時(shí),心中頓時(shí)樂開了花,嗚呼,這個(gè)簡(jiǎn)單,不就是出個(gè)報(bào)表嗎。So easy!可拿到歷史數(shù)據(jù)做成的表格頓時(shí)就不淡定了,一共是6個(gè)excel,每個(gè)excel是4-5個(gè)sheet,每個(gè)sheet里還有一堆花花綠綠的表格需要填寫,心里頓時(shí)不淡定了。完成整個(gè)任務(wù)之后,唯一感覺到的是,痛苦麻木。
之后通過網(wǎng)絡(luò)查詢資料,發(fā)現(xiàn)這個(gè)報(bào)表居然可以自動(dòng)化。接著花了一個(gè)星期的時(shí)間將報(bào)表自動(dòng)化,當(dāng)最后一個(gè)表格自動(dòng)化代碼寫完后,打開python,運(yùn)行程序,不得不說,一個(gè)字爽,再也不用一點(diǎn)一點(diǎn)的往sheet里弄數(shù)據(jù)了。
好了,接下來就為大家介紹今天的主角,xlwings。
先簡(jiǎn)單的看一下最終生成的表格效果吧。

下面我們就來看看這個(gè)案例吧。
以下是我們的原始數(shù)據(jù),一共以三個(gè)sheet,每個(gè)sheet,這三個(gè)sheet分別是原煤,原油,天然氣的數(shù)據(jù)。,指標(biāo)有產(chǎn)量當(dāng)期值,產(chǎn)量累計(jì)值,產(chǎn)量同比增長(zhǎng),產(chǎn)量累計(jì)增長(zhǎng)。
這些數(shù)據(jù)都是可以在國(guó)家統(tǒng)計(jì)局里下載出來的,有興趣的小伙伴可以自行下載。這個(gè)案例是讓我們將數(shù)據(jù)以上表格的形式輸出,指標(biāo)名稱是白色,單元格是黑色,此外數(shù)據(jù)中,紅色是大于平均值進(jìn)行得標(biāo)注,藍(lán)色是小于平均值進(jìn)行的標(biāo)注,表格字體為宋體。



首先呢,先導(dǎo)入相關(guān)庫,用python讀取原始數(shù)據(jù)。
import pandas as pd
import xlwings as xwraw_coal=pd.read_excel(r'統(tǒng)計(jì)局?jǐn)?shù)據(jù).xlsx',sheet_name='原煤')crude_oil=pd.read_excel(r'統(tǒng)計(jì)局?jǐn)?shù)據(jù).xlsx',sheet_name='原油')natural_gas=pd.read_excel(r'統(tǒng)計(jì)局?jǐn)?shù)據(jù).xlsx',sheet_name='天然氣')data=pd.merge(raw_coal,crude_oil,on='指標(biāo)')data=pd.merge(data,natural_gas,on='指標(biāo)')finally_data=data[['指標(biāo)','原煤產(chǎn)量當(dāng)期值(萬噸)','原油產(chǎn)量當(dāng)期值(萬噸)','天然氣產(chǎn)量當(dāng)期值(億立方米)']]print(finally_data)

就數(shù)據(jù)而言,已經(jīng)離我們要的最終表格差的不遠(yuǎn)了,就差一點(diǎn)點(diǎn)細(xì)節(jié)了。
是時(shí)候上我們的主角xlwings,xlwings能夠非常方便的讀寫excel文件中的數(shù)據(jù),最重要的是它可以對(duì)單元的格式進(jìn)行修改,可以與pandas無縫連接。
使用xlwings庫創(chuàng)建一個(gè)excel工作簿,在工作簿中創(chuàng)建一個(gè)表,表的名稱為finally_data。
然后將上面利用pandas整合的數(shù)據(jù)復(fù)制到finally_data表格中,當(dāng)然了將數(shù)據(jù)復(fù)制到表格中,在此看來有三種方式。
第一種:將一個(gè)數(shù)據(jù)看成一個(gè)單位,一個(gè)一個(gè)寫入創(chuàng)建的表格中,此時(shí)需要注意的是,每一個(gè)數(shù)據(jù)在excel的位置和在dataframe表格中的位置,以免出現(xiàn)錯(cuò)誤。
第二種:將一行數(shù)據(jù)看成一個(gè)單位,此時(shí)需要注意的是,每行數(shù)據(jù)的第一個(gè)在excel中的位置,參考復(fù)制粘貼形式。
第三種:將一張表的數(shù)據(jù)看成一個(gè)單位,本質(zhì)上與第二種沒什么區(qū)別,都是切片式傳入數(shù)據(jù),但是第三種方法是一二維數(shù)組的形式寫入。
wb=xw.Book()
sht=wb.sheets['Sheet1']
sht.name='finally_data'
columns=list(finally_data.columns)##得到列名
sht.range('A1').value = columns####在第一行復(fù)制列名
##第一種方式,將一個(gè)數(shù)據(jù)為單位,一個(gè)個(gè)寫入創(chuàng)建的表格中
# for row in range(2,11):
# for col in range(1,5):
# sht.range(row,col).value =finally_data.iloc[row-2,col-1]
##第二中方式,將一行數(shù)據(jù)為單位,一行一行的寫入創(chuàng)建的表格中
# for i in range(0,len(finally_data)):
# data_row=list(finally_data.iloc[i,:])
# row=i+2# row_clo='A'+str(row)
# sht.range(row_clo).value =data_row
#第三種方式,將一張表格為單位,直接寫入創(chuàng)建的表格中
finally_data1=finally_data.values
sht.range('A2').value = finally_data1
三者均能達(dá)到我們想要結(jié)果,各有優(yōu)劣,作者喜歡的是第三種。達(dá)到這一步的時(shí)候,剩下的就是對(duì)表格內(nèi)單元格的格式進(jìn)行修改了。
再對(duì)單元格進(jìn)行修改之前,我們要先求出來原煤產(chǎn)量當(dāng)期值,原油產(chǎn)量長(zhǎng)期值,天然氣產(chǎn)量當(dāng)期值,這三列數(shù)據(jù)中大于平均值和小于平均值的數(shù)據(jù)在Dataframe的位置,同時(shí)得出該數(shù)據(jù)在excel的位置,方便在進(jìn)行單元格的格式修改。
describe=finally_data.describe()
avg=list(describe.loc['mean',:])
##計(jì)算大于均值的數(shù)在excel的位置red_原煤=list(finally_data.index[finally_data['原煤產(chǎn)量當(dāng)期值(萬噸)']>avg[0]])red_position1=['B'+str(i+2) for i in red_原煤 ]red_原油=list(finally_data.index[finally_data['原油產(chǎn)量當(dāng)期值(萬噸)']>avg[1]])red_position2=['C'+str(i+2) for i in red_原油 ]red_天然氣=list(finally_data.index[finally_data['天然氣產(chǎn)量當(dāng)期值(億立方米)']>avg[2]])red_position3=['D'+str(i+2) for i in red_天然氣 ]red=red_position1+red_position2+red_position3##計(jì)算小于均值的數(shù)在excel的位置blue_原煤=list(finally_data.index[finally_data['原煤產(chǎn)量當(dāng)期值(萬噸)']blue_position1=['B'+str(i+2) for i in blue_原煤 ]blue_原油=list(finally_data.index[finally_data['原油產(chǎn)量當(dāng)期值(萬噸)']blue_position2=['C'+str(i+2) for i in blue_原油 ]blue_天然氣=list(finally_data.index[finally_data['天然氣產(chǎn)量當(dāng)期值(億立方米)']blue_position3=['D'+str(i+2) for i in blue_天然氣 ]blue=blue_position1+blue_position2+blue_position3print(red)print(blue
終于所有的條件全部滿足了,最后可以對(duì)表格的格式進(jìn)行修改了。
首先就是將字體全部改成宋體同時(shí)在表格中有數(shù)據(jù)的區(qū)域加上邊框。
#區(qū)域內(nèi)字體改變成宋體,加上邊框 a_range = f'A1:D10'#區(qū)域 sht.range(a_range).api.Font.Name='宋體' #字體 sht.range(a_range).api.Borders(8).LineStyle = 1 #上邊框 sht.range(a_range).api.Borders(9).LineStyle = 1 #下邊框 sht.range(a_range).api.Borders(7).LineStyle = 1 #左邊框 sht.range(a_range).api.Borders(10).LineStyle = 1 #右邊框 sht.range(a_range).api.Borders(12).LineStyle = 1 #內(nèi)橫邊框 sht.range(a_range).api.Borders(11).LineStyle = 1 #內(nèi)縱邊框
第二步就是將第一行的字體變成白色,單元格填充黑色。
#區(qū)域內(nèi)字體顏色成白色,單元格變成黑色 b_range = f'A1:D1'#區(qū)域第一行 sht.range(b_range).api.Font.Color = 0xffffff sht.range(b_range).color=(0, 0, 0)
最后一步就是將大于均值的數(shù)據(jù)字體改成紅色,小于均值的字體改成藍(lán)色。然后在進(jìn)行保存。
#######在excel 表格里改變字體顏色
for i in red:
sht.range(i).api.Font.Color = 0x0000ff
for i in blue:
sht.range(i).api.Font.Color = 0xFF0000
wb.save('結(jié)果數(shù)據(jù).xlsx')
wb.close()
結(jié)果出來后,符合我們的要求。本次案例完整結(jié)束,當(dāng)然了真正入手一個(gè)完整的自動(dòng)化報(bào)表項(xiàng)目,遠(yuǎn)不止這么簡(jiǎn)單,中間還會(huì)出現(xiàn)一下別的問題。如果想要了解更多請(qǐng)持續(xù)關(guān)注.
-END-
本文為作者獨(dú)立觀點(diǎn),不代表鳥哥筆記立場(chǎng),未經(jīng)允許不得轉(zhuǎn)載。
《鳥哥筆記版權(quán)及免責(zé)申明》 如對(duì)文章、圖片、字體等版權(quán)有疑問,請(qǐng)點(diǎn)擊 反饋舉報(bào)
我們致力于提供一個(gè)高質(zhì)量?jī)?nèi)容的交流平臺(tái)。為落實(shí)國(guó)家互聯(lián)網(wǎng)信息辦公室“依法管網(wǎng)、依法辦網(wǎng)、依法上網(wǎng)”的要求,為完善跟帖評(píng)論自律管理,為了保護(hù)用戶創(chuàng)造的內(nèi)容、維護(hù)開放、真實(shí)、專業(yè)的平臺(tái)氛圍,我們團(tuán)隊(duì)將依據(jù)本公約中的條款對(duì)注冊(cè)用戶和發(fā)布在本平臺(tái)的內(nèi)容進(jìn)行管理。平臺(tái)鼓勵(lì)用戶創(chuàng)作、發(fā)布優(yōu)質(zhì)內(nèi)容,同時(shí)也將采取必要措施管理違法、侵權(quán)或有其他不良影響的網(wǎng)絡(luò)信息。
一、根據(jù)《網(wǎng)絡(luò)信息內(nèi)容生態(tài)治理規(guī)定》《中華人民共和國(guó)未成年人保護(hù)法》等法律法規(guī),對(duì)以下違法、不良信息或存在危害的行為進(jìn)行處理。
1. 違反法律法規(guī)的信息,主要表現(xiàn)為:
1)反對(duì)憲法所確定的基本原則;
2)危害國(guó)家安全,泄露國(guó)家秘密,顛覆國(guó)家政權(quán),破壞國(guó)家統(tǒng)一,損害國(guó)家榮譽(yù)和利益;
3)侮辱、濫用英烈形象,歪曲、丑化、褻瀆、否定英雄烈士事跡和精神,以侮辱、誹謗或者其他方式侵害英雄烈士的姓名、肖像、名譽(yù)、榮譽(yù);
4)宣揚(yáng)恐怖主義、極端主義或者煽動(dòng)實(shí)施恐怖活動(dòng)、極端主義活動(dòng);
5)煽動(dòng)民族仇恨、民族歧視,破壞民族團(tuán)結(jié);
6)破壞國(guó)家宗教政策,宣揚(yáng)邪教和封建迷信;
7)散布謠言,擾亂社會(huì)秩序,破壞社會(huì)穩(wěn)定;
8)宣揚(yáng)淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪;
9)煽動(dòng)非法集會(huì)、結(jié)社、游行、示威、聚眾擾亂社會(huì)秩序;
10)侮辱或者誹謗他人,侵害他人名譽(yù)、隱私和其他合法權(quán)益;
11)通過網(wǎng)絡(luò)以文字、圖片、音視頻等形式,對(duì)未成年人實(shí)施侮辱、誹謗、威脅或者惡意損害未成年人形象進(jìn)行網(wǎng)絡(luò)欺凌的;
12)危害未成年人身心健康的;
13)含有法律、行政法規(guī)禁止的其他內(nèi)容;
2. 不友善:不尊重用戶及其所貢獻(xiàn)內(nèi)容的信息或行為。主要表現(xiàn)為:
1)輕蔑:貶低、輕視他人及其勞動(dòng)成果;
2)誹謗:捏造、散布虛假事實(shí),損害他人名譽(yù);
3)嘲諷:以比喻、夸張、侮辱性的手法對(duì)他人或其行為進(jìn)行揭露或描述,以此來激怒他人;
4)挑釁:以不友好的方式激怒他人,意圖使對(duì)方對(duì)自己的言論作出回應(yīng),蓄意制造事端;
5)羞辱:貶低他人的能力、行為、生理或身份特征,讓對(duì)方難堪;
6)謾罵:以不文明的語言對(duì)他人進(jìn)行負(fù)面評(píng)價(jià);
7)歧視:煽動(dòng)人群歧視、地域歧視等,針對(duì)他人的民族、種族、宗教、性取向、性別、年齡、地域、生理特征等身份或者歸類的攻擊;
8)威脅:許諾以不良的后果來迫使他人服從自己的意志;
3. 發(fā)布垃圾廣告信息:以推廣曝光為目的,發(fā)布影響用戶體驗(yàn)、擾亂本網(wǎng)站秩序的內(nèi)容,或進(jìn)行相關(guān)行為。主要表現(xiàn)為:
1)多次發(fā)布包含售賣產(chǎn)品、提供服務(wù)、宣傳推廣內(nèi)容的垃圾廣告。包括但不限于以下幾種形式:
2)單個(gè)帳號(hào)多次發(fā)布包含垃圾廣告的內(nèi)容;
3)多個(gè)廣告帳號(hào)互相配合發(fā)布、傳播包含垃圾廣告的內(nèi)容;
4)多次發(fā)布包含欺騙性外鏈的內(nèi)容,如未注明的淘寶客鏈接、跳轉(zhuǎn)網(wǎng)站等,誘騙用戶點(diǎn)擊鏈接
5)發(fā)布大量包含推廣鏈接、產(chǎn)品、品牌等內(nèi)容獲取搜索引擎中的不正當(dāng)曝光;
6)購買或出售帳號(hào)之間虛假地互動(dòng),發(fā)布干擾網(wǎng)站秩序的推廣內(nèi)容及相關(guān)交易。
7)發(fā)布包含欺騙性的惡意營(yíng)銷內(nèi)容,如通過偽造經(jīng)歷、冒充他人等方式進(jìn)行惡意營(yíng)銷;
8)使用特殊符號(hào)、圖片等方式規(guī)避垃圾廣告內(nèi)容審核的廣告內(nèi)容。
4. 色情低俗信息,主要表現(xiàn)為:
1)包含自己或他人性經(jīng)驗(yàn)的細(xì)節(jié)描述或露骨的感受描述;
2)涉及色情段子、兩性笑話的低俗內(nèi)容;
3)配圖、頭圖中包含庸俗或挑逗性圖片的內(nèi)容;
4)帶有性暗示、性挑逗等易使人產(chǎn)生性聯(lián)想;
5)展現(xiàn)血腥、驚悚、殘忍等致人身心不適;
6)炒作緋聞、丑聞、劣跡等;
7)宣揚(yáng)低俗、庸俗、媚俗內(nèi)容。
5. 不實(shí)信息,主要表現(xiàn)為:
1)可能存在事實(shí)性錯(cuò)誤或者造謠等內(nèi)容;
2)存在事實(shí)夸大、偽造虛假經(jīng)歷等誤導(dǎo)他人的內(nèi)容;
3)偽造身份、冒充他人,通過頭像、用戶名等個(gè)人信息暗示自己具有特定身份,或與特定機(jī)構(gòu)或個(gè)人存在關(guān)聯(lián)。
6. 傳播封建迷信,主要表現(xiàn)為:
1)找人算命、測(cè)字、占卜、解夢(mèng)、化解厄運(yùn)、使用迷信方式治病;
2)求推薦算命看相大師;
3)針對(duì)具體風(fēng)水等問題進(jìn)行求助或咨詢;
4)問自己或他人的八字、六爻、星盤、手相、面相、五行缺失,包括通過占卜方法問婚姻、前程、運(yùn)勢(shì),東西寵物丟了能不能找回、取名改名等;
7. 文章標(biāo)題黨,主要表現(xiàn)為:
1)以各種夸張、獵奇、不合常理的表現(xiàn)手法等行為來誘導(dǎo)用戶;
2)內(nèi)容與標(biāo)題之間存在嚴(yán)重不實(shí)或者原意扭曲;
3)使用夸張標(biāo)題,內(nèi)容與標(biāo)題嚴(yán)重不符的。
8.「飯圈」亂象行為,主要表現(xiàn)為:
1)誘導(dǎo)未成年人應(yīng)援集資、高額消費(fèi)、投票打榜
2)粉絲互撕謾罵、拉踩引戰(zhàn)、造謠攻擊、人肉搜索、侵犯隱私
3)鼓動(dòng)「飯圈」粉絲攀比炫富、奢靡享樂等行為
4)以號(hào)召粉絲、雇用網(wǎng)絡(luò)水軍、「養(yǎng)號(hào)」形式刷量控評(píng)等行為
5)通過「蹭熱點(diǎn)」、制造話題等形式干擾輿論,影響傳播秩序
9. 其他危害行為或內(nèi)容,主要表現(xiàn)為:
1)可能引發(fā)未成年人模仿不安全行為和違反社會(huì)公德行為、誘導(dǎo)未成年人不良嗜好影響未成年人身心健康的;
2)不當(dāng)評(píng)述自然災(zāi)害、重大事故等災(zāi)難的;
3)美化、粉飾侵略戰(zhàn)爭(zhēng)行為的;
4)法律、行政法規(guī)禁止,或可能對(duì)網(wǎng)絡(luò)生態(tài)造成不良影響的其他內(nèi)容。
二、違規(guī)處罰
本網(wǎng)站通過主動(dòng)發(fā)現(xiàn)和接受用戶舉報(bào)兩種方式收集違規(guī)行為信息。所有有意的降低內(nèi)容質(zhì)量、傷害平臺(tái)氛圍及欺凌未成年人或危害未成年人身心健康的行為都是不能容忍的。
當(dāng)一個(gè)用戶發(fā)布違規(guī)內(nèi)容時(shí),本網(wǎng)站將依據(jù)相關(guān)用戶違規(guī)情節(jié)嚴(yán)重程度,對(duì)帳號(hào)進(jìn)行禁言 1 天、7 天、15 天直至永久禁言或封停賬號(hào)的處罰。當(dāng)涉及欺凌未成年人、危害未成年人身心健康、通過作弊手段注冊(cè)、使用帳號(hào),或者濫用多個(gè)帳號(hào)發(fā)布違規(guī)內(nèi)容時(shí),本網(wǎng)站將加重處罰。
三、申訴
隨著平臺(tái)管理經(jīng)驗(yàn)的不斷豐富,本網(wǎng)站出于維護(hù)本網(wǎng)站氛圍和秩序的目的,將不斷完善本公約。
如果本網(wǎng)站用戶對(duì)本網(wǎng)站基于本公約規(guī)定做出的處理有異議,可以通過「建議反饋」功能向本網(wǎng)站進(jìn)行反饋。
(規(guī)則的最終解釋權(quán)歸屬本網(wǎng)站所有)