运行环境
功能:
- 处理现有表格数据后,根据现有模板生成新的表格。(v1.0 目前仅支持单sheet表处理)
代码:
from openpyxl import Workbook, load_workbook
import io
import sys
import random
import pandas as pd
import json
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
##
'''
方法说明:获取excelsheet表特定列的数据
参数说明:path: xlsx文件路径
sheetName:第一个sheet表的名字
startInde: 起始开始获取行的下标;下标起始为0;
end: 结束列 ,下标起始位置为 1;
return: titles:标题列表[],
datas:特定列的数据列表[[],[],[]]
'''
def getSpecificDataList(path, sheetName, startIndex, end):
wb = load_workbook(path)
sheet = wb[sheetName]
datas = []
for i, row in enumerate(sheet):
if (i >= startIndex):
# 遍历数组
rowDatas = []
for j in range(end):
rowDatas.append(row[j].value)
datas.append(rowDatas)
return datas
"""
方法说明:数据处理
oldData: [[],[],[],[]] // 待处理的数据
newData: [[],[],[],[]] // 已处理的数据
"""
def handleData(oldData):
print("=============数据处理start================")
newData = []
for col in oldData:
strJson = json.loads(
col[4]
)
uscc = strJson["empBaseParamDTO"]["uscc"]
print(uscc)
col[4] = uscc
print("处理过后的数据:--------------------" + col[4])
newData.append(col)
# print(col)
print("===============数据处理end============")
return newData
"""
方法说明:文件保存,在现有模板中写入数据
filePath: 模板文件完整路径
sheetName:写入sheet名字
startIndex:开始录入的起始行 1开始
data:写入的数据[{"name":"","fullOrgName":"","orgId":"","orgParentId":""}]
newFilePath: 新文件路径
"""
def writeExistExcel(filePath, sheetName, startIndex, datas, newFilePath):
wb = load_workbook(filePath)
sheet = wb[sheetName]
for i, row in enumerate(datas):
for j in range(0, len(row)):
sheet.cell(i+startIndex, j+1).value = row[j]
wb.save(newFilePath)
print("录入完成!")
return
"""
initFile: 需要处理的xlsx文件,
initSheetName: 需要处理的表名
startInde: 起始开始获取行的下标;下标起始为0;
end: 结束列 ,下标起始位置为 1;
modeFile: 模板xlsx 文件
modeSheetName: 模板 SheetName 表
newFilePath: 根据模板生成的新的文件名
"""
def getNewFileByDemoFile(initFile,initSheetName,initStartIndex,initEnd,modeFile,modeSheetName,modeStartIndex,newFilePath):
# 1、获取数据
data = getSpecificDataList(initFile, initSheetName, initStartIndex, initEnd)
# 2、 处理数据
newDate = handleData(data)
# 3、根据模板文档,新写入数据
writeExistExcel(modeFile, modeSheetName, modeStartIndex, newDate, newFilePath)
return
getNewFileByDemoFile("demo.xlsx","Sheet1",1,5,"demo_end.xlsx","Sheet1",2,"xxxx.xlsx")
说明: