使用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。导入部分到是没有问题,但是汇总怎么汇总呢?

效果图如下:

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')