zoukankan      html  css  js  c++  java
  • openpyxl工具总结

    1、openpyxl使用

      涉及到单元格合并、赋值

    '''
    1.格式转换
        raw_data        create_data
    
        boolean          Bool
        uint8            UInt8
        int8             Int8
        uint16           UInt16
        int16           Int16
        uint32          UInt32
        int32           Int32
    2.定点数数据类型格式转换
    '''
    from openpyxl import load_workbook
    
    from openpyxl.styles import Color, Font, Alignment
    # wb = load_workbook("EPA2_data.xlsx")
    wb = load_workbook("EPA2_data.xlsx")
    sheet = wb.get_sheet_by_name('Output')
    #格式居中显示
    align = Alignment(horizontal='center', vertical='center')
    TCrows=[]
    Cases=[]
    
    #<Worksheet "Output">    601     11
    # print(sheet)
    # print(sheet.max_row)
    # print(sheet.max_column)
    
    raw_type_dic = {
        'boolean': 'Bool',
        'uint8': 'UInt8',
        'int8': 'Int8',
        'uint16': 'UInt16',
        'int16': 'Int16',
        'uint32': 'UInt32',
        'int32': 'Int32',
    
    }
    
    for row in sheet.iter_rows():
        TCrows.append(row)
    for i in range(1, 1448):
        Cases.append(TCrows[i])
    
    totalNum = 1447
    runnable_data_list = []
    start = 2
    count = 0
    test_merge_list = []
    
    for item in range(0,totalNum):
        #Runnable名称
        runnable_data = Cases[item][1].value   # fixdt(0,16,0.01,0)
        print('第%s次'%count+':'+str(runnable_data))
        merge_list = []
        if item != 0:
            if runnable_data != runnable_data_list[item-1]:
                print('meege====='+ str(item))
                # sheet.merge_cells("B%s:B%s" % (temp, item+1))
                merge_list.append(start)
                stop = item+1
                merge_list.append(stop)
                start = stop+1
                test_merge_list.append(merge_list)
        if item == totalNum-1:
            print('最后一次%s'%count)
            stop = item
            merge_list.append(start)
            merge_list.append(stop)
            test_merge_list.append(merge_list)
    
        # if item != 0:
        #     if runnable_data != runnable_data_list[item-1]:
        #         print('meege====='+ str(item))
        #         sheet.merge_cells("B%s:B%s" % (temp, item+1))
        #         temp= item+2
        #         print(temp)
        #         print(runnable_data_list)
        #
        # print(runnable_data)
    
        type_data = Cases[item][7].value  # fixdt(0,16,0.01,0)
        # 1. 判断是否字典类型type
        if type_data in raw_type_dic:
            #APP Data Type
            Cases[item][5].value = raw_type_dic[type_data]
            #Base Type
            Cases[item][6].value = type_data
            #Compu Method flag
            Cases[item][8].value = int('0')
            #精度
            Cases[item][9].value = int('1')
            #offset
            # Cases[item][10].value = '0'
        elif "fixdt" in type_data:
            format_list = []
            format_str = ''
            a = ''
            b = ''
            c = ''
            d = ''
            e = ''
            f = ''
            dstr = type_data.replace('fixdt(', '')
            dstr = dstr.replace(')', '')
            dlist = dstr.split(',')
            for d in dlist:
                format_list.append(d)
            # 1.规则1,判断符号位
            if format_list[0] == '0':
                a = 'U'
                baseType = 'unit'
            else:
                a = 'I'
                baseType = 'int'
            # 规则2,判断数据长度位
            b = format_list[1]
    
            if '.' in format_list[2]:
                c = len(format_list[2].split('.')[1])
                temp = 0
                d_count = 0
                for i in format_list[2].split('.')[1]:
                    if i != '0':
                        temp = d_count
                    d_count += 1
                d = format_list[2].split('.')[1][temp:]
            else:
                c = '0'
                d = format_list[2]
            # 规则3,判断小数点长度
            if '-' in format_list[3]:
                e = 'N'
                f = format_list[3][1:]
            else:
                e = 'P'
                f = format_list[3]
            format_str = '%s%sS%s%s%s%s' % (a, b, c, d, e, f)
    
            # APP Data Type
            Cases[item][5].value = format_str
            # Base Type
            Cases[item][6].value = baseType + b
            # Compu Method flag
            Cases[item][8].value = int('1')
            # 精度
            Cases[item][9].value =format_list[2]
            # offset
            Cases[item][10].value = format_list[3]
        else:
            print("请确认第%s个是否输入格式正确" % count)
        count += 1
        runnable_data_list.append(runnable_data)
    print(test_merge_list)
    for key in test_merge_list:
        sheet.merge_cells("B%s:B%s" % (key[0], key[1]),align)
    
    
    wb.save('EPA2_data.xlsx')
    
    
    
    def read_excel_type():
        #读取excel的type列数据
        raw_list = []
        #获取数据类型这一列的数据
        for cell in list(sheet.columns)[7]:
            raw_list.append(cell.value)
    
        return raw_list
    
    def format_data(data_list):
    
        #1. 判断是否字典类型type
        count = 0
        for data in data_list:
            if data in raw_type_dic:
                data_list[count] = raw_type_dic[data]
                # print("第%s个判断在字典数据类型里"%count)
        # 2.判断是否是定点数数据类型
            elif "fixdt" in data:
                format_list = []
                format_str = ''
                a = ''
                b = ''
                c = ''
                d = ''
                e = ''
                f = ''
                dstr = data.replace('fixdt(', '')
                dstr = dstr.replace(')', '')
                dlist = dstr.split(',')
                for d in dlist:
                    format_list.append(d)
                #1.规则1,判断符号位
                if format_list[0] == '0':
                    a = 'U'
                else:
                    a = 'I'
                #规则2,判断数据长度位
                b = format_list[1]
                if '.' in format_list[2]:
                    c = len(format_list[2].split('.')[1])
                    temp = 0
                    d_count = 0
                    for i in format_list[2].split('.')[1]:
                        if i != '0':
                            temp = d_count
                        d_count += 1
                    d = format_list[2].split('.')[1][temp:]
                else:
                    c = '0'
                    d = format_list[2]
                #规则3,判断小数点长度
                if '-' in format_list[3]:
                    e = 'N'
                    f = format_list[3][1:]
                else:
                    e = 'P'
                    f = format_list[3]
    
                format_str = '%s%sS%s%s%s%s'%(a,b,c,d,e,f)
                data_list[count] = format_str
            else:
                print("请确认第%s个是否输入格式正确" % count)
            count +=1
        print(data_list)
        #3.其他数据类型,显示提示判断输入数据是否正确
    
    
    # raw_data = read_excel_type()
    # raw_data = raw_data[1:]
    # print(raw_data)
    # format_data(raw_data)
    
    
    #合并单元格RUNNANBLE 第1列
    # def read_excel_type():
    #     #读取excel的type列数据
    #     raw_list = []
    #     #获取数据类型这一列的数据
    #     print()
    #     for cell in list(sheet.columns)[1]:
    #         print(cell.value)
    #ws.merge_cells ("A1:C3")                      #合并单元格
    
    # read_excel_type()
    max_row = sheet.max_row
    # print(max_row)
    # for i in range(2,10):
    #               for j in range(2,3):
    #                   a = sheet.cell(row = i, column = j)
    #                   print(a.value)
    #
    # # sheet.merge_cells ("B2:B10")
    # sheet.unmerge_cells ("B2:B10")
    # wb.save('EPA2_data.xlsx')
    View Code
  • 相关阅读:
    【JavaScript】explode动画
    【JavaScript】插件参数的写法
    【webpack】理解配置文件
    你真的了解盒模型么
    一看看懂Protocol Buffer(协议篇)
    es7你都懂了吗?今天带你了解es7的神器decorator
    快速了解react
    简单聊一聊那些svg的沿路径运动
    转转RN工程化历程
    微信小程序内嵌网页的一些(最佳)实践
  • 原文地址:https://www.cnblogs.com/di2wu/p/10772372.html
Copyright © 2011-2022 走看看