精华内容
下载资源
问答
  • 2021-12-14 10:18:23

    安装xlsxwriter库

    pip install xlsxwriter
    
    #设置表格名称
    workbook = xlsxwriter.Workbook('hello.xlsx')
    #增加一个sheet
    worksheet = workbook.add_worksheet()
    # 设置表头
    headings = ['Number', 'testA', 'testB']  
    #数据
    data = [
        ['2017-9-1', '2017-90-2', '2017-9-3', '2017-9-4', '2017-9-5', '2017-9-6'],
        [10, 40, 50, 20, 10, 50],
        [30, 60, 70, 50, 40, 30]
    ]
    #整行写入
    worksheet.write_row('A1', headings)
    #整列写入
    worksheet.write_column('A2', data[0])
    worksheet.write_column('B2', data[1])
    worksheet.write_column('C2', data[2])
    workbook.close()
    

    在这里插入图片描述

    更多相关内容
  • Python自动生成Excel报表

    千次阅读 2020-11-06 10:04:25
    类似这种重复无聊的任务,我们完全可以交给 Python自动完成,只要第一次把 Python 代码写好,以后就可以一键完成,省时省力,还不容易出错,这是提升工作质量和工作效率的利器,让我们能够腾出时间和精力,去做更...

    在日常工作中,可能会有一些重复无聊的任务,比如说,从 Excel 或数据库中收集一些数据,设置相应的数据格式并做成报表。
    类似这种重复无聊的任务,我们完全可以交给 Python 去自动完成,只要第一次把 Python 代码写好,以后就可以一键完成,省时省力,还不容易出错,这是提升工作质量和工作效率的利器,让我们能够腾出时间和精力,去做更有价值的事情。
    1. 安装和导入模块
    以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装:

    pip install openpyxl
    

    要测试 openpyxl 是否正确安装,可以在 Jupyter Lab 中运行以下代码:

    # 导入库
    import openpyxl
    # 查看版本
    openpyxl.__version__
    

    如果该模块正确安装,那么会输出版本号,假如你在使用过程中遇到问题,可以查阅官方文档。
    2. 读取和处理数据
    为了演示用 Python 自动生成 Excel 报表,我从网上找了一个数据集,是一家跨国公司的 54 万多行在线零售业务的交易数据,你可以进入公众号「林骥」的后台,回复「零售」两个字,获取该数据集的完整下载链接。
    把这个数据文件保存到代码上级目录的 data 文件夹,然后用 Pandas 读取它:

    # 读取数据
    import pandas as pd
    df = pd.read_excel('../data/Online Retail.xlsx')
    
    df
    

    在这里插入图片描述
    其中每一列代表的含义如下:

    InvoiceNo:发票编号
    StockCode:产品代码
    Description:产品名称
    Quantity:产品数量
    InvoiceDate:开票时间
    UnitPrice:产品单价
    CustomerID:客户编号
    Country:国家名称

    为了统计每天的销售额,我们先在数据中增加两列:日期和销售额,然后用函数实现汇总:

    # 从时间列中提取日期
    df['日期'] = df.InvoiceDate.dt.to_period('D').astype(str)
    
    # 计算销售额
    df['销售额'] = df.Quantity * df.UnitPrice
    
    # 汇总每天的销售额
    df_daily = pd.DataFrame(df.groupby('日期')['销售额'].agg('sum')).reset_index()
    
    df_daily
    

    在这里插入图片描述
    3. 设置和保存报表
    接下来,我们对表格进行相应的设置,包括:重命名工作表、把数据写入工作表、自定义标题和表格边框样式、设置行高和列宽、不显示网格线、冻结窗格、自动筛选、设置日期和数字格式等等。

    from openpyxl.utils.dataframe import dataframe_to_rows
    from openpyxl.styles import Font, Color, NamedStyle, Border, Side, PatternFill, Alignment, numbers
    
    # 创建工作簿
    wb = openpyxl.Workbook()
    
    # 激活工作表
    ws = wb.active
    
    # 重命名工作表
    ws.title = '每日销售额'
    
    # 把数据写入工作表
    for row in dataframe_to_rows(df_daily, index=False, header=True):
        ws.append(row)
        
    # 创建自定义的标题样式
    mytitle = NamedStyle(name='mytitle')
    mytitle.font = Font(bold=True, size=11, color='FFFFFF')
    bd = Side(style='thin', color='A6A6A6')
    mytitle.border = Border(left=bd, top=bd, right=bd, bottom=bd)
    mytitle.fill = PatternFill('solid', fgColor='00589F')
    mytitle.alignment = Alignment(horizontal='left', vertical='center')
    wb.add_named_style(mytitle)
    
    # 创建自定义表格边框样式
    myborder = NamedStyle(name='myborder')
    myborder.font = Font(bold=False, size=11, color='000000')
    bd = Side(style='thin', color='A6A6A6')
    myborder.border = Border(left=bd, top=bd, right=bd, bottom=bd)
    myborder.alignment = Alignment(vertical='center')
    wb.add_named_style(myborder)
    
    # 应用标题样式
    for cell in ws[1]:
        cell.style = mytitle
        
    # 对表格区域加边框
    from openpyxl.utils import get_column_letter, column_index_from_string
    table_range = ws['A2:' + get_column_letter(ws.max_column) + str(ws.max_row)]
    for row in table_range:
        for cell in row:
            cell.style = myborder
        
    # 设置行高和列宽
    ws.row_dimensions[1].height = 26
    ws.column_dimensions['A'].width = 15
    ws.column_dimensions['B'].width = 12
    
    # 设置不显示网格线
    ws.views.sheetView[0].showGridLines = False
    
    # 冻结窗格
    ws.freeze_panes = 'A3'
    
    # 自动筛选
    ws.auto_filter.ref = 'A1:' + get_column_letter(ws.max_column) + str(ws.max_row)
    
    # 设置对齐格式
    for cell in ws['A']:
        cell.alignment = Alignment(horizontal='center', vertical='center')
    
    # 设置日期格式
    for cell in ws['A']:
        cell.number_format = numbers.FORMAT_DATE_YYYYMMDD2
        
    # 设置数字格式
    for cell in ws['B']:
        cell.number_format = numbers.BUILTIN_FORMATS[3]
    

    最后,保存自动生成的 Excel 报表文件:

    # 保存为新的表格
    wb.save('../data/每日销售报表.xlsx')
    

    打开这个新生成的 Excel 报表文件,其中的内容如下:
    在这里插入图片描述
    小结
    本文介绍了用 Python 自动生成 Excel 报表的一种方法,从 openpyxl 模块的安装和导入,到读取和处理数据,再到设置和保存报表,只要你把数据源放在合适的位置,就能在 Jupyter Lab 中一键运行,自动生成相应的报表。

    参考链接 :

    用Python自动生成Excel报表 :https://mp.weixin.qq.com/s/niZ1_ORP5QRJ9xR-oR0wpw

    展开全文
  • 今天就带大家来实战一波,使用Python自动生成数据报表!从一条条的数据中,创建出一张数据报表,得出你想要的东西,提高效率。主要使用到pandas、xlwings以及matplotlib...

    今天就带大家来实战一波,使用Python自动化生成数据报表!

    从一条条的数据中,创建出一张数据报表,得出你想要的东西,提高效率。

    主要使用到pandas、xlwings以及matplotlib这几个库。

    先来看一下动态的GIF,都是程序自动生成。

    下面我们就来看看这个案例吧,水果蔬菜销售报表。

    原始数据如下,主要有水果蔬菜名称、销售日期、销售数量、平均价格、平均成本、总收入、总成本、总利润等。

    先导入相关库,使用pandas读取原始数据。

    import pandas as pd
    import xlwings as xw
    import matplotlib.pyplot as plt
    
    # 对齐数据
    pd.set_option('display.unicode.ambiguous_as_wide', True)
    pd.set_option('display.unicode.east_asian_width', True)
    
    # 读取数据
    df = pd.read_csv(r"fruit_and_veg_sales.csv")
    print(df)
    

    结果如下。

    一共是有1000行的销售数据。

    使用xlwings库创建一个Excel工作簿,在工作簿中创建一个表,表名为fruit_and_veg_sales,然后将原始数据复制进去。

    # 创建原始数据表并复制数据
    wb = xw.Book()
    sht = wb.sheets["Sheet1"]
    sht.name = "fruit_and_veg_sales"
    sht.range("A1").options(index=False).value = d
    
    

    关于xlwings库的使用,小F推荐两个文档地址

    中文版:

    https://www.kancloud.cn/gnefnuy/xlwings-docs/1127455

    英文版:

    https://docs.xlwings.org/en/stable/index.html

    推荐使用中文版,可以降低学习难度...

    当然关于Excel的VBA操作,也可以看看微软的文档。

    地址:

    https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel

    将原始数据取过来后,再在工作簿中创建一个可视化表,即Dashboard表。

    # 创建表
    wb.sheets.add('Dashboard')
    sht_dashboard = wb.sheets('Dashboard')
    
    

    现在,我们有了一个包含两个工作表的Excel工作簿。fruit_and_veg_sales表有我们的数据,Dashboard表则是空白的。

    下面使用pandas来处理数据,生成Dashboard表的数据信息。

    DashBoard表的头两个表格,一个是产品的利润表格,一个是产品的销售数量表格。

    使用到了pandas的数据透视表函数。

    # 总利润透视表
    pv_total_profit = pd.pivot_table(df, index='类别', values='总利润(美元)', aggfunc='sum')
    print(pv_total_profit)
    
    # 销售数量透视表
    pv_quantity_sold = pd.pivot_table(df, index='类别', values='销售数量', aggfunc='sum')
    print(pv_quantity_sold)
    
    

    得到数据如下。

    稍后会将数据放置到Excel的表中去。

    下面对月份进行分组汇总,得出每个月的销售情况。

    # 查看每列的数据类型
    print(df.dtypes)
    df["销售日期"] = pd.to_datetime(df["销售日期"])
    
    # 每日的数据情况
    gb_date_sold = df.groupby(df["销售日期"].dt.to_period('m')).sum()[["销售数量", '总收入(美元)', '总成本(美元)', "总利润(美元)"]]
    gb_date_sold.index = gb_date_sold.index.to_series().astype(str)
    print(gb_date_sold)
    
    

    得到结果如下。

    这里先对数据进行了查询,发现日期列为object,是不能进行分组汇总的。

    所以使用了pd.to_datetime()对其进行了格式转换,而后根据时间进行分组汇总,得到每个月的数据情况。

    最后一个groupby将为Dashboard表提供第四个数据信息。

    # 总收入前8的日期数据
    gb_top_revenue = (df.groupby(df["销售日期"])
        .sum()
        .sort_values('总收入(美元)', ascending=False)
        .head(8)
        )[["销售数量", '总收入(美元)', '总成本(美元)', "总利润(美元)"]]
    print(gb_top_revenue)
    
    

    总收入前8的日期,得到结果如下。

    现在我们有了4份数据,可以将其附加到Excel中。

    # 设置背景颜色, 从A1单元格到Z1000单元格的矩形区域
    sht_dashboard.range('A1:Z1000').color = (198, 224, 180)
    
    # A、B列的列宽
    sht_dashboard.range('A:B').column_width = 2.22
    print(sht_dashboard.range('B2').api.font_object.properties.get())
    # B2单元格, 文字内容、字体、字号、粗体、颜色、行高(主标题)
    sht_dashboard.range('B2').value = '销售数据报表'
    sht_dashboard.range('B2').api.font_object.name.set('黑体')
    sht_dashboard.range('B2').api.font_object.font_size.set(48)
    sht_dashboard.range('B2').api.font_object.bold.set(True)
    sht_dashboard.range('B2').api.font_object.color.set([0, 0, 0])
    sht_dashboard.range('B2').row_height = 61.2
    
    # B2单元格到W2单元格的矩形区域, 下边框的粗细及颜色
    sht_dashboard.range('B2:W2').api.get_border(which_border=9).weight.set(4)
    sht_dashboard.range('B2:W2').api.get_border(which_border=9).color.set([0, 176, 80])
    
    # 不同产品总的收益情况图表名称、字体、字号、粗体、颜色(副标题)
    sht_dashboard.range('M2').value = '每种产品的收益情况'
    sht_dashboard.range('M2').api.font_object.name.set('黑体')
    sht_dashboard.range('M2').api.font_object.font_size.set(20)
    sht_dashboard.range('M2').api.font_object.bold.set(True)
    sht_dashboard.range('M2').api.font_object.color.set([0, 0, 0])
    
    # 主标题和副标题的分割线, 粗细、颜色、线型
    sht_dashboard.range('L2').api.get_border(which_border=7).weight.set(3)
    sht_dashboard.range('L2').api.get_border(which_border=7).color.set([0, 176, 80])
    sht_dashboard.range('L2').api.get_border(which_border=7).line_style.set(-4115)
    

    先配置一些基本内容,比如文字,颜色背景,边框线等,如下图。

    使用函数,批量生成四个表格的格式。

    # 表格生成函数.
    def create_formatted_summary(header_cell, title, df_summary, color):
        """
        Parameters
        ----------
        header_cell : Str
            左上角单元格位置, 放置数据
    
        title : Str
            当前表格的标题
    
        df_summary : DataFrame
            表格的数据
    
        color : Str
            表格填充色
        """
    
        # 可选择的表格填充色
        colors = {"purple": [(112, 48, 160), (161, 98, 208)],
                  "blue": [(0, 112, 192), (155, 194, 230)],
                  "green": [(0, 176, 80), (169, 208, 142)],
                  "yellow": [(255, 192, 0), (255, 217, 102)]}
    
        # 设置表格标题的列宽
        sht_dashboard.range(header_cell).column_width = 1.5
    
        # 获取单元格的行列数
        row, col = sht_dashboard.range(header_cell).row, sht_dashboard.range(header_cell).column
    
        # 设置表格的标题及相关信息, 如:字号、行高、向左居中对齐、颜色、粗体、表格的背景颜色等
        summary_title_range = sht_dashboard.range((row, col))
        summary_title_range.value = title
        summary_title_range.api.font_object.font_size.set(14)
        summary_title_range.row_height = 32.5
        # 垂直对齐方式
        summary_title_range.api.verticalalignment = xw.constants.HAlign.xlHAlignCenter
        summary_title_range.api.font_object.color.set([255, 255, 255])
        summary_title_range.api.font_object.bold.set(True)
        sht_dashboard.range((row, col),
                            (row, col + len(df_summary.columns) + 1)).color = colors[color][0]  # Darker color
    
        # 设置表格内容、起始单元格、数据填充、字体大小、粗体、颜色填充
        summary_header_range = sht_dashboard.range((row + 1, col + 1))
        summary_header_range.value = df_summary
        summary_header_range = summary_header_range.expand('right')
        summary_header_range.api.font_object.font_size.set(11)
        summary_header_range.api.font_object.bold.set(True)
        sht_dashboard.range((row + 1, col),
                            (row + 1, col + len(df_summary.columns) + 1)).color = colors[color][1]  # Darker color
        sht_dashboard.range((row + 1, col + 1),
                            (row + len(df_summary), col + len(df_summary.columns) + 1)).autofit()
    
        for num in range(1, len(df_summary) + 2, 2):
            sht_dashboard.range((row + num, col),
                                (row + num, col + len(df_summary.columns) + 1)).color = colors[color][1]
    
        # 找到表格的最后一行
        last_row = sht_dashboard.range((row + 1, col + 1)).expand('down').last_cell.row
        side_border_range = sht_dashboard.range((row + 1, col), (last_row, col))
    
        # 给表格左边添加带颜色的边框
        side_border_range.api.get_border(which_border=7).weight.set(3)
        side_border_range.api.get_border(which_border=7).color.set(colors[color][1])
        side_border_range.api.get_border(which_border=7).line_style.set(-4115)
    
    
    # 生成4个表格
    create_formatted_summary('B5', '每种产品的收益情况', pv_total_profit, 'green')
    create_formatted_summary('B17', '每种产品的售出情况', pv_quantity_sold, 'purple')
    create_formatted_summary('F17', '每月的销售情况', gb_date_sold, 'blue')
    create_formatted_summary('F5', '每日总收入排名Top8 ', gb_top_revenue, 'yellow')
    
    

    得到结果如下。

    可以看到,一行行的数据经过Python的处理,变为一目了然的表格。

    最后再绘制一个matplotlib图表,添加一张logo图片,并保存Excel文件。

    # 中文显示
    plt.rcParams['font.sans-serif']=['Songti SC']
    
    # 使用Matplotlib绘制可视化图表, 饼图
    fig, ax = plt.subplots(figsize=(6, 3))
    pv_total_profit.plot(color='g', kind='bar', ax=ax)
    
    # 添加图表到Excel
    sht_dashboard.pictures.add(fig, name='ItemsChart',
                               left=sht_dashboard.range("M5").left,
                               top=sht_dashboard.range("M5").top,
                               update=True)
    
    # 添加logo到Excel
    logo = sht_dashboard.pictures.add(image="pie_logo.png",
                               name='PC_3',
                               left=sht_dashboard.range("J2").left,
                               top=sht_dashboard.range("J2").top+5,
                               update=True)
    
    # 设置logo的大小
    logo.width = 54
    logo.height = 54
    
    # 保存Excel文件
    wb.save(rf"水果蔬菜销售报表.xlsx")
    
    

    此处需设置一下中文显示,否则会显示不了中文,只有一个个方框。

    得到最终的水果蔬菜销售报表。

    本文的示例代码,可以在Mac+Excel2016中运行的,与Windows还是会有一些区别,API函数的调用(pywin32 or appscript)。

    比如表格文字的字体设置。

    # Windows
    sht_dashboard.range('B2').api.font.name = '黑体'
    
    # Mac
    sht_dashboard.range('B2').api.font_object.name.set('黑体')
    

    对于Windows版本的,小F也提供了相关的程序文件,在公众号回复「excel报表」,即可获取代码及相关数据。

    感兴趣的小伙伴,可以动手尝试一下。无需太多的代码,就能轻松的创建一个Excel报表出来~

    推荐阅读:入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影年度爆款文案1).卧槽!Pdf转Word用Python轻松搞定!2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 4).80行代码!用Python做一个哆来A梦分身 5).你必须掌握的20个python代码,短小精悍,用处无穷 6).30个Python奇淫技巧集 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 8).再见Python!我要学Go了!2500字深度分析!9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片点阅读原文,领AI全套资料包!
    
    展开全文
  •  因产品的同学试着用python统计Excel表格,但百度的程序又一直有各种问题, 所以叫我帮用python实现一个统计Excel表格程序;我之前也没有写过python操作Excel表格的程序,快速搜索实现了一下,还是发现一些问题,...
  • 大家好,我是辰哥~点击下方名片关注和星标『Python研究者』!????点击关注|设为星标|干货速递????今天带大家来实战一波,使用Python自动生成数据报表!从一条条的数据中,创建出一张数据报...

    大家好,我是辰哥~

    点击下方名片关注和星标『Python研究者』!

    👆点击关注|设为星标|干货速递👆


    今天带大家来实战一波,使用Python自动化生成数据报表!

    从一条条的数据中,创建出一张数据报表,得出你想要的东西,提高效率。

    主要使用到pandas、xlwings以及matplotlib这几个库。

    先来看一下动态的GIF,都是程序自动生成。

    955100149afb5f429a9edb69beecf973.gif

    下面我们就来看看这个案例吧,水果蔬菜销售报表。

    原始数据如下,主要有水果蔬菜名称、销售日期、销售数量、平均价格、平均成本、总收入、总成本、总利润等。

    1d67ef49e97baee9dfe1c1d43b6db159.png

    先导入相关库,使用pandas读取原始数据。

    import pandas as pd
    import xlwings as xw
    import matplotlib.pyplot as plt
    
    # 对齐数据
    pd.set_option('display.unicode.ambiguous_as_wide', True)
    pd.set_option('display.unicode.east_asian_width', True)
    
    # 读取数据
    df = pd.read_csv(r"fruit_and_veg_sales.csv")
    print(df)

    结果如下。

    3697c0d59e28ca8061719e28deeacf93.png

    一共是有1000行的销售数据。

    使用xlwings库创建一个Excel工作簿,在工作簿中创建一个表,表名为fruit_and_veg_sales,然后将原始数据复制进去。

    # 创建原始数据表并复制数据
    wb = xw.Book()
    sht = wb.sheets["Sheet1"]
    sht.name = "fruit_and_veg_sales"
    sht.range("A1").options(index=False).value = d

    关于xlwings库的使用,小F推荐两个文档地址

    中文版:

    https://www.kancloud.cn/gnefnuy/xlwings-docs/1127455

    英文版:

    https://docs.xlwings.org/en/stable/index.html

    推荐使用中文版,可以降低学习难度...

    10f3f240a465f9fb56d9ba9078ffff8f.png

    当然关于Excel的VBA操作,也可以看看微软的文档。

    158ead948e1d010256dd047f88391acf.png

    地址:

    https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel

    将原始数据取过来后,再在工作簿中创建一个可视化表,即Dashboard表。

    # 创建表
    wb.sheets.add('Dashboard')
    sht_dashboard = wb.sheets('Dashboard')

    现在,我们有了一个包含两个工作表的Excel工作簿。fruit_and_veg_sales表有我们的数据,Dashboard表则是空白的。

    下面使用pandas来处理数据,生成Dashboard表的数据信息。

    DashBoard表的头两个表格,一个是产品的利润表格,一个是产品的销售数量表格。

    使用到了pandas的数据透视表函数。

    # 总利润透视表
    pv_total_profit = pd.pivot_table(df, index='类别', values='总利润(美元)', aggfunc='sum')
    print(pv_total_profit)
    
    # 销售数量透视表
    pv_quantity_sold = pd.pivot_table(df, index='类别', values='销售数量', aggfunc='sum')
    print(pv_quantity_sold)

    得到数据如下。

    2f6c8b88f24c103280b4df88ae351a1a.png

    稍后会将数据放置到Excel的表中去。

    下面对月份进行分组汇总,得出每个月的销售情况。

    # 查看每列的数据类型
    print(df.dtypes)
    df["销售日期"] = pd.to_datetime(df["销售日期"])
    
    # 每日的数据情况
    gb_date_sold = df.groupby(df["销售日期"].dt.to_period('m')).sum()[["销售数量", '总收入(美元)', '总成本(美元)', "总利润(美元)"]]
    gb_date_sold.index = gb_date_sold.index.to_series().astype(str)
    print(gb_date_sold)

    得到结果如下。

    873719be2ab5892d9f886b436488d571.png

    这里先对数据进行了查询,发现日期列为object,是不能进行分组汇总的。

    所以使用了pd.to_datetime()对其进行了格式转换,而后根据时间进行分组汇总,得到每个月的数据情况。

    最后一个groupby将为Dashboard表提供第四个数据信息。

    # 总收入前8的日期数据
    gb_top_revenue = (df.groupby(df["销售日期"])
        .sum()
        .sort_values('总收入(美元)', ascending=False)
        .head(8)
        )[["销售数量", '总收入(美元)', '总成本(美元)', "总利润(美元)"]]
    print(gb_top_revenue)

    总收入前8的日期,得到结果如下。

    e4470c91a14c8236fd3a899ad56649fa.png

    现在我们有了4份数据,可以将其附加到Excel中。

    # 设置背景颜色, 从A1单元格到Z1000单元格的矩形区域
    sht_dashboard.range('A1:Z1000').color = (198, 224, 180)
    
    # A、B列的列宽
    sht_dashboard.range('A:B').column_width = 2.22
    print(sht_dashboard.range('B2').api.font_object.properties.get())
    # B2单元格, 文字内容、字体、字号、粗体、颜色、行高(主标题)
    sht_dashboard.range('B2').value = '销售数据报表'
    sht_dashboard.range('B2').api.font_object.name.set('黑体')
    sht_dashboard.range('B2').api.font_object.font_size.set(48)
    sht_dashboard.range('B2').api.font_object.bold.set(True)
    sht_dashboard.range('B2').api.font_object.color.set([0, 0, 0])
    sht_dashboard.range('B2').row_height = 61.2
    
    # B2单元格到W2单元格的矩形区域, 下边框的粗细及颜色
    sht_dashboard.range('B2:W2').api.get_border(which_border=9).weight.set(4)
    sht_dashboard.range('B2:W2').api.get_border(which_border=9).color.set([0, 176, 80])
    
    # 不同产品总的收益情况图表名称、字体、字号、粗体、颜色(副标题)
    sht_dashboard.range('M2').value = '每种产品的收益情况'
    sht_dashboard.range('M2').api.font_object.name.set('黑体')
    sht_dashboard.range('M2').api.font_object.font_size.set(20)
    sht_dashboard.range('M2').api.font_object.bold.set(True)
    sht_dashboard.range('M2').api.font_object.color.set([0, 0, 0])
    
    # 主标题和副标题的分割线, 粗细、颜色、线型
    sht_dashboard.range('L2').api.get_border(which_border=7).weight.set(3)
    sht_dashboard.range('L2').api.get_border(which_border=7).color.set([0, 176, 80])
    sht_dashboard.range('L2').api.get_border(which_border=7).line_style.set(-4115)

    先配置一些基本内容,比如文字,颜色背景,边框线等,如下图。

    c2370530dd2cb83e4e3958af231ebdaa.png

    使用函数,批量生成四个表格的格式。

    # 表格生成函数.
    def create_formatted_summary(header_cell, title, df_summary, color):
        """
        Parameters
        ----------
        header_cell : Str
            左上角单元格位置, 放置数据
    
        title : Str
            当前表格的标题
    
        df_summary : DataFrame
            表格的数据
    
        color : Str
            表格填充色
        """
    
        # 可选择的表格填充色
        colors = {"purple": [(112, 48, 160), (161, 98, 208)],
                  "blue": [(0, 112, 192), (155, 194, 230)],
                  "green": [(0, 176, 80), (169, 208, 142)],
                  "yellow": [(255, 192, 0), (255, 217, 102)]}
    
        # 设置表格标题的列宽
        sht_dashboard.range(header_cell).column_width = 1.5
    
        # 获取单元格的行列数
        row, col = sht_dashboard.range(header_cell).row, sht_dashboard.range(header_cell).column
    
        # 设置表格的标题及相关信息, 如:字号、行高、向左居中对齐、颜色、粗体、表格的背景颜色等
        summary_title_range = sht_dashboard.range((row, col))
        summary_title_range.value = title
        summary_title_range.api.font_object.font_size.set(14)
        summary_title_range.row_height = 32.5
        # 垂直对齐方式
        summary_title_range.api.verticalalignment = xw.constants.HAlign.xlHAlignCenter
        summary_title_range.api.font_object.color.set([255, 255, 255])
        summary_title_range.api.font_object.bold.set(True)
        sht_dashboard.range((row, col),
                            (row, col + len(df_summary.columns) + 1)).color = colors[color][0]  # Darker color
    
        # 设置表格内容、起始单元格、数据填充、字体大小、粗体、颜色填充
        summary_header_range = sht_dashboard.range((row + 1, col + 1))
        summary_header_range.value = df_summary
        summary_header_range = summary_header_range.expand('right')
        summary_header_range.api.font_object.font_size.set(11)
        summary_header_range.api.font_object.bold.set(True)
        sht_dashboard.range((row + 1, col),
                            (row + 1, col + len(df_summary.columns) + 1)).color = colors[color][1]  # Darker color
        sht_dashboard.range((row + 1, col + 1),
                            (row + len(df_summary), col + len(df_summary.columns) + 1)).autofit()
    
        for num in range(1, len(df_summary) + 2, 2):
            sht_dashboard.range((row + num, col),
                                (row + num, col + len(df_summary.columns) + 1)).color = colors[color][1]
    
        # 找到表格的最后一行
        last_row = sht_dashboard.range((row + 1, col + 1)).expand('down').last_cell.row
        side_border_range = sht_dashboard.range((row + 1, col), (last_row, col))
    
        # 给表格左边添加带颜色的边框
        side_border_range.api.get_border(which_border=7).weight.set(3)
        side_border_range.api.get_border(which_border=7).color.set(colors[color][1])
        side_border_range.api.get_border(which_border=7).line_style.set(-4115)
    
    
    # 生成4个表格
    create_formatted_summary('B5', '每种产品的收益情况', pv_total_profit, 'green')
    create_formatted_summary('B17', '每种产品的售出情况', pv_quantity_sold, 'purple')
    create_formatted_summary('F17', '每月的销售情况', gb_date_sold, 'blue')
    create_formatted_summary('F5', '每日总收入排名Top8 ', gb_top_revenue, 'yellow')

    得到结果如下。

    70bb1867bc1f80a31578cb9a602909b6.png

    可以看到,一行行的数据经过Python的处理,变为一目了然的表格。

    最后再绘制一个matplotlib图表,添加一张logo图片,并保存Excel文件。

    # 中文显示
    plt.rcParams['font.sans-serif']=['Songti SC']
    
    # 使用Matplotlib绘制可视化图表, 饼图
    fig, ax = plt.subplots(figsize=(6, 3))
    pv_total_profit.plot(color='g', kind='bar', ax=ax)
    
    # 添加图表到Excel
    sht_dashboard.pictures.add(fig, name='ItemsChart',
                               left=sht_dashboard.range("M5").left,
                               top=sht_dashboard.range("M5").top,
                               update=True)
    
    # 添加logo到Excel
    logo = sht_dashboard.pictures.add(image="pie_logo.png",
                               name='PC_3',
                               left=sht_dashboard.range("J2").left,
                               top=sht_dashboard.range("J2").top+5,
                               update=True)
    
    # 设置logo的大小
    logo.width = 54
    logo.height = 54
    
    # 保存Excel文件
    wb.save(rf"水果蔬菜销售报表.xlsx")

    此处需设置一下中文显示,否则会显示不了中文,只有一个个方框。

    得到最终的水果蔬菜销售报表。

    8da55be1a16fecdce41778529f111d31.png

    本文的示例代码,可以在Mac+Excel2016中运行的,与Windows还是会有一些区别,API函数的调用(pywin32 or appscript)。

    比如表格文字的字体设置。

    # Windows
    sht_dashboard.range('B2').api.font.name = '黑体'
    
    # Mac
    sht_dashboard.range('B2').api.font_object.name.set('黑体')

    对于Windows版本的,提供了相关的程序文件,在公众号回复「excel报表」,即可获取代码及相关数据。

    获取程序以及数据

    两步即可获得。

    1、点击下方名片,关注公众号人工智能技术非本号
    2、回复关键词:220110

    👆点击关注「人工智能技术」👆

    感兴趣的小伙伴,可以动手尝试一下。无需太多的代码,就能轻松的创建一个Excel报表出来~

    4247bef81b9e556aed3cb7c9b83e2488.png

    END

    往期推荐 点击查看

    用Python写了一个图像文字识别OCR工具

    2022-01-08

    f7e006fd77963a2c2036675e58585aaf.png

    10张思维导图,全面讲解 Pandas

    2022-01-08

    6a9b9925081ebab3f080dbb107e690c3.png

    十行Python代码替换证件照背景颜色

    2022-01-07

    1d058e48d319356f5f355191cf5a4791.png

    一行 Python 代码能实现什么丧心病狂的功能?

    2022-01-05

    3d1a107680b3ec560efbc5848f492834.png

    17个常见的Python运行时错误,你中招了没?

    2022-01-04

    fe76add91c814ecdfdb6101b02f44b5e.png

    a4806d2e05fa19555cd9a2db001db3d8.png

    分享

    b2440bbab81a08c466e9d616eb23c60e.png

    收藏

    99eb8528351cf846220711096a866d94.png

    点赞

    4a874c4635394e101a8823b098ea6456.png

    在看

    展开全文
  • 因为工作中需要,需要生成一个带表格的图片 例如: ...后来考虑使用Python的图片处理库Pillow,和生成表格式的库prattytable,下面的图片是最终生成的图片效果 总体来说是分为两个步骤: 使用prat
  • 通过excel数据源、模板和填入位置的设定,批量生成excel表格,常用于批量生成学生成绩单、工资条、员工信息表等业务场景。
  • 使用 Python 生成 HTML 表格基本没啥难度, for 循环遍历一遍数据并输出标签即可。 如果需要实现合并单元格,或者按需调整表格样式,就比较麻烦了。 这时,可以试试本文的主角 —— html-table 包,借助它可...
  • 通过Python自动化办公把提取word中的表格,填充到到excel当中. 首先通过for循环提取word当中的表格的每个单元格的内容,然后指定excel,进行批量填充
  • 主要介绍了Python读取Excel数据并生成图表过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python操作excel表格有不少组件,如:xlwt、openpyxl、pandas、xlrd、xlwings,一些组件在使用时有问题;这里选用xlwings,从原Excel报表统计后再生成的新Excel表格
  • python xlwt生成Excel

    2022-03-28 11:11:48
    代码示例 # -*- coding: UTF-8 -*- import xlwt def write_excel(): # 创建excel对象 f = xlwt.Workbook() # 添加sheet页 sheet1 = f.add_sheet(u'sheet1', cell_overwrite... # 设置单元格内容自动换行 style.
  • python自动切分excel表格

    千次阅读 2020-05-11 09:15:09
    一、利用loc定位行,直接写入Excel(若切分后的表格比较多,可引入参数) import pandas as pd data=pd.read_excel(r'D:\tmp\data.xlsx') da1=data.loc[0:10000,:] da2=data.loc[10001:20000,:] da3=data.loc[20001:,...
  • 本来想接着写关于web的东西,不过老师突然留了个作业,就是将几百条word上面的数据转化成表格的形式. 但是很尴尬的是…我居然不会用word… 不过,咱们好歹也是学过python的人,写一个这样的脚本很简单. 一.处理的数据的...
  • 由于工作中需要写精算,给的一个Excel中,有大量数据需要写入数据库,一个个写,不知要到何年何月,于是使用Python,利用xlrd模块,解析Excel,将其中需要的数据生成想要的sql语句,根据sql语句插入到数据库,后续会...
  • 在多张表里面找到想要的关键字,并且生成新的表,每张表内如果有关键字会生成一个sheet表会生成列表和关键字的对应行,在数据库里多张数据表找关键字时可以导出成Excel快速定位在那张表并且列名是什么。
  • 本文实例讲述了Python实现导出数据生成excel报表的方法。分享给大家供大家参考,具体如下: #_*_coding:utf-8_*_ import MySQLdb import xlwt from datetime import datetime def get_data(sql): # 创建数据库连接...
  • pandas读取、写入csv数据非常方便,但是有时...pandas可以写入一个或者工作簿,两种方法介绍如下:1、如果是将整个DafaFrame写入excel,则调用to_excel()方法即可实现,示例代码如下:python;toolbar:false"># outp...
  • 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 安装的是Python32bit的工具;把excel表格格式转换成*.csv格式文件;若想删除生成的文件,只需把最后一句放开即可。注:并没有把格式也转换过去。
  • 本文实例讲述了python通过openpyxl生成Excel文件的方法。分享给大家供大家参考。具体如下: 使用前请先安装openpyxl: easy_install openpyxl 通过这个模块可以很方便的导出数据到Excel from openpyxl.workbook ...
  • 本文实例讲述了Python实现抓取网页生成Excel文件的方法。分享给大家供大家参考,具体如下: Python抓网页,主要用到了PyQuery,这个跟jQuery用法一样,超级给力 示例代码如下: #-*- encoding:utf-8 -*- import sys...
  • 最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python表格自动化整理。首先我们有这么一份数据表 source.csv:我们要做的是从上表中提取数据,来生成一份符合以下要求的表格:按照以下...
  • python自动生成sql建表语句,可生成oracle,mysql,teradata建表语句,传入excel生成建表语句
  • 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题。 环境: Windows7 +Python2.7 +Xlwt 具体分析: 原始文件为json列表,列表中有多...
  • Python 自动整理 Excel 表格

    千次阅读 2019-11-27 08:20:00
    作者:TED 来源:TEDxPY相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋...
  • 为了将excel数据自动转换成所需要的erlang数据,听同事说使用python会很方便简单,就自学了两天python,写了一个比较粗糙的python脚本,不过能用,有什么优化的地方请指教 代码如下: #!/usr/bin/env python # -*- ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,986
精华内容 7,594
关键字:

python自动生成excel表格