假如需要处理一个excel表格,这个表格中有json,但是我们想提取某些字段的值,输出到新的excel表格中,通常我们会用xlrd,xlwt,openpyxl等第三方库,废话不多说,直接上代码,仅供参考。
import openpyxl, xlwt, time
# 数组分组函数
def list_split(items, n):
return [items[i:i + n] for i in range(0, len(items), n)]
# 数据导出,写入
def export_excel(value_cols, path):
# 开始时间
starttime = time.time()
print("开始处理...")
# 解决使用eval时报错
global false, null, true
false = null = true = ''
# 声明表头和value的空数组
title = []
value = []
# 打开目标文件
wb = openpyxl.load_workbook(path)
# 获取Sheet名,0代表第一个sheet
sheet_names = wb.get_sheet_names()
sheet = wb.get_sheet_by_name(sheet_names[0])
# 获取sheet页最大行数,列数
rows = sheet.max_row
cols = sheet.max_column
# 获取激活的sheet页
ws = wb.active
# 获取value所在列,假设有100列
for q in range(1, 100):
if (ws.cell(row=1, column=q)).value == 'value':
# 获取单元格内容-表头
result_title = (ws.cell(row=2, column=q)).value
# str转list
result_title = eval(result_title)
# 在结果中遍历title字段的值添加到title中
for p in range(len(result_title)):
title.append(result_title[p]['title'])
# 获取指定单元格内容,一般从第二行读取
for k in range(2, rows + 1):
result = (ws.cell(row=k, column=value_cols)).value
# str转list
result = eval(result)
# 在结果中遍历value字段到值添加到value中
for j in range(len(result)):
if 'value' not in result[j] or result == None:
result[j]['value'] = None
elif 'value' in result[j]:
result[j]['value'] = result[j]['value']
# title.append(result[j]['title'])
value.append(result[j]['value'])
# 按照指定长度对数组进行分组
value = list_split(value, len(result))
# 新建excel
f = xlwt.Workbook()
# 新建sheet页
sheet2 = f.add_sheet('Shee1', cell_overwrite_ok=True)
# 循环写入新的excel
for m in range(0, rows - 1):
for u in range(len(result)):
# (row,col,value)
sheet2.write(0, u, title[u])
sheet2.write(m + 1, u, value[m][u])
f.save('test.xls')
print("导出成功!")
# 结束时间
endtime = time.time()
costtime = endtime - starttime
print("本次导出共消耗:" + str(int(costtime)) + "s")
export_excel(5, './test1.xlsx')