通过VBA和Python把excel的结果数据转化成word点评

前言:我有一项月度工作,需要对代理商进行指标分析,有十几个指标,每个指标有一定的比例,最后得出每个代理商的分数和排名。成品的样子是这样的:
在这里插入图片描述
但是到这里仅仅是excel,领导觉得还不够,需要转化为word的点评,成品是这样的:

在这里插入图片描述

如果光靠手动写的话,不仅需要很长时间,而且还很容易出错,所以我第一步做了一个辅助sheet,使得结果能够根据标准得出具体的文字:
在这里插入图片描述
其中C1的数值是做了有效性,可以根据筛选,使得A4:E16的结果变化,在F20做了公式,使得结果直接出来,G20则是选择性黏贴的结果。
但是到这里还不够,因为代理商比较多,我还需要一个个手动筛选并复制黏贴,而且每个月的代理商排名不同导致最后复制黏贴的顺序也不同,所以使用VBA先把所有代理商的结果批量复制黏贴出来,同时排序,成品如下:
在这里插入图片描述
VBA代码如下:

Sub 文字刷新()
    Dim i As Integer
    For i = 2 To 13
        
        Sheets("文字结果").Range("A" & i).Copy Sheets("模板").Range("C1")
        Sheets("模板").Select
        Range("F20").Select
        Selection.Copy
        Sheets("文字结果").Select
        Range("E" & i).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Next
    '下面的代码就是把顺序排列了一下
    Range("D3").Select
    ActiveWorkbook.Worksheets("文字结果").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("文字结果").Sort.SortFields.Add2 Key:=Range("D3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("文字结果").Sort
        .SetRange Range("A2:E13")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    
    End With
End Sub


接下来再用Python把单元格的结果根据顺序导出到txt(其实可以直接word,后续再优化),代码如下:

import os
from win32com.client import Dispatch

def chinese_rank(jjc_range):
    if jjc_range == 1:
        return "第一名:"
    elif jjc_range == 2:
        return "第二名:"
    elif jjc_range == 3:
        return "第三名:"
    elif jjc_range == 4:
        return "第四名:"
    elif jjc_range == 5:
        return "第五名:"
    elif jjc_range == 6:
        return "第六名:"
    else:
        print("好像有点问题,确认一下代码或者代理商数量!")

this_path = os.path.abspath('.')
excel_path = this_path + '\\2018年浦东实体门店和代理商月度评估.xlsm'

xl = Dispatch("Excel.Application")
xl.Visible = False #True是显示, False是隐藏
xl.DisplayAlerts = 0
xlBook = xl.Workbooks.Open(excel_path,False)
xs = xlBook.Sheets('文字结果')

with open('代理商点评.txt', 'a', encoding='gbk') as file:
    for i in range(2,14):
        name = xs.Cells(i, 1).Value
        score = str(float('%.1f' % xs.Cells(i, 2).Value))
        jjc_range = xs.Cells(i, 3).Value
        total_range = xs.Cells(i, 4).Value
        dianping = xs.Cells(i, 5).Value
        zyjjc_rank = chinese_rank(jjc_range)
        file.write(zyjjc_rank + name + '(' + score + '分)')
        file.write('\n')
        file.write(dianping)
        file.write('\n')

xl.quit()

最后成品如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42029733/article/details/84476877
今日推荐