精华内容
下载资源
问答
  • 进步奖学生进步率20名,如有并列,也制作奖状,进步率为:(本周成绩-上周成绩)/上周成绩 ,生成所有做奖状的学生名单,放入excel表格 四,为符合条件的每学生制作png形式的奖状 五,将每个班级的奖状放到...

    一,从excel表格中提取所有学生姓名,班级,成绩数据
    二,按要求筛选学生名单,优秀学生选成绩前20名,如有并列,也制作奖状;进步奖学生取进步率前20名,如有并列,也制作奖状,进步率为:(本周成绩-上周成绩)/上周成绩
    三,生成所有做奖状的学生名单,放入excel表格
    四,为符合条件的每位学生制作png形式的奖状
    五,将每个班级的奖状放到同一个ppt中

    奖状图片模板以及excel的格式如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    请大家多多指教,代码如下:

    // A code block
    
    // An highlighted block
    ##### 本版本是ppt版 #####
    import datetime, time, pptx
    import pandas as pd  # 数据处理
    from docx.shared import RGBColor
    from PIL import Image, ImageDraw, ImageFont
    from pptx.util import Inches
    
    
    # 用户选择奖状类型
    def tesSpecies():
        while True:
            info = input('请选择您要打印的奖状种类【1(优秀奖状);2(进步奖状)】请输入‘1’或‘2’:')
            if info == '1':
                info = '优秀奖状'
                break
            elif info== '2':
                info = '进步奖状'
                break
            else:
                print('您输入的格式不正确,请重新输入')
        return info
    
    # 用户选择成绩周期week,第几周的成绩数据
    def week():
        while True:
            week = input('请输入成绩周期(例如:第十一周):')
            if week is None:
                print('您未输入内容,请重新输入')
            else:
                break
        return week
    
    
    # 用户输入存储成绩数据的excel文件
    def filename():
        while True:
            filename = input('请输入存放成绩数据的文件名称(例如:x.xls)')
            if filename.endswith('.xls') is False:
                print('输入的文件类型必须是excel表格,请重新输入')
            else:
                break
        print('请稍等,奖状制作中......')
        return filename
    
    # 优秀奖状-从文件中提取所有学生信息,并按总成绩排序
    def goodFileName(file, sheetName, columnName, sortColumn):
        products = pd.read_excel(file, sheet_name=sheetName, usecols=columnName)  # 数据类型为frame.DataFrame
        # 按‘综合成绩’降序排列,取前20名,tail(n)为取尾n行
        students = products.sort_values(by=sortColumn, ascending=False)
        return students
    
    # 进步奖状-从文件中提取所有学生信息,并按进步率排序
    def progressFileName(file, sheetName, columnName):
        products = pd.read_excel(file, sheet_name=sheetName, usecols=columnName)
        # 增加’进步率‘列,按'进步率‘排列,tail(n)为取尾n行
        products['进步率'] = products.apply(lambda x: (x['综合成绩'] - x['上周课综合成绩']) / x['上周课综合成绩'], axis=1)
        students = products.sort_values(by="进步率", ascending=False)
        return students
    
    # student类,属性:姓名,班级,分数
    class student(object):
        def __init__(self, name, major, grade, score):
            self.name = name  # student的姓名属性
            self.major = major  # student的专业属性
            self.grade = grade  # student的班级属性
            self.score = score  # student的分数属性
    
    
    # 检查是否有排名并列的学生,获得最终获奖学生名列表
    def isRanking(namelt, species):
        # 将前20名同学名单放入优秀学生列表
        goodStu = namelt[0:20]
        # 优秀奖状人名单
        if species == '优秀奖状':
            # 检查是否有跟第20名分数相同的同学,如果有也加入到优秀学生列表
            for i in range(20, len(namelt)):
                if scorelt[i] == scorelt[19]:
                    goodStu.append(namelt[i])
        # 进步奖状人名单
        else:
            for i in range(20, len(namelt)):
                if proRatelt[i] == proRatelt[19]:
                    goodStu.append(namelt[i])
        return goodStu
    
    
    # 获得奖状的学生名单
    def nameList(students, counter):
        goodStudentDetail = students.head(counter)
        goodStudent = goodStudentDetail['学生姓名']
        # 建立学生名单列表
        nameList = []
        for name in goodStudent:
            nameList.append(name)
        return nameList
    
    
    # 获优秀奖学生根据班级信息排序后的详情
    def goodClassInfo(students, counter):
        classInfoList1 = (students.iloc[:, [0, 1, 2, 3]]).head(counter)  # 根据排名取前counter名学生信息
        classInfoList = classInfoList1.sort_values(by=['专业', '班级'], ascending=[False, True])  # 根据班级信息排序
        return classInfoList
    
    # 获进步奖学生根据班级信息排序后的详情
    def progressClassInfos(students,counter):
        classInfoList1 = (students.iloc[:, [0, 1, 2, 5]]).head(counter)
        classInfoList = classInfoList1.sort_values(by=['专业', '班级'], ascending=[False, True])
        return classInfoList
    
    # 打印开始时间
    print(time.strftime('%I:%M:%S'))
    # 用户选择奖状类型
    species = tesSpecies()
    # 用户输入成绩是第几周的
    week = week()
    # 用户输入数据来源的文件名
    filename = filename()
    
    # 优秀奖状
    if species == '优秀奖状':
        # 从excel文档中提取优秀学生的数据
        students = goodFileName(filename, f'{week}-成绩详情', 'A,E,F,K', '综合成绩')
    # 进步奖状
    else:
        # 从excel文档中提取优秀学生的数据
        students = progressFileName(filename, f'{week}-成绩详情','A,E,F,K,M')
    
    namelt, majorlt, gradelt, scorelt ,proRatelt = [], [], [], [], []
    # 将每位学生的姓名,专业,班级,分数,进步率分别放入对应的列表
    for name in students.iloc[:, 0]:
        namelt.append(name)
    for major in students.iloc[:, 1]:
        majorlt.append(major)
    for grade in students.iloc[:, 2]:
        gradelt.append(grade)
    for score in students.iloc[:, 3]:
        scorelt.append(score)
    if species != '优秀奖状':
        for proRate in students.iloc[:,5]:  # 进步率
            proRatelt.append(proRate)
    # 获得获奖学生名单列表
    goodStu = isRanking(namelt, species)
    # 统计优秀学生总人数
    counter = len(goodStu)
    
    # 调取获奖学生的名字名单
    nameList = nameList(students, counter)
    # 调取优秀学生的详细信息
    if species == '优秀奖状':
        classInfoList = goodClassInfo(students, counter)
    # 将优秀学生的详细信息放入excel
        classInfoList.to_excel(f"{species}学生-详细名单-{week}.xlsx")
    
    else: # 进步
        classInfoList = progressClassInfos(students, counter)
        classInfoList.to_excel(f"{species}学生-详细名单-{week}.xlsx")
    
    # 当前日期
    a = datetime.datetime.now()
    today = f'{a.year}年{a.month}月{a.day}日'
    # 逐一打印奖状
    name = ''
    gradeSet = set()  # 设置一个空的班级名集合,用于收集班级的信息同时去重
    pngFileName = []  # 将所有制作好的奖状名称放入这个文件名列表
    for num in range(len(nameList)):
        name = nameList[num]  # 将name变量附上名字的值,用于类的实例化,并且不会对namelt列表中的值造成影响
        name = student(namelt[num], majorlt[num], gradelt[num], scorelt[num])
    
        # line = name.strip('\n')  # 去掉列表中每一个元素的换行符
        if species == '优秀奖状':
            picture = '1优秀奖状模板.png'
        else:
            picture = '1进步奖状模板.png'
        old_img = Image.open(picture)
        draw = ImageDraw.Draw(old_img)
        # 设置图片文字,字体类型,'simkai.ttf'为字体文件路径,以及字体大小,颜色
        newFont1 = ImageFont.truetype('simkai.ttf', 38)  # 名字的字体的文件名/路径 字体大小
        newFont2 = ImageFont.truetype('simhei.ttf', 33)  # 日期的字体(字体文件路径) 大小
        newColor = RGBColor(0, 0, 0)  # 通过RGB设置学生名字的颜色
        # 分别设置文字的字体及位置
        draw.text((196, 190), nameList[num], font=newFont1, fill=newColor)
        draw.text((660, 570), today, font=newFont2, fill=newColor)
        # 奖状的名字.png
        save_address = str(name.major) + '-' + str(name.grade) + '-' + nameList[num] + f'-{species}-' + time.strftime(
            '%Y%m%d')  # + '.png'
        old_img.save(save_address + '.png', 'png')  # 可以直接将png卸载名字上,此处是方便将文件改成jpg格式的命名,所以分开写
        # 将奖状从png格式改成jpg格式(因为RGB不能直接写成jpg)
        pngName = save_address + '.png'
        # 也可以制作jpg的图片,代码如下:
        # jpgName = save_address + '.jpg'
        # 将RGB转换
        # im = Image.open(pngName)
        # rgbIm = im.convert('RGB')
        # rgbIm.save(jpgName)
    
        # 将班级信息存入集合中,方便去重
        gradeSet.add(f'{name.major}-{name.grade}')
        # 将奖状名称放入列表
        pngFileName.append(pngName)
    
    # 将班级信息转为列表,方便使用下标操作
    gradeList = []
    for grade in gradeSet:
        gradeList.append(grade)
    # 将同一班级的奖状放到同一个列表中,再创建班级的ppt文件
    for num in range(len(gradeList)):
        gradeName = gradeList[num]  # 提取班级名称
        grade = []  # 为这个班级建空列表
        # 对奖状分班
        for file in pngFileName:
            if gradeList[num] in file:
                grade.append(file)
        gradeLen = len(grade)
        print(f'{gradeName}班,共{gradeLen}名学生获得{species}')
        # 制作这个班级的PPT文件
        ppt_file = pptx.Presentation()
        for fn in grade:
            slide = ppt_file.slides.add_slide(ppt_file.slide_layouts[1])
            slide.shapes.add_picture(fn, Inches(0), Inches(0), Inches(10), Inches(7.5))
        ppt_file.save(f'{gradeName}-{week}-{species}-{today}.ppt')
    
    # 统计奖状数,提示打印结束
    print(f'共打印奖状{counter}个\n{species}荣誉证书制作完成!')
    # 打印结束时间
    print(time.strftime('%I:%M:%S'))
    
    
    展开全文
  • EXCEL常用公式

    2019-09-24 19:02:07
    =LOOKUP(MID(A2,3.2),{“01”,”02”,”03”},{“一班”,”二班”,”三班”})1203002 A2列从第三位取两位 =RANK(D3,$D2:2:2:D21,0)对D3在D2到D21经行排位并且返回排位值=LEFT(C3,3)当前列前三个字符=IF...

    针对MSoffice第一套到第十一套的公式提取
    =LOOKUP(MID(A2,3.2),{“01”,”02”,”03”},{“一班”,”二班”,”三班”})取1203002 取A2列从第三位取两位
    =RANK(D3,$D2:2:D21,0)D3D2D21=LEFT(C3,3)=IF(WEEKDAY(A3,2)>5,"","")2013120=VLOOKUP(E321,0) 对D3在D2到D21 经行排位并且返回排位值 =LEFT(C3,3) 取当前列前三个字符 =IF(WEEKDAY(A3,2)>5,"是","否")判断一个日期是否为周末 日期格式为2013年1月20日星期日 =VLOOKUP(E3,费用对照表!A3:3:BKaTeX parse error: Expected 'EOF', got '&' at position 426: …03 =MID(F3,7,4)&̲"年"&MID(F3,11,2…D3:3:D72,E3,72,E3,授课信息表!F3:3:F$72)

    展开全文
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    取前五名,后五名的方法 如何用公式求出最大值所在的行? 求多个最高分 如何求多条件的平均值 想求出第大之数值 【查询和查找引用】 查找顺序公式 怎样实现精确查询 查找及引用 查找函数的应用 怎么能方便的判断...
  • JXL读取Excel精度问题

    千次阅读 2015-05-11 14:53:21
    在根据得到的值来转换为各种类型,但是我有几个表格中的数据值是小数点后五位,怎么都得到的是三位小数,网上找了一下资料说,excel的表格设置为文本框,还是一样的效果,没办法就看了下jxl这个以部

    前段时间项目有需要要求读取excel中的数据,我就想到了用jxl类库来实现,jxl用起来挺简单的,原来也用过,我取值的时候是这样写的

    sheet.getCell(17,i).getContents()

    在根据得到的值来转换为各种类型,但是我有几个表格中的数据值是小数点后五位,怎么取都得到的是三位小数,网上找了一下资料说,excel的表格设置为文本框,还是一样的效果,没办法就看了下jxl这个以部分的源码

    /**
       * The number format
       */
      private NumberFormat format;
    
      /**
       * The string format for the double value
       */
      private static final DecimalFormat defaultFormat =
        new DecimalFormat("#.###");
    
    /**
       * Constructs this object from the raw data
       *
       * @param t the raw data
       * @param fr the available formats
       * @param si the sheet
       */
      public NumberRecord(Record t, FormattingRecords fr, SheetImpl si)
      {
        super(t, fr, si);
        byte[] data = getRecord().getData();
    
        value = DoubleHelper.getIEEEDouble(data, 6);
    
        // Now get the number format
        format = fr.getNumberFormat(getXFIndex());
        if (format == null)
        {
          format = defaultFormat;
        }
      }
    
      /**
       * Accessor for the value
       *
       * @return the value
       */
      public double getValue()
      {
        return value;
      }
    /**
       * Returns the contents of this cell as a string
       *
       * @return the value formatted into a string
       */
      public String getContents()
      {
        return format.format(value);
      }



    在源码中你会看到对于double类型的数据,当你用getContents()这个方法的时候,jxl会默认解析为三位小数的数据,找到原因就好解决了

    NumberCell cell = (NumberCell) zyysSheet.getCell(18,i);
    				fzwz = cell.getValue();
    我们可以把对于是数据类型的数据强转为NumberCell的其实也就是NumberRecord这个类,然后在去直接取值就好了

    展开全文
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行后列之...
  • Excel新增工具集

    2011-12-20 09:30:27
    8、当前工作表中每行记录都独立拆分到独立工作簿:可用于制作每职工的工资条。 9、当前工作表中行记录按某一列指定的类别拆分成组工作簿:类似Excel自带的高级筛选功能,可以把一个年级各班都在同一个工作表上的...
  • 1. 几个常用的汇总公式 A列求和:=SUM(A:A) A列最小值:=MIN(A:A) A列最大值:=MAX (A:A) ...文本前三位:Left(A2,3)A2单元格中的文本从左边向右3位 文本后四位Right(a2,4) A2单元格中的文...

    1. 几个常用的汇总公式

    A列求和:=SUM(A:A)

    A列最小值:=MIN(A:A)

    A列最大值:=MAX (A:A)

    A列平均值:=AVERAGE(A:A)

    A列数值个数:=COUNT(A:A)

    2. 文本连接函数

    Concatenate(b1,b2 ,b4)

    excel常用函数大全及示例(一)

     

    3. 区域文本连接函数

    Phonetic(b1:b4)

    excel常用函数大全及示例(一)

     

    4.文本截取

    取文本前三位:Left(A2,3)A2单元格中的文本从左边向右取3位

    excel常用函数大全及示例(一)

     

    取文本后四位Right(a2,4) A2单元格中的文本从右边向左取4位

    excel常用函数大全及示例(一)

     

    身份证取出生日期

    Mid(a2,7,8) a2单元格中的文本从第7位开始取,向后取8位

    excel常用函数大全及示例(一)

     

    5.文本格式函数,自定义文本展示格式

    5.1TEXT(value,format_text)

    Value 为数值、计算结果为数字值的公式,或对包含数字值的单元格的引用。

    Format_text 为“单元格格式”对话框中“数字”选项卡上“分类”框中的文本形式的数字格式。

    5.2TEXT的 Format_text(单元格格式)参数代码(常用)

    excel常用函数大全及示例(一)

     

    excel常用函数大全及示例(一)

     

    例子:

    手机号格式:Text(a2,”000-0000-0000”)

    excel常用函数大全及示例(一)

     

    日期格式:Text(b2,”AAAA”)

    excel常用函数大全及示例(一)

     

    6.单元格计数

    Counta()计算非空单元格的数量

    excel常用函数大全及示例(一)

     

    Countb()计算空单元格的数量

    excel常用函数大全及示例(一)

     

    Countif(区域,条件) 条件计数

    excel常用函数大全及示例(一)

     

    统计内容为“男”的单元格个数

    其他用法:

    统计某一范围(大于等于60)的单元格数量。

    COUNTIF(D3:D9,">=60")。

    统计不等于某值的单元格个数

    COUNTIF(E3:E9,"<>60")

    统计包含指定字符(hello)的个数

    COUNTIF(A1:A9,"*hello*")

     

    7.sumif函数

    语法是:SUMIF(range,criteria,sum_range)

      sumif函数的参数如下:

      第一个参数:Range为条件区域,用于条件判断的单元格区域。

      第二个参数:Criteria是求和条件,由数字、逻辑表达式等组成的判定条件。

      第三个参数:Sum_range 为实际求和区域,需要求和的单元格、区域或引用。

    示例:分别统计豆角和白菜的销量SUMIF(A2:B10,D2,B2:B10)

    excel常用函数大全及示例(一)

     

    SUMIFS函数表示多条件求和。

    SUMIFS函数语法:=SUMIFS(求和区域,条件区域1,条件1,条件区域2,条件2,条件区域N,条件N)

    8.随机数

    Rand

    rand(),表示产生0-1之间(不包含1)的随机数

    RANDBETWEEN函数的功能

    随机返回两个指定参数之间的整数;每次计算生成的整数都不一样。

    RANDBETWEEN(10,50)随机返回一个10到50之间的数

    数据匹配

    9.IF函数

    IF(A2<=90,"小于90等于","大于90")

    说明:如果上面的数字小于等于90,则公式将显示“小于等于90”。否则,公式显示“大于90”。


    关注我不迷路,好了,这篇文章到这里就结束了.

    每天学一点,薪资翻一番。对excel, vba,数据透视表,数据分析感兴趣的小伙伴欢迎关注公众号“学会数据分析”,

    在公众号“学会数据分析”中回复wps可获取带vba版和其他高级版本的免费破解版wps

     

    白嫖虽好,可不要贪杯哦!下一篇我们介绍切片器和设置透视表样式!

    展开全文
  • 取前五名,后五名的方法 如何用公式求出最大值所在的行? 求多个最高分 如何求多条件的平均值 想求出第大之数值 【查询和查找引用】 查找顺序公式 怎样实现精确查询 查找及引用 查找函数的应用 怎么能方便的判断...
  • EXCEL百宝箱8.0终极版

    2011-11-05 16:48:02
    前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行后列之...
  • 红色的“3”表示:取前三位数字,如果是纬度就改为2; 紫色的“5”表示:取从左边数第5位开始,取2位;——转换分 绿色的“8”表示:取从左边数第8位开始,取2位;——转换秒 如果是转换纬度数据应相应的变化参数。 ...
  • 前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行后列...
  • 前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域 消除空值消除空值函数。可以选择多行多列,按先行后列之方式返回值.两个参数,一为区域一...
  • 个人整理-计算机二级Excel常考函数复习重点 1. 单条件求和—— SUMIF 函数 如要统计 C列中的数据 , 要求统计条件是 B 列中数据为 "条件一 " 。并将结 果放在 C6 单元格中,我们只要在 C6 单元格中输入公式“ =...
  • 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。...
  • 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。...
  • │ │ 技巧261 维引用不重复数据.xls │ │ 技巧262 跨多表查询.xls │ │ 技巧263 跨多表汇总.xls │ │ 技巧264 条件筛选下求不重复值.xls │ │ 技巧265 求出各项目极值的合计数.xls │ │ │ ├─第...
  • 004 计算销售量排前三的商品总销量 36 005 高斯求和 38 006 汇总女装订单表中已收到的定金总额 39 007 汇总跳远成绩在1.9米以上的学生人数 41 008 计算工资在8000元以上的员工工资总和 44 009 计算提成...
  • 一篇: http://www.cnblogs.com/emanlee/archive/2012/12/05/2803144.html ... 这一步很简单,就是这3个值的中数,即median。 方法很多,在excel中可以用median函数; 在R中以下代码进行操作: get_media...
  • 实例199 如何在删除数据库记录给予提示 实例200 如何取得数据集的当前状态 实例201 如何创建主从关系的数据集 实例202 如何在一个数据集中浏览另一个数据集的数据 实例203 如何在数据库更新过程中增加事务操作...
  • 此赛有两道未解决,一道未看懂,还有一道未用Excel解决掉...// 其实这道题可以用数学中的排列组合方法来做:要求六位数旋转180度后仍是原来数,,则决于该数的前三位前三位一定后后三位也就一定了。而前三位每一...
  • 电话号码代码Kata 此存储库包含一些示例数据,您可以使用这些数据来... 在这种情况下,无法拨打Bob的电话,因为一旦您拨打Bob的电话号码的前三位数,电话交换机就会将您的呼叫转接到紧急电话。 因此,此列表将不一致。
  • 前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行后列之...
  • 4、把声母字典文件中每个汉字的声母,按汉字字库的区位规则全部串在一起,由于一个汉字最多3种读音(有4种以上读音的仅有"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字, 仅取前三个读音), 为每个汉字预留3个字节空间,...
  • 4、把声母字典文件中每个汉字的声母,按汉字字库的区位规则全部串在一起,由于一个汉字最多3种读音(有4种以上读音的仅有"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字, 仅取前三个读音), 为每个汉字预留3个字节空间,...
  • 仅有"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字, 仅取前三个读音),为每个汉字预留3个字节空间,生成Unicode汉字声母表, 如本单元所定义的PartUnicode常量。 4、查找原理:要查找一个汉字在声母表中的对应位置,应...
  • 实例114 将多个Excel文件汇总到一个Excel文件 第2篇 ASP.NET数据库应用篇 第5章 ADO.NET数据库操作技术 5.1 一切从我开始:建立Connection数据库连接 实例115 建立Access数据库连接 实例116 与加密后的Access...
  • 实例114 将多个Excel文件汇总到一个Excel文件 第2篇 ASP.NET数据库应用篇 第5章 ADO.NET数据库操作技术 5.1 一切从我开始:建立Connection数据库连接 实例115 建立Access数据库连接 实例116 与加密后的Access...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

excel取前三位