精华内容
下载资源
问答
  • 有时候管理员需要把数据库中的数据导出来,方便管理员查看核对数据,本小节演示如何在云函数中使用node-xlsx类库把数据生成excel。整个过程分为以下几个过程:(1) 创建云函数,并安装node-xlsx类库;(2) 读取数据库...

    有时候管理员需要把数据库中的数据导出来,方便管理员查看核对数据,本小节演示如何在云函数中使用node-xlsx类库把数据生成excel。整个过程分为以下几个过程:(1) 创建云函数,并安装node-xlsx类库;(2) 读取数据库集合中的所有数据;(3) 通过node-xlsx类库把数据写入excel;(4) 把生成的excel文件上传到云存储,供微信小程序端下载浏览。

    1. 通过node-xlsx类库把数据写入数据库

    可以使用node-xlsx中的xlsx.build([{name: excelname, data: exceldata}])生成excel文件,其中name参数为需要生成的excel名称,data是一个二维数组,每个元素对应一个单元格。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    //1,定义excel表格名

    let excelname = Math.floor(10000* Math.random())+'test.xlsx'

    //2,定义存储数据的

    let exceldata = [];

    let row = ['设备ID', '设备名称', '领用人', '产家', '存放地', '价格', '购买日期', '供货商']; //表属性

    exceldata.push(row);

    //console.log(dbdata.data)

    for (let item of dbdata.data) {

      let arr = [];

      arr.push(item.deviceid);

      arr.push(item.devicename);

      arr.push(item.deviceuser);

      arr.push(item.manufacturer);

      arr.push(item.place);

      arr.push(item.price);

      arr.push(item.purchasedate);

      arr.push(item.supplier);

      exceldata.push(arr)

    }

    // console.log(exceldata)

    //3,把数据保存到excel

    var buffer = await xlsx.build([{

      name: excelname,

      data: exceldata

    }]);

           代码第2行,采用随机数+test.xls方式生成excel名称,防止多次生成excel在存储中出现命名冲突,这里采用逐行数据写入exceldata,其中第5行写入excel第一样数据的title;代码第8-19行把每条记录转行成excel中的一行数据,代码22-25生成excel。

    最后为了提供微信小程序用户下载,需要把生成的excel文件上传至云存储,代码如下:

    1

    2

    3

    4

    await cloud.uploadFile({

        cloudPath: excelname,

        fileContent: buffer, //excel二进制文件

      })

    详细云函数将数据库数据生成excel介绍见微信小程序云开发超详细实战攻略:https://item.jd.com/13038316.html

     

    展开全文
  • 帮阿雪写的一个自动录入表格的小程序

    千次阅读 多人点赞 2020-03-05 22:38:59
    ## 帮阿雪写的一个小程序 --------------------------------------------------------------------------------------------------- 上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是...

    ## 帮阿雪写的一个小程序
    ---------------------------------------------------------------------------------------------------
    上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是很烦躁,
    阿雪刚开学的时候,作为班干部,表示有时候刚录表不是很熟悉经常会弄到很晚,甚至还会弄错,
    这就让我很是触动,所以想帮她搞一搞,顺便增强一下我们的友谊/hhhhhh

    ---------------------------------------------------------------------------------------------------

    思路:

    第一步: 信息还是要填的,以往是同学们发给班委,然后慢慢来搞,但现在不一样的,我要求同学们把他们要填的信息写在记事本里面,内容之间用中文逗号隔开,然后在发给我就行。

    第二步: 阿雪只要做的事情是把每个小朋友发的txt文本点击下载就行了,这个显然很简单的事情。

    第三步: QQ个人接受的文件一般都会在 (FileRecv)这个文件夹内,每个朋友QQ存放的位置不一样我这里就不详细说明了,我自己存放的位置是:(r’D://qq//qq文档//‘我的qq号’/FileRecv//) 我们把这个路径就姑且叫做qq_path吧!这个路径我们需要事先写入代码内,我这里定义的函数是copy_file()内:具体思想对了就行。

    第四步: 整个程序没啥操作难度,根据提示填入指令就行,都是批量处理,函数中我设置了时间间隔,我个人感觉这样能让程序有个停顿感,更友好一点吧。

    函数库:

    1. os库: 用于创建文件夹,修改路径,确定路径,文件遍历等操作
    2. csv库: 用于表格的录入
    3. time库: 用于程序停顿感
    4. pandas库: 用于csv和xlsx格式之间的转换
    5. shutil库: 用于文件的复制

    复制函数:把qq接受的文件全部转移到我们指定的位置便于操作

    def copy_file():  # 将qq地址下的文本文件转移到文本存放处待用
        qq_path = r'D://qq//qq文档//qq//FileRecv//'  # 文本在qq的位置
        for filename in os.listdir(qq_path):
            txt_path = os.path.join(qq_path, filename)  # 拼接这二个地址 进行判断
            if txt_path[-4:] == '.txt':
                if txt_path[-5:-4] in [str(i) for i in range(10)]:
                    # 取后缀判断 取学号判断 是否是我们需要的txt
                    shutil.copy(txt_path, patht)  # 进行复制
                    os.remove(txt_path)  # 删除在qq地址的文件 避免下次录入 文本过多
                elif txt_path[-6:-4] in [str(i) for i in range(10, 66)]: # 班级人数个人设定
                    shutil.copy(txt_path, patht)  # 进行复制
                    os.remove(txt_path)  # 删除在qq地址的文件 避免下次录入 文本过多
    
        return qq_path
    
    

    信息的录入:遍历文件夹,逐一读入文本,将得到的信息放入列表

    def luru():
        # 把文本以学号保存 文本里面信息用中文逗号分隔
        qq_path = copy_file()  # 复制文本到patht
        listss = []  # 录入信息列表
        filenamepath = []  # 文件名称地址
        pathtxt = r'D://测试文件//文本存放处//'
        for filename in os.listdir(pathtxt):  # 遍历文本存放处所有的文件
            filenamepath.append(os.path.join(pathtxt, filename))
        print("当前目录{}存放着{}个文件:".format(pathtxt, len(filenamepath)))
        if len(filenamepath) == 0:
            print('请确保文件正确存放在{}处:'.format(qq_path))
        for i in range(len(filenamepath)):  # 遍历这个列表  获得绝对地址
            with open(filenamepath[i], "r", encoding='utf-8') as fo:
                for j in fo:
                    listss.append(j.split(','))
    
        return listss
    
    

    在这里我加了一个小判断,如果录入文本信息为0,那么可能qq接受信息地址没有填对,路径没有很好的确定,导致这个bug

    表格的录入:这个就很简单了,利用os库和csv库

    def wubiaotou():
        name = input("重命名该表格名称:")
        with open(pathb + name + ".csv", "a+", newline='') as fo:
            num = input("请输入表头,并用中文逗号分隔开:")
            headers = num.split(",")
            # headers = ["国籍","民族","省份"]
            fr_csv = csv.writer(fo)
            fr_csv.writerow(headers)
            fr_csv.writerows(lists)
    
        pathnamew = pathb + name + '.csv'
        time.sleep(0.5)
        successful(pathnamew)
        time.sleep(2)
        demo()
    
    

    删除功能:象征性的写了一下,为了把功能完善一点。

    def del_s(path_, fg):
        os.chdir(path_)  # 进入path_存放处地址
        biaonumber = len(os.listdir(path_))
        print("当前目录下{}存在{}个文件:".format(path_, biaonumber))
        if biaonumber == 0:
            print("无需删除,当前目录下存在{}个文件".format(biaonumber))
        else:
            delnum = input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",")
            if delnum[0] == 'all':  # 当索引第一个为all则删除全部
                for filename in os.listdir(path_):  # 遍历这个文件夹
                    os.remove(os.path.join(path_, filename))
                time.sleep(0.5)
                print("已经删除{}目录下所有文件!".format(path_))
            else:  # 删除输入的表格名称
                for i in range(len(delnum)):
                    fn = str(delnum[i]) + fg
                    os.remove(os.path.join(path_ + fn))
                time.sleep(0.5)
                print("已经删除{}目录下{}个文件!".format(path_, len(delnum)))
        time.sleep(2)
        demo()
    
    
    

    整个代码不是很难理解,仔细看看应该都能明白,相信你们,奥力给,干了兄弟们!

    全部代码如下:

    # -*- coding :  utf-8 -*-
    # @Time      :  2020/3/2  18:38
    # @author    :  沙漏在下雨
    # @Software  :  PyCharm
    import os
    import csv
    import time
    import pandas as pd
    import shutil
    
    path = r'D://测试文件//'
    if not os.path.exists(path):  # 创建这个存放文件的大目录
        os.mkdir(path)
    
    patht = path + "文本存放处//"
    if not os.path.exists(patht):  # 创建这个存放文本的文件夹
        os.mkdir(patht)
    
    pathb = path + "表格存放处//"
    if not os.path.exists(pathb):  # 创建这个存放表格的文件夹
        os.mkdir(pathb)
    
    
    def copy_file():  # 将qq地址下的文本文件转移到文本存放处待用
        qq_path = r'D://qq//qq文档//qq//FileRecv//'  # 文本在qq的位置
        for filename in os.listdir(qq_path):
            txt_path = os.path.join(qq_path, filename)  # 拼接这二个地址 进行判断
            if txt_path[-4:] == '.txt':
                if txt_path[-5:-4] in [str(i) for i in range(10)]:
                    # 取后缀判断 取学号判断 是否是我们需要的txt
                    shutil.copy(txt_path, patht)  # 进行复制
                    os.remove(txt_path)  # 删除在qq地址的文件 避免下次录入 文本过多
                elif txt_path[-6:-4] in [str(i) for i in range(10, 66)]:
                    shutil.copy(txt_path, patht)  # 进行复制
                    os.remove(txt_path)  # 删除在qq地址的文件 避免下次录入 文本过多
    
        return qq_path
    
    
    def luru():
        # 把文本以学号保存 文本里面信息用中文逗号分隔
        qq_path = copy_file()  # 复制文本到patht
        listss = []  # 录入信息列表
        filenamepath = []  # 文件名称地址
        pathtxt = r'D://测试文件//文本存放处//'
        for filename in os.listdir(pathtxt):  # 遍历文本存放处所有的文件
            filenamepath.append(os.path.join(pathtxt, filename))
        print("当前目录{}存放着{}个文件:".format(pathtxt, len(filenamepath)))
        if len(filenamepath) == 0:
            print('请确保文件正确存放在{}处:'.format(qq_path))
        for i in range(len(filenamepath)):  # 遍历这个列表  获得绝对地址
            with open(filenamepath[i], "r", encoding='utf-8') as fo:
                for j in fo:
                    listss.append(j.split(','))
    
        return listss
    
    
    lists = luru()
    
    
    def youbiaotou():
        print("请将带有表头的表格事先放入{}处待用:".format(pathb))
        names = input("请输入该表格名称:")
        pathnamey = pathb + names + ".xlsx"  # 获得原xlsx的地址
        # 使用pandas 讲 xlsx 转换为 csv 格式 便于后续操作
        date_xlsx = pd.read_excel(pathnamey, index_col=0)
        pathnamec = pathb + names + '.csv'
        date_xlsx.to_csv(pathnamec, encoding='utf_8_sig')  # 防止转换时候编码错误
        with open(pathnamec, "a+", encoding='utf-8', newline='') as fo:
            fw_csv = csv.writer(fo)
            fw_csv.writerows(lists)  # 写入多行
        time.sleep(0.5)
        successful(pathnamec)
        time.sleep(2)
        demo()
    
    
    def successful(pathname):  # 录入成功标识
        print("表格制作成功!".center(38, '-'))
        print("表格位置:{}".format(pathname))
        print("--" * 22)
    
    
    def wubiaotou():
        name = input("重命名该表格名称:")
        with open(pathb + name + ".csv", "a+", newline='') as fo:
            num = input("请输入表头,并用中文逗号分隔开:")
            headers = num.split(",")
            # headers = ["国籍","民族","省份"]
            fr_csv = csv.writer(fo)
            fr_csv.writerow(headers)
            fr_csv.writerows(lists)
    
        pathnamew = pathb + name + '.csv'
        time.sleep(0.5)
        successful(pathnamew)
        time.sleep(2)
        demo()
    
    
    def helpss():  # 帮助信息
        helptxt = ('说明:\t该程序主要作用是实现简单的自动录入表格功能\n\n'
                   '格式:\t文本信息写入记事本并用中文逗号将内容隔开,命名规则为学生学号\n\n'
                   '操作:\t只需要事先获得本台机器腾讯QQ文件保存地址即(FileRecv地址)'
                   '将其事先写入代码内\n\n'
                   '备注:\t程序自动将文本打包放入文本存放处(具体位置:{0})进行后续操作\n\n'
                   '\t若调用模块有表头录入功能,请事先将待用表格放入({1})处待用\n\n'
                   '\t最后表格将放入表格存放处(具体位置:{2})进行查看\n\n'
                   '\t同时程序功能还实现了批量删除文本和表格功能供给选择\n\n'
                   '\t若存在相同名称表格的不同格式'
                   '则优先删除(.csv)格式的表格\n\n'.format(patht, pathb, pathb))
        with open(path + '帮助信息.txt', "w", encoding='utf-8') as fo:
            fo.write(helptxt)
        if os.path.exists(path + '帮助信息.txt'):
            # newname = '帮助信息.txt'
            # os.rename(path+'helptxt.txt',path+newname)
            os.system(path + '帮助信息.txt')
    
        demo()
    
    
    def del_s(path_, fg):
        os.chdir(path_)  # 进入path_存放处地址
        biaonumber = len(os.listdir(path_))
        print("当前目录下{}存在{}个文件:".format(path_, biaonumber))
        if biaonumber == 0:
            print("无需删除,当前目录下存在{}个文件".format(biaonumber))
        else:
            delnum = input("请输入要删除的文件名称,并用中文逗号隔开,若输入all则全部删除:").split(",")
            if delnum[0] == 'all':  # 当索引第一个为all则删除全部
                for filename in os.listdir(path_):  # 遍历这个文件夹
                    os.remove(os.path.join(path_, filename))
                time.sleep(0.5)
                print("已经删除{}目录下所有文件!".format(path_))
            else:  # 删除输入的表格名称
                for i in range(len(delnum)):
                    fn = str(delnum[i]) + fg
                    os.remove(os.path.join(path_ + fn))
                time.sleep(0.5)
                print("已经删除{}目录下{}个文件!".format(path_, len(delnum)))
        time.sleep(2)
        demo()
    
    
    def demo():  # 目录因素
        fix = '-' * 44
        title = '文本录入表格系统'.center(38, '-')
        helps = '使用说明请输入数值 1'.center(40, ' ')
        fit1 = '模板无表头请输数值 2'.center(40, ' ')
        fit2 = '模板有表头请输数值 3'.center(40, ' ')
        del1 = '删除文本请输入数值 4'.center(40, ' ')
        del2 = '删除表格请输入数值 5'.center(40, ' ')
        fix = '-' * 44
        c = ['fix', 'title', 'helps', 'fit1', 'fit2', 'del1', 'del2', 'fix']
        for i in c:
            print('{}'.format(eval(i)))
        control = input("请输入你的数值:")
        if control == '1':
            helpss()
        elif control == '2':
            wubiaotou()
        elif control == '3':
            youbiaotou()
        elif control == '4':
            fg = '.txt'
            del_s(patht, fg)
        elif control == '5':
            fg = '.csv'
            del_s(pathb, fg)
        else:
            print("输入选项错误!")
    
    
    demo()
    
    
    展开全文
  • 来源:法纳斯特大家好,我是阳哥。之前阳哥分享了不少用 Python 操作 excel 的内容。今天继续来分享一篇,使用Python自动化生成数据报表!从一条条的数据中,创建出一张数据报表,...

    来源:法纳斯特

    大家好,我是阳哥。之前阳哥分享了不少用 Python 操作 excel 的内容。

    今天继续来分享一篇,使用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版本的,也提供了相关的程序文件,在点击下面卡片,回复「excel报表」,即可获取代码及相关数据

    展开全文
  • searchParam=' + this.data.inputVal, header: { "content-type": "application/vnd.ms-excel", auth: auth, }, success(res) { console.log(res); if (res.statusCode === 200) { let savePath = wx.env.USER_DATA_...
    	<view  bindtap="exportData">导出</view>
    
    // 导出
      exportData() {
        const auth = wx.getStorageSync("auth");
        wx.showLoading({
          title: "加载中",
        });
        wx.downloadFile({
          //下载
          url: configAPI.exportPlanList + '?searchParam=' + this.data.inputVal,
          header: {
            "content-type": "application/vnd.ms-excel",
            auth: auth,
          },
          success(res) {
            console.log(res);
            if (res.statusCode === 200) {
              let savePath =
                wx.env.USER_DATA_PATH + "/TESUN_PLAN_" + Date.now() + '.xls';
              wx.getFileSystemManager().saveFile({
                //下载成功后保存到本地
                tempFilePath: res.tempFilePath,
                filePath: savePath,
                success(res) {
                  wx.hideLoading();
                  console.log(res);
                  let savePath = res.savedFilePath;
                  wx.showModal({
                    title: "下载成功",
                    content: "是否打开?",
                    confirmColor: "#0bc183",
                    confirmText: "打开",
                    success(res) {
                      if (res.confirm) {
                        wx.openDocument({
                          //打开
                          filePath: savePath,
                          showMenu: true,
                          success(res) {
                            console.log(res);
                          },
                        });
                      } else if (res.cancel) {}
                    },
                  });
                },
                fail(err) {
                  wx.hideLoading();
                  wx.showModal({
                    title: '提示',
                    content: "文件下载失败",
                    showCancel: false, //是否显示取消按钮
                    success: function (result) {}
                  })
                },
              });
            } else {
              wx.hideLoading();
              wx.showModal({
                title: '提示',
                content: "文件下载失败",
                showCancel: false, //是否显示取消按钮
                success: function (result) {}
              })
            }
          },
          fail(err) {
            wx.hideLoading();
            wx.showModal({
              title: '提示',
              content: "文件下载失败",
              showCancel: false, //是否显示取消按钮
              success: function (result) {}
            })
          }
        });
      },
    
    展开全文
  • Excel 数据录入 使用填充柄快速录入数据 常见应用场景: 快速生成序列 快速复制公式进行计算 快速填充提取规律信息 ...... Excel 数据规范 Excel 数据类型 Excel 自定义数字格式 在...
  • 内含 抽奖小程序 及 名单生成工具, 使用时将两个小程序放在 同一目录下 先用名单生成工具生成名单 打开工具,按照提示输入要创建的参与抽奖的人数 输入每个人的编号及姓名(每行一个编号+“空格”+姓名,打开程序...
  • 汽车控制器CAN通信DBC文件工具:EXCEL生成DBC和生成代码汽车控制器CAN通信DBC文件工具:从EXCEL生成DBC和生成代码AutoCANdbAutoCANdb限制效果图 汽车控制器CAN通信DBC文件工具:从EXCEL生成DBC和生成代码 目前汽车...
  • Excel抽奖程序(春节抽奖)

    千次下载 热门讨论 2011-01-17 21:48:32
    1、抽奖前请在Excel“工具”-“宏”-“安全性”中将宏的安全级别设置为低,然后关闭Excel重新打开,否则无法运行抽奖程序。 2、本程序支持六个固定级别的奖项设置和一个自定义的奖项设置。 3、抽奖顺序有两种,即...
  • 由于最近在背日语单词,把一些单词...所以花了半小时写了个功能,目的是把录入的几百个单词随机生成后写成另一个EXCEL文件。用来达到看见日语就能想到中文 看到中文就能想到日文的目的。 原EXCEL形式是: A ...
  • 请下载文件,并将文件解压后存到你希望的...1. 行或列数据均可使用作为数据标签.(程序自动判断) 2.可引用其他表的单元格. 3.可部分(选择系列的某一点)修改. 4.引用单元格的数量可少与系列点数. 5.对出错的数据也能引用.
  • 文章目录VBA基础一.了解VBA1.进入vba2.认识宏二. VBA编程1.hello world2.调出立即窗口和本地窗口3.debug显示4....最近公司有个需求,提前让数据库表结构在excel模板中设计,然后再建对应的数据库DB。字
  • 提高EXCEL录入速度十大绝招(转) 因工作的需要,我常常用EXCEL处理大量的表格文档,感到一个最头痛的问题就是文本的录入,由于本人的录入速度不高,使我不得不常常加班加点地干,才能勉强完成老板交给的任务。...
  • 教您在Excel中批量生成二维码

    千次阅读 2020-08-13 13:13:03
    Excel中批量生成带企业LOGO的二维码,需要用到一个工具“批量生成二维码和条形码V7.3”,可以在以下网址下载: https://wws.lanzous.com/iIZ5Af5wiqb 当下载软件以后,双击安装即可。安装后打开Excel可以看到...
  • 本章从设计窗体开始,到编写窗体事件、类模块中的应用程序事件、生成功能区菜单,以及发布加载宏,一步步展示数据录入助手的开发过程。本章不仅教授Excel插件的开发思路,也为每位读者提供了一个高效的Excel辅助...
  • Const PROG_ID_EXCEL = "Excel.Application" Const PROG_ID_XML1 = "Msxml2.DOMDocument" Const PROG_ID_XML2 = "Microsoft.XMLDOM" Const PROG_ID_DICT = "Scripting.Dictionary" Const PROG_ID_STREAM = ...
  • 作者:青春阳光kinghttps://blog.csdn.net/Jacky_kplin/article/details/104367844python实现word...最近在开发一个答题类的小程序,到了录入试题进行测试的时候了,发现一个问题,试题都是word文档格式的,每份有10...
  • 借助POI实现Java生成并打印报表(Excel)

    千次阅读 2013-12-21 17:41:36
    10.1、了解 Apache POI  实际开发中,用到最多的是把数据库中数据...利用Apache POI实现数据库中数据导出生成excel报表。在java众多数据导出excel报表的第三方jar包中POI相对来说比较好用。    Apache POI
  • 为了展示数组应用对程序的禆益,这里特地采用两种方式实现案例需求,数组方法的代码如下: 图13.10 成绩表 思路分析: (1)以上过程中使用了arr1和arr2两个数组变量,第一个变量是直接调用区域的值,数组的维数和...
  • 9.1 Application应用案例 Application对象代表Excel 2010应用程序,它包含2个方法、203个属性和43个事件,本节针对其中常用的属性和方法展开案例演示。 9.1.1 计算字符表达式 案例要求:将如图9.1所示的工作表中...
  • 第6章 深入剖析常见对象的引用方式 Excel 制表工作就是频繁地操作各种对象,因此对象对于Excel VBA而言是极其重要的,几乎每一段程序中都会出现对象。尽管也可以刻意编写出几段不含任意对象的VBA代码,然而那已经...
  • “Insert”菜单中的前两个菜单分别代表生成Excel 2010格式的xml文件和Excel 2007格式的xml文件。如果单击第一个菜单后输入定制功能区的代码,那么此文件只能在Excel 2010中才会正常显示自定义的功能区组件,如果...
  • 本书不涉及VBA插件的开发教学,如果读者有兴趣可以翻看笔者的另外两本著作——《Excel VBA程序开发自学宝典(第2版)》和《Excel 2010 VBA编程与实践》,这两本书中有关于设计VBA插件的相关知识。
  • 同时,由于Excel VBA允许程序自动化执行,这无疑连按键的工夫也省了,从而将VBA的潜力发挥得更彻底了。 VBA代码自动化执行主要通过自动宏和事件来实现,本章的重点在于介绍工作簿事件和工作表事件。尽管应用程序事件...
  • step1 单击菜单中的“工程”→“添加模块”命令,并在模块中录入以下用于声明公共变量的代码:Public xlApp As Excel.Application '声明一个公共变量,代表Excel应用程序 step2 在工程资源管理器中对设计器...
  • 查询股票或者天气信息、按字体颜色汇总、分页计、底端标题等都是Excel本身不具备的功能,借助加载宏却可以实现。 在扩展名为xlsm的工作簿中添加了生成功能区选项卡的xml代码后,只有打开该工作簿才能看到新建的...
  • step3 单击菜单中的“插入”→“模块”命令,然后在模块中录入FSO相关的代码,之后会发现VBA会弹出FSO对象的属性与方法列表,效果如图18.2所示。 图18.1 前期绑定FSO 图18.2 自动列出成员 2.后期绑定 后期绑定...
  • Application.Inputbox方法允许用户录入公式、数字、文本、逻辑值、单元格引用、错误值和数值数组等7种类型的值,同时也提供一个参数让程序去限制用户只能录入某种类型的值,并且带有校验功能,当录入的值与指定的...
  • 所以对函数每赋值一次就要判断一次函数的值是否等于True,如果是True则直接结束循环,不需要再计算其他工作表的图形对象数量,从而节约程序的执行时间。 图16.2 判断工作簿中是否有图形对象 点评:当工作簿中的图形...
  • 善用窗体和窗体中的控件可以使自己的程序更具个性化,并增强Excel的功能。 17.1 UserForm简介 UserForm即用户窗体,通过窗体可以操作工作簿、工作表、单元格、批注、图形对象等,也可以利用窗体设计一个单独的操作...
  • 第1章 初步感受VBA的魅力 简单地说,Excel VBA是依附于Excel程序的一种自动化语言,它可以使程序自动执行、批量执行、定时执行……类似于DOS操作系统中后缀名为“.bat”的批处理文件,但它比DOS系统的批处理功能更...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,887
精华内容 1,154
关键字:

录入生成excel小程序