通过openpyxl,读取excel,按照指定机构名汇总,并导入mysql,汇总怎么汇总呢?
数据如下:
机构 | 数据 |
---|---|
a | 1 |
b | 2 |
c | 3 |
d | 4 |
e | 5 |
f | 6 |
g | 7 |
以上数据需要先按照指定的机构名汇总,比如 a+e+f = 1+5+6 =12,b+c = 2+3=5,汇总为如下表
机构 | 数据 |
---|---|
d | 4 |
g | 7 |
a+e+f | 12 |
b+c | 5 |
最后根据汇总后的表导入mysql。导入部分到是没有问题,但是汇总怎么汇总呢?
通过openpyxl,读取excel,按照指定机构名汇总,并导入mysql,汇总怎么汇总呢?
数据如下:
机构 | 数据 |
---|---|
a | 1 |
b | 2 |
c | 3 |
d | 4 |
e | 5 |
f | 6 |
g | 7 |
以上数据需要先按照指定的机构名汇总,比如 a+e+f = 1+5+6 =12,b+c = 2+3=5,汇总为如下表
机构 | 数据 |
---|---|
d | 4 |
g | 7 |
a+e+f | 12 |
b+c | 5 |
最后根据汇总后的表导入mysql。导入部分到是没有问题,但是汇总怎么汇总呢?
效果图如下:
支持合并的机构名可配置
# 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')