pipilang3220119
2021-08-19 17:29
采纳率: 100%
浏览 58
已结题

使用openpyxl操作excel,按照指定机构名汇总,并导入mysql,汇总怎么汇总呢?

通过openpyxl,读取excel,按照指定机构名汇总,并导入mysql,汇总怎么汇总呢?

数据如下:

机构数据
a1
b2
c3
d4
e5
f6
g7

以上数据需要先按照指定的机构名汇总,比如 a+e+f = 1+5+6 =12,b+c = 2+3=5,汇总为如下表

机构数据
d4
g7
a+e+f12
b+c5

最后根据汇总后的表导入mysql。导入部分到是没有问题,但是汇总怎么汇总呢?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 程序媛一枚~ 2021-08-25 17:53
    已采纳

    效果图如下:

    img

    img

    支持合并的机构名可配置

    # openpyxl 处理excel,简单的读取,合并,写入
    
    from openpyxl import Workbook, load_workbook
    
    
    # 判断列是否是需要合并的列,若找到返回合并列名称,没找到,则返回原始机构名
    def get_merge_value(merge_cof, value):
        for merge in merge_cof:
            if (merge.find(value) >= 0):
                return merge
        return value
    
    
    wb = load_workbook('images/jg.xlsx')  # 从文件读取xlsx
    ws = wb.active
    
    # 定义需要合并的机构名称
    merge_cof = ['a+e+f', 'b+c']
    
    col_jg = []
    col_data = []
    
    # 遍历行列的value值
    for i, row in enumerate(ws.values):  # 遍历行
        for j, value in enumerate(row):  # 遍历列的值
            print(value, end=' ')
            # 跳过标题列
            if (i == 0):
                continue
            if (j == 0):  # 判断列是否是需要合并的列
                value = get_merge_value(merge_cof, value)
                col_jg.append(value)
            else:
                col_data.append(value)
    
    print('\n')
    print(col_jg)
    print(col_data)
    
    # 遍历数据(相同机构名称的值进行相加)
    dict = {}
    for name, value in zip(col_jg, col_data):
        if (name in dict.keys()):
            dict[name] = dict[name] + value
        else:
            dict[name] = value
    
    print('合并后dict: ', dict)
    
    # 新建sheet表:Merge存放合并后的数据
    ws2 = wb.create_sheet(title="Merge")
    
    # 写入表头
    ws2.cell(column=1, row=1, value="{0}".format('机构'))
    ws2.cell(column=2, row=1, value="{0}".format('数据'))
    for i, key, value in zip(range(2, len(dict.keys()) + 2), dict.keys(), dict.values()):
        print(i, key, value)
        _ = ws2.cell(column=1, row=i, value="{0}".format(key))
        _ = ws2.cell(column=2, row=i, value="{0}".format(value))
    
    # 写入文件
    wb.save('images/merge.xlsx')
    
    
    
    评论
    解决 1 无用
    打赏 举报

相关推荐 更多相似问题