1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一個(gè) Python 報(bào)表自動(dòng)化實(shí)戰(zhàn)案例(文末贈(zèng)書(shū))

        共 11144字,需瀏覽 23分鐘

         ·

        2021-11-09 13:24

        文末贈(zèng)書(shū)

        大家好,我是杰哥。

        今天給大家分享一本我好朋友俊紅老師的新書(shū)《對(duì)比Excel,輕松學(xué)習(xí)Python報(bào)表自動(dòng)化》中關(guān)于報(bào)表自動(dòng)化實(shí)戰(zhàn)的內(nèi)容。

        本篇文章將帶你了解報(bào)表自動(dòng)化的流程,并教你用Python實(shí)現(xiàn)工作中的一個(gè)報(bào)表自動(dòng)化實(shí)戰(zhàn),篇幅較長(zhǎng),建議先收藏,文章具體的目錄為:

        1.Excel的基本組成
        2.一份報(bào)表自動(dòng)化的流程
        3.報(bào)表自動(dòng)化實(shí)戰(zhàn)
        ? ?- 當(dāng)日各項(xiàng)指標(biāo)同環(huán)比情況
        ? ?- 當(dāng)日各省份創(chuàng)建訂單量情況
        ? ?- 最近一段時(shí)間創(chuàng)建訂單量趨勢(shì)
        4.將不同的結(jié)果進(jìn)行合并
        ? ?- 將不同結(jié)果合并到同一個(gè)Sheet中
        ? ?- 將不同結(jié)果合并到同一個(gè)工作簿的不同Sheet中

        Excel的基本組成

        我們一般在最開(kāi)始做報(bào)表的時(shí)候,基本都是從Excel開(kāi)始的,都是利用Excel在做報(bào)表,所以我們先了解下Excel的基本組成。

        下圖是Excel的中各個(gè)部分的組成關(guān)系,我們工作中每天會(huì)處理很多Excel文件,一個(gè)Excel文件其實(shí)就是一個(gè)工作簿。你在每次新建一個(gè)Excel文件時(shí),文件名都會(huì)默認(rèn)是工作簿x,其中x就是你新建的文件個(gè)數(shù)。而一個(gè)工作簿里面又可以有多個(gè)Sheet,不同Sheet之間是一個(gè)獨(dú)立的表。每一個(gè)Sheet里面又由若干個(gè)單元格組成。每一個(gè)單元格又有若干的元素或?qū)傩?,我們一般針?duì)Excel文件進(jìn)行設(shè)置最多的其實(shí)就是針對(duì)單元格的元素進(jìn)行設(shè)置。

        而針對(duì)單元格元素進(jìn)行設(shè)置的主要內(nèi)容其實(shí)就是如下圖菜單欄中顯示,比如字體、對(duì)齊方式、條件格式等內(nèi)容。本書(shū)也是按照Excel菜單欄中的各個(gè)模塊進(jìn)行編寫(xiě)。

        一份自動(dòng)化報(bào)表的流程

        下圖是我整理的做一份自動(dòng)化報(bào)表需要經(jīng)歷的流程,主要分為5個(gè)步驟:

        第一步是對(duì)要做的報(bào)表進(jìn)行步驟拆解,這個(gè)步驟拆解和用不用工具或者是用什么工具沒(méi)有直接關(guān)系,比如做報(bào)表的第一步一般都是收集數(shù)據(jù),這個(gè)數(shù)據(jù)可能是線下人員記錄在紙質(zhì)筆記本上的,也可能是存儲(chǔ)在Excel表里面的,還有可能是存儲(chǔ)在數(shù)據(jù)庫(kù)里面的。會(huì)因?yàn)閿?shù)據(jù)源的類(lèi)型或者是存儲(chǔ)方式不同,對(duì)應(yīng)的收集數(shù)據(jù)方式會(huì)不一樣,但是收集數(shù)據(jù)這個(gè)步驟本身是不會(huì)變的,這個(gè)步驟的目的就是把數(shù)據(jù)收集過(guò)來(lái)。

        第二步是去想第一步里面涉及到的每一個(gè)具體步驟對(duì)應(yīng)的代碼實(shí)現(xiàn)方式,一般都是去找對(duì)應(yīng)每一步的代碼,比如導(dǎo)入數(shù)據(jù)的代碼是什么樣的,再比如重復(fù)值刪除的代碼是什么樣的。

        第三步是將第二步中各個(gè)步驟對(duì)應(yīng)的代碼進(jìn)行組合,組合成一個(gè)完整的代碼。

        第四步是對(duì)第三步完整代碼得出來(lái)的報(bào)表結(jié)果進(jìn)行驗(yàn)證,看結(jié)果是否正確。

        第五步就是等待調(diào)用,看什么時(shí)候需要制作報(bào)表了,然后就將寫(xiě)好的代碼執(zhí)行一遍就行。

        其實(shí)報(bào)表自動(dòng)化本質(zhì)上就是讓機(jī)器代替人工做事情的過(guò)程,我們只需要把我們?nèi)斯ば枰龅拿恳粋€(gè)步驟轉(zhuǎn)化成機(jī)器可以理解的語(yǔ)言,也就是代碼,然后讓機(jī)器自動(dòng)去執(zhí)行,這其實(shí)就是實(shí)現(xiàn)了自動(dòng)化。

        報(bào)表自動(dòng)化實(shí)戰(zhàn)

        這一節(jié)給大家演示下在實(shí)際工作中如何結(jié)合Pandas和openpyxl來(lái)自動(dòng)化生成報(bào)表。

        假設(shè)我們現(xiàn)在有如下一份數(shù)據(jù)集:

        現(xiàn)在我們需要根據(jù)這份數(shù)據(jù)集來(lái)制作每天的日?qǐng)?bào)情況,會(huì)主要包含三方面:

        • 當(dāng)日各項(xiàng)指標(biāo)的同環(huán)比情況;

        • 當(dāng)日各省份創(chuàng)建訂單量情況;

        • 最近一段時(shí)間創(chuàng)建訂單量趨勢(shì)

        接下來(lái)分別來(lái)實(shí)現(xiàn)這三部分。

        當(dāng)日各項(xiàng)指標(biāo)的同環(huán)比情況:

        我們先用Pandas對(duì)數(shù)據(jù)進(jìn)行計(jì)算處理,得到各指標(biāo)的同環(huán)比情況,具體實(shí)現(xiàn)代碼如下:

        #導(dǎo)入文件
        import?pandas?as?pd
        df?=?pd.read_excel(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\sale_data.xlsx')

        #構(gòu)造同時(shí)獲取不同指標(biāo)的函數(shù)
        def?get_data(date):???
        ????create_cnt?=?df[df['創(chuàng)建日期']?==?date]['order_id'].count()
        ????pay_cnt?=?df[df['付款日期']?==?date]['order_id'].count()
        ????receive_cnt?=?df[df['收貨日期']?==?date]['order_id'].count()
        ????return_cnt?=?df[df['退款日期']?==?date]['order_id'].count()
        ????return?create_cnt,pay_cnt,receive_cnt,return_cnt

        #假設(shè)當(dāng)日是2021-04-11
        #獲取不同時(shí)間段的各指標(biāo)值
        df_view?=?pd.DataFrame([get_data('2021-04-11')
        ?????????????????????,get_data('2021-04-10')
        ?????????????????????,get_data('2021-04-04')]
        ?????????????????????,columns?=?['創(chuàng)建訂單量','付款訂單量','收貨訂單量','退款訂單量']
        ?????????????????????,index?=?['當(dāng)日','昨日','上周同期']).T

        df_view['環(huán)比']?=?df_view['當(dāng)日']?/?df_view['昨日']?-?1
        df_view['同比']?=?df_view['當(dāng)日']?/?df_view['上周同期']?-?1
        df_view

        運(yùn)行上面代碼會(huì)得到如下結(jié)果:

        上面只是得到了各指標(biāo)的同環(huán)比絕對(duì)數(shù)值,但是我們一般的日?qǐng)?bào)在發(fā)出去之前都要做一些格式調(diào)整的,比如調(diào)整字體之類(lèi)的。而格式調(diào)整就需要用到openpyxl庫(kù),我們需要將Pandas庫(kù)中DataFrame格式的數(shù)據(jù)轉(zhuǎn)化為適用openpyxl庫(kù)的數(shù)據(jù)格式,具體實(shí)現(xiàn)代碼如下:

        from?openpyxl?import?Workbook
        from?openpyxl.utils.dataframe?import?dataframe_to_rows

        #創(chuàng)建空工作簿
        wb?=?Workbook()
        ws?=?wb.active

        #將DataFrame格式數(shù)據(jù)轉(zhuǎn)化為openpyxl格式
        for?r?in?dataframe_to_rows(df_view,index?=?True,header?=?True):
        ????ws.append(r)

        wb.save(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\核心指標(biāo)_原始.xlsx')

        運(yùn)行上面代碼會(huì)得到如下結(jié)果,可以看到原始的數(shù)據(jù)文件看起來(lái)是很混亂的:

        接下來(lái)我們針對(duì)上面原始數(shù)據(jù)文件進(jìn)行格式調(diào)整,具體調(diào)整代碼如下:

        from?openpyxl?import?Workbook
        from?openpyxl.utils.dataframe?import?dataframe_to_rows
        from?openpyxl.styles?import?colors
        from?openpyxl.styles?import?Font
        from?openpyxl.styles?import?PatternFill
        from?openpyxl.styles?import?Border,?Side
        from?openpyxl.styles?import?Alignment

        wb?=?Workbook()
        ws?=?wb.active

        for?r?in?dataframe_to_rows(df_view,index?=?True,header?=?True):
        ????ws.append(r)

        #第二行是空的,刪除第二行
        ws.delete_rows(2)

        #給A1單元格進(jìn)行賦值
        ws['A1']?=?'指標(biāo)'

        #插入一行作為標(biāo)題行
        ws.insert_rows(1)
        ws['A1']?=?'電商業(yè)務(wù)方向?2021/4/11?日?qǐng)?bào)'

        #將標(biāo)題行的單元格進(jìn)行合并
        ws.merge_cells('A1:F1')?#合并單元格

        #對(duì)第1行至第6行的單元格進(jìn)行格式設(shè)置
        for?row?in?ws[1:6]:
        ????for?c?in?row:
        ????????#字體設(shè)置
        ????????c.font?=?Font(name?=?'微軟雅黑',size?=?12)
        ????????#對(duì)齊方式設(shè)置
        ????????c.alignment?=?Alignment(horizontal?=?"center")
        ????????#邊框線設(shè)置
        ????????c.border?=?Border(left?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????right?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????top?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????bottom?=?Side(border_style?=?"thin",color?=?"FF000000"))

        #對(duì)標(biāo)題行和表頭行進(jìn)行特殊設(shè)置
        for?row?in?ws[1:2]:
        ????for?c?in?row:
        ????????c.font?=?Font(name?=?'微軟雅黑',size?=?12,bold?=?True,color?=?"FFFFFFFF")
        ????????c.fill?=?PatternFill(fill_type?=?'solid',start_color='FFFF6100')

        #將環(huán)比和同比設(shè)置成百分比格式????????
        for?col?in?ws["E":"F"]:
        ????for?r?in?col:
        ????????r.number_format?=?'0.00%'

        #調(diào)整列寬
        ws.column_dimensions['A'].width?=?13
        ws.column_dimensions['E'].width?=?10

        #保存調(diào)整后的文件????????
        wb.save(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\核心指標(biāo).xlsx')

        運(yùn)行上面代碼會(huì)得到如下結(jié)果:

        可以看到各項(xiàng)均已設(shè)置成功。

        當(dāng)日各省份創(chuàng)建訂單量情況:

        我們同樣先利用Pandas庫(kù)處理得到當(dāng)日各省份創(chuàng)建訂單量情況,具體實(shí)現(xiàn)代碼如下:

        df_province?=?pd.DataFrame(df[df['創(chuàng)建日期']?==?'2021-04-11'].groupby('省份')['order_id'].count())
        df_province?=?df_province.reset_index()
        df_province?=?df_province.sort_values(by?=?'order_id',ascending?=?False)
        df_province?=?df_province.rename(columns?=?{'order_id':'創(chuàng)建訂單量'})
        df_province

        運(yùn)行上面代碼會(huì)得到如下結(jié)果:

        在得到各省份當(dāng)日創(chuàng)建訂單量的絕對(duì)數(shù)值之后,同樣對(duì)其進(jìn)行格式設(shè)置,具體設(shè)置代碼如下:

        from?openpyxl?import?Workbook
        from?openpyxl.utils.dataframe?import?dataframe_to_rows
        from?openpyxl.styles?import?colors
        from?openpyxl.styles?import?Font
        from?openpyxl.styles?import?PatternFill
        from?openpyxl.styles?import?Border,?Side
        from?openpyxl.styles?import?Alignment
        from?openpyxl.formatting.rule?import?DataBarRule

        wb?=?Workbook()
        ws?=?wb.active

        for?r?in?dataframe_to_rows(df_province,index?=?False,header?=?True):
        ????ws.append(r)

        #對(duì)第1行至第11行的單元格進(jìn)行設(shè)置
        for?row?in?ws[1:11]:
        ????for?c?in?row:
        ????????#字體設(shè)置
        ????????c.font?=?Font(name?=?'微軟雅黑',size?=?12)
        ????????#對(duì)齊方式設(shè)置
        ????????c.alignment?=?Alignment(horizontal?=?"center")
        ????????#邊框線設(shè)置
        ????????c.border?=?Border(left?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????right?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????top?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????bottom?=?Side(border_style?=?"thin",color?=?"FF000000"))

        #設(shè)置進(jìn)度條條件格式
        rule?=?DataBarRule(start_type?=?'min',end_type?=?'max',
        ????????????????????color="FF638EC6",?showValue=True,?minLength=None,?maxLength=None)
        ws.conditional_formatting.add('B1:B11',rule)

        #對(duì)第1行標(biāo)題行進(jìn)行設(shè)置
        for?c?in?ws[1]:
        ????c.font?=?Font(name?=?'微軟雅黑',size?=?12,bold?=?True,color?=?"FFFFFFFF")
        ????c.fill?=?PatternFill(fill_type?=?'solid',start_color='FFFF6100')

        #調(diào)整列寬
        ws.column_dimensions['A'].width?=?17
        ws.column_dimensions['B'].width?=?13

        #保存調(diào)整后的文件?????
        wb.save(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\各省份銷(xiāo)量情況.xlsx')

        運(yùn)行上面代碼會(huì)得到如下結(jié)果:

        最近一段時(shí)間創(chuàng)建訂單量趨勢(shì):

        一般用折線圖的形式反映某個(gè)指標(biāo)的趨勢(shì)情況,我們前面也講過(guò),在實(shí)際工作中我們一般用matplotlib或者其他可視化的庫(kù)進(jìn)行圖表繪制,并將其進(jìn)行保存,然后再利用openpyxl庫(kù)將圖表插入到Excel中。

        先利用matplotlib庫(kù)進(jìn)行繪圖,具體實(shí)現(xiàn)代碼如下:

        %matplotlib?inline
        import?matplotlib.pyplot?as?plt
        plt.rcParams["font.sans-serif"]='SimHei'#解決中文亂碼

        #設(shè)置圖表大小
        plt.figure(figsize?=?(10,6))
        df.groupby('創(chuàng)建日期')['order_id'].count().plot()
        plt.title('4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì)')
        plt.xlabel('日期')
        plt.ylabel('訂單量')

        #將圖表保存到本地
        plt.savefig(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì).png')

        將保存到本地的圖表插入到Excel中,具體實(shí)現(xiàn)代碼如下:

        from?openpyxl?import?Workbook
        from?openpyxl.drawing.image?import?Image

        wb?=?Workbook()
        ws?=?wb.active

        img?=?Image(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì).png')

        ws.add_image(img,?'A1')

        wb.save(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì).xlsx')

        運(yùn)行上面代碼會(huì)得到如下結(jié)果,可以看到圖表已經(jīng)被成功插入到Excel中:

        將不同的結(jié)果進(jìn)行合并

        上面我們是把每一部分都單獨(dú)拆開(kāi)來(lái)實(shí)現(xiàn),最后存儲(chǔ)在了不同的Excel文件中。當(dāng)然了,有的時(shí)候放在不同文件中會(huì)比較麻煩,我們就需要把這些結(jié)果合并在同一個(gè)Excel的相同Sheet或者不同Sheet中。

        將不同的結(jié)果合并到同一個(gè)Sheet中:

        將不同的結(jié)果合并到同一個(gè)Sheet中的難點(diǎn)在于不同表結(jié)果的結(jié)構(gòu)不一樣,而且需要在不同結(jié)果之間進(jìn)行留白。

        首先插入核心指標(biāo)表df_review,插入方式與單獨(dú)的插入是一樣的,具體代碼如下:

        for?r?in?dataframe_to_rows(df_view,index?=?True,header?=?True):
        ????ws.append(r)

        接下來(lái)就該插入各省份情況表df_province,因?yàn)閍ppend默認(rèn)是從第一行開(kāi)始插入的,而我們前面幾行已經(jīng)有df_view表的數(shù)據(jù)了,所以就不能用appen的方式進(jìn)行插入,而只能通過(guò)遍歷每一個(gè)單元格的方式進(jìn)行插入。

        那我們?cè)趺粗酪闅v哪些單元格呢?核心需要知道遍歷開(kāi)始的行列和遍歷結(jié)束的行列。

        遍歷開(kāi)始的行?=?df_view表占據(jù)的行?+?留白的行(一般表與表之間留2行)?+?1
        遍歷結(jié)束的行?=?遍歷開(kāi)始的行?+?df_province表占據(jù)的行

        遍歷開(kāi)始的列?=?1
        遍歷結(jié)束的列?=?df_province表占據(jù)的列

        而又因?yàn)镈ataFrame中獲取列名的方式和獲取具體值的方式不太一樣,所以我們需要分別插入,先插入列名,具體代碼如下:

        for?j?in?range(df_province.shape[1]):
        ????ws.cell(row?=?df_view.shape[0]?+?5,column?=?1?+?j).value?
        =?df_province.columns[r]

        df_province.shape[1]是獲取df_province表有多少列,df_view.shape[0]是獲取df_view表有多少行。

        前面說(shuō)過(guò),遍歷開(kāi)始的行是表占據(jù)的行加上留白的行再加1,一般留白的行是2,可是這里面為啥是df_view.shape[0] + 5呢?這是因?yàn)閐f_view.shape[0]是不包列名行的,同時(shí)在插入Excel中的時(shí)候會(huì)默認(rèn)增加1行空行,所以就需要在留白行的基礎(chǔ)上再增加2行,即2 + 2 + 1 = 5。

        因?yàn)閞ange()函數(shù)是默認(rèn)是從0開(kāi)始的,而Excel中的列是從1開(kāi)始的,所以column需要加1。

        上面的代碼只是把df_province表的列名插入進(jìn)來(lái)了,接下來(lái)插入具體的值,方式與插入列名的方式一致,只不過(guò)需要在列名的下一行開(kāi)始插入,具體代碼如下:

        #再把具體的值插入
        for?i?in?range(df_province.shape[0]):
        ????for?j?in?range(df_province.shape[1]):
        ????????ws.cell(row?=?df_view.shape[0]?+?6?+?i,column?=?1?+?j).value?
        =?df_province.iloc[i,j]

        接下來(lái)就該插入圖片了,插入圖片的方式與前面單獨(dú)的插入是一致的,具體代碼如下:

        #插入圖片
        img?=?Image(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì).png')
        ws.add_image(img,?'G1')

        將所有的數(shù)據(jù)插入以后就該對(duì)這些數(shù)據(jù)進(jìn)行格式設(shè)置了,因?yàn)椴煌淼慕Y(jié)構(gòu)不一樣,所以我們沒(méi)法直接批量針對(duì)所有的單元格進(jìn)行格式設(shè)置,只能分范圍分別進(jìn)行設(shè)置,而不同范圍的格式可能是一樣的,所以我們先預(yù)設(shè)一些格式變量,這樣后面用到的時(shí)候直接調(diào)取這些變量即可,減少代碼冗余,具體代碼如下:

        #格式預(yù)設(shè)

        #表頭字體設(shè)置
        title_Font_style?=?Font(name?=?'微軟雅黑',size?=?12,bold?=?True,color?=?"FFFFFFFF")
        #普通內(nèi)容字體設(shè)置
        plain_Font_style?=?Font(name?=?'微軟雅黑',size?=?12)
        Alignment_style?=?Alignment(horizontal?=?"center")
        Border_style?=?Border(left?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????right?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????top?=?Side(border_style?=?"thin",color?=?"FF000000"),
        ???????????????????bottom?=?Side(border_style?=?"thin",color?=?"FF000000"))
        PatternFill_style?=?PatternFill(fill_type?=?'solid',start_color='FFFF6100')

        格式預(yù)設(shè)完之后就可以對(duì)各個(gè)范圍分別進(jìn)行格式設(shè)置了,具體代碼如下:

        #對(duì)A1至F6范圍內(nèi)的單元格進(jìn)行設(shè)置
        for?row?in?ws['A1':'F6']:
        ????for?c?in?row:
        ????????c.font?=?plain_Font_style
        ????????c.alignment?=?Alignment_style
        ????????c.border?=?Border_style

        #對(duì)第1行和第2行的單元格進(jìn)行設(shè)置
        for?row?in?ws[1:2]:
        ????for?c?in?row:
        ????????c.font?=?title_Font_style
        ????????c.fill?=?PatternFill_style

        #對(duì)E列和F列的單元格進(jìn)行設(shè)置
        for?col?in?ws["E":"F"]:
        ????for?r?in?col:
        ????????r.number_format?=?'0.00%'

        #對(duì)A9至B19范圍內(nèi)的單元格進(jìn)行設(shè)置
        for?row?in?ws['A9':'B19']:
        ????for?c?in?row:
        ????????c.font?=?plain_Font_style
        ????????c.alignment?=?Alignment_style
        ????????c.border?=?Border_style

        #對(duì)A9至B9范圍內(nèi)的單元格進(jìn)行設(shè)置
        for?row?in?ws['A9':'B9']:
        ????for?c?in?row:
        ????????c.font?=?title_Font_style
        ????????c.fill?=?PatternFill_style

        #設(shè)置進(jìn)度條
        rule?=?DataBarRule(start_type?=?'min',end_type?=?'max',
        ????????????????????color="FF638EC6",?showValue=True,?minLength=None,?maxLength=None)
        ws.conditional_formatting.add('B10:B19',rule)

        #調(diào)整列寬
        ws.column_dimensions['A'].width?=?17
        ws.column_dimensions['B'].width?=?13
        ws.column_dimensions['E'].width?=?10

        最后將上面所有代碼片段合并在一起,就是將不同的結(jié)果文件合并到同一個(gè)Sheet中的完整代碼,具體結(jié)果如下,可以看到不同結(jié)果文件合并在了一起,并且各自的格式設(shè)置完好。

        將不同的結(jié)果合并到同一工作簿的不同Sheet中:

        將不同的結(jié)果合并到同一工作簿的不同Sheet中比較好實(shí)現(xiàn),只需要新建幾個(gè)Sheet,然后針對(duì)不同的Sheet插入數(shù)據(jù)即可,具體實(shí)現(xiàn)代碼如下:

        from?openpyxl?import?Workbook
        from?openpyxl.utils.dataframe?import?dataframe_to_rows

        wb?=?Workbook()
        ws?=?wb.active

        ws1?=?wb.create_sheet()
        ws2?=?wb.create_sheet()

        #更改sheet的名稱(chēng)
        ws.title?=?"核心指標(biāo)"?
        ws1.title?=?"各省份銷(xiāo)情況"?
        ws2.title?=?"分日趨勢(shì)"?

        for?r1?in?dataframe_to_rows(df_view,index?=?True,header?=?True):
        ????ws.append(r1)

        for?r2?in?dataframe_to_rows(df_province,index?=?False,header?=?True):
        ????ws1.append(r2)

        img?=?Image(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\4.2?-?4.11?創(chuàng)建訂單量分日趨勢(shì).png')

        ws2.add_image(img,?'A1')

        wb.save(r'D:\Data-Science\share\excel-python報(bào)表自動(dòng)化\多結(jié)果合并_多Sheet.xlsx')

        運(yùn)行上面代碼,會(huì)得到如下結(jié)果,可以看到創(chuàng)建了3個(gè)Sheet,且不同的內(nèi)容保存到了不同Sheet中:

        到這里我們的一份自動(dòng)化報(bào)表的代碼就完成了,以后每次需要用到這份報(bào)表的時(shí)候,把上面代碼執(zhí)行一遍,結(jié)果馬上就可以出來(lái),當(dāng)然了也可以設(shè)置定時(shí)執(zhí)行,到時(shí)間結(jié)果就自動(dòng)發(fā)送到你郵箱里面啦。


        本篇內(nèi)容摘取自《對(duì)比Excel,輕松學(xué)習(xí)Python報(bào)表自動(dòng)化》書(shū)籍,感興趣的同學(xué)可以點(diǎn)擊下方鏈接進(jìn)行了解:

        贈(zèng)書(shū)規(guī)則:為本文「點(diǎn)贊」+ 「在看」 +「留言」且與文章內(nèi)容相關(guān)的優(yōu)質(zhì)留言即可上墻并從所有留言中選出3位點(diǎn)贊最高的讀者留言將各獲得一本,刷贊無(wú)效。

        截止時(shí)間:2021年11月12日,晚 20:00

        領(lǐng)書(shū)須知:提供點(diǎn)贊、在看的截圖

        注意事項(xiàng):最終獲贈(zèng)者請(qǐng)?jiān)?4小時(shí)以內(nèi)添加我的微信,備注:贈(zèng)書(shū)??

        瀏覽 63
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            性videosgratis喷潮hd | 黄片操逼的 | 91久久网 | 一级做a爰片性色毛片武则天 | 欧美成人在线网 | 伊人成人网视频 | 看看操逼的 | 人妻福利导航 | 亚洲怡春院 | 久艹大香蕉|