pipilang3220119 2021-08-19 17:29 采纳率: 58.3%
浏览 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条回答 默认 最新

  • 程序媛一枚~ Python领域新星创作者 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')
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 修改了问题 8月19日
  • 创建了问题 8月19日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决