Porc导入数据生成器

# 2018-12-11 14:25

print
('正在加载,请稍后...') from easygui import diropenbox, msgbox, multchoicebox from os import listdir, chdir from re import findall from sys import exit from openpyxl import load_workbook, Workbook from time import sleep #获取sheet数据,返回列表 def f_get_value(worksheet, row_min, row_max, col_list): v_list_value = [] for row in range(row_min,row_max+1): v_one_row_value = [] for col in col_list: v_one_row_value.append(ws[col+str(row)].value) if v_one_row_value[0] == None: continue v_list_value.append(v_one_row_value) # 如果第一列(一般为刺青)为空则跳过 return v_list_value # 创建可有多个sheets的excel文件,而且最大支持20列 def f_create_excels(v_saved_file, v_list_sheetname, v_list_row_num, v_list_list_row_name, v_list_list_data, v_if_show_msg = True ): # 初步保证提供的数据是完整的 v_len = len(v_list_sheetname) if not ( len(v_list_row_num) == v_len and len(v_list_list_row_name) == v_len and len(v_list_list_data) == v_len ): print('Arguments errors') # 调试错误 return 1 v_my_workbook = Workbook() for i in range(v_len): v_sheetname = v_list_sheetname[i] v_row_num = v_list_row_num[i] v_list_row_name = v_list_list_row_name[i] v_list_data = v_list_list_data[i] if v_row_num > 20: # 最多支持20列 return 1 v_list_row = ['A', 'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',] if i == 0: v_my_workbook.active.title = v_sheetname else: v_my_workbook.create_sheet(v_sheetname) v_my_worksheet = v_my_workbook.get_sheet_by_name(v_sheetname) for i in range(v_row_num): v_my_worksheet[str(v_list_row[i]) + '1'] = v_list_row_name[i] v_start_number = 2 for v_value in v_list_data: for i in range(v_row_num): v_my_worksheet[(str(v_list_row[i]) + '%d') % v_start_number] = v_value[i] v_start_number = v_start_number + 1 v_my_workbook.save(v_saved_file) if v_if_show_msg: msgbox('成功生成文件:' + v_saved_file) v_list_must_exist_sheets = ['Enter', 'AI', 'Check', 'Birth', 'PWRemove', 'Wean', 'Nurse', 'Death', 'Cull'] print('请选择包含日报文件的目录') v_source_dir = diropenbox(msg='请选择包含日报文件的目录', title='浏览') if v_source_dir == None: exit(0) print('请选择保存生成导入文件的目录') v_saved_dir = diropenbox(msg='请选择保存生成文件的目录', title='浏览') if v_saved_dir == None : exit(0) print('正在搜索以.xlsx结尾的文件,请稍后 ...') chdir(v_saved_dir) v_list_resource_files = [] v_list_saved_files = [] # 用于最后显示 for value in listdir(v_source_dir): if findall('.*.xlsx', value): v_list_resource_files.append(value) if len(v_list_resource_files) == 0: msgbox("未发现以.xlsx结尾的文件!!!\n 十秒后退出") sleep(10) exit(1) print('共发现 ' + str(len(v_list_resource_files)) + ' 个文件,请选择需要处理的日报文件(多选) ...') v_list_resource_files = multchoicebox('', '选择需要处理的日报文件(多选)', v_list_resource_files) v_list_file_names = '' v_count = 1 for value in v_list_resource_files: v_list_file_names = v_list_file_names + str(v_count) + '' + value + '\n' v_count += 1 print('您选择的以下' + str(len(v_list_resource_files)) + ' 个文件将被处理,请稍后 ...\n' + v_list_file_names) sleep(4) for v_resource_excel_file_name in v_list_resource_files: print("正在处理日报文件:" + v_resource_excel_file_name + ' ...') sleep(3) v_resource_excel_file = v_source_dir + '\\' + v_resource_excel_file_name v_saved_excel_file_name = "".join(findall('[a-zA-Z0-9.]+', v_resource_excel_file_name)) v_list_saved_files.append(v_saved_excel_file_name) wb = load_workbook(v_resource_excel_file) v_list_sheets = wb.get_sheet_names() v_list_sheets_lost = [] for value in v_list_must_exist_sheets: # 检查原始文件的sheets是否包含必须的sheets if value not in v_list_sheets: v_list_sheets_lost.append(value) if len(v_list_sheets_lost) != 0: msgbox('错误:文件名为“' + v_resource_excel_file_name + '"的文件缺少页签:' + " ".join(v_list_sheets_lost)) exit(2) ws = wb.get_sheet_by_name('Enter') v_list_enter = f_get_value(ws, 3, 300, ['B', 'C', 'D', 'E', 'F', 'G', 'H']) # ------- Enter ws = wb.get_sheet_by_name('AI') v_list_ai_1 = f_get_value(ws, 3, 300, ['B', 'D', 'E', 'F', 'G', 'H', 'C']) v_list_ai_2 = f_get_value(ws, 3, 300, ['B', 'I', 'J', 'K', 'L', 'M', 'C']) v_list_ai_3 = f_get_value(ws, 3, 300, ['B', 'N', 'O', 'P', 'Q', 'R', 'C']) v_list_ai_hns= f_get_value(ws, 3, 300, ['B', 'S']) ws = wb.get_sheet_by_name('Check') v_list_check = f_get_value(ws, 3, 300, ['B', 'C', 'D']) ws = wb.get_sheet_by_name('Birth') v_list_birth = f_get_value(ws, 3, 300, ['B', 'C', 'D', 'E', 'F', 'G']) # ------- Birth ws = wb.get_sheet_by_name('PWRemove') v_list_pwr = f_get_value(ws, 3, 300, ['B', 'C', 'D', 'E']) # ------- PWRemove ws = wb.get_sheet_by_name('Wean') v_list_wean = f_get_value(ws, 3, 300, ['B', 'C', 'D']) ws = wb.get_sheet_by_name('Nurse') v_list_nurse = f_get_value(ws, 3, 300, ['B', 'C', 'E']) ws = wb.get_sheet_by_name('Death') v_list_death = f_get_value(ws, 3, 300, ['B', 'C', 'D', 'E']) ws = wb.get_sheet_by_name('Cull') v_list_cull = f_get_value(ws, 3, 300, ['B', 'C', 'D']) v_list_nurse_on = [] # ------ NurseIn v_list_nurse_off = [] # ------ NurseOff for value in v_list_nurse: if value[2].upper() == 'ON': v_list_nurse_on.append(value[0:2]) else: value[2]=0 v_list_nurse_off.append(value) for i in range(len(v_list_wean)): v_list_wean[i].append(None) # ------- Wean 添加一列用来手动添加总量 v_list_remove = [] # ------ Remove for value in v_list_death: value[2] = 0 v_list_remove.append(value) for value in v_list_cull: value.insert(2,1) v_list_remove.append(value) v_list_check_heatnotserved = [] # ------ HeatNotServed v_list_check_check = [] # ------ Check v_list_check_abortion = [] # ------ Abortion for value in v_list_ai_hns: if value[1] != None: v_list_check_heatnotserved.append(value) for value in v_list_check: if value[2].upper() == 'R': v_list_check_heatnotserved.append(value[0:2]) elif value[2].upper() == 'A': v_list_check_abortion.append(value[0:2]) else: v_list_check_check.append(value[0:2]) v_list_ai_tmp = v_list_ai_1 + v_list_ai_2 + v_list_ai_3 v_list_ai = [] # ------ AI for value in v_list_ai_tmp: if value[1] != None or value[2] != None: # 只有配种日期和公猪品系都为空是才忽略数据 value.insert(6,None) # 留出一列以便手动填写周次(group) v_list_ai.append(value) print("正在生成导入文件:" + v_saved_excel_file_name + ' ...') sleep(1) f_create_excels(v_saved_excel_file_name, ['AI', 'HeatNotServed', 'Check', 'Abortion', 'Birth', 'PWRemove', 'Wean', 'NurseIn', 'NurseOff', 'Remove','Enter'], [8, 2, 2, 2, 6, 4, 4, 2, 3, 4, 7], [ ['Id', 'Date', 'Text1', 'DateTime1', 'Male', 'Tech', 'Group', 'Text3'], ['Id', 'Date'], ['Id', 'Date'], ['Id', 'Date'], ['Id', 'Date', 'Liveborn', 'Stillborn', 'Mummies', 'LivebornMales'], ['Id', 'Date', 'Number', 'Reason'], ['Id', 'Date', 'Weaned', 'Weight'], ['Id', 'Date'], ['Id', 'Date', 'Number'], ['Id', 'Date', 'Type', 'Reason'], ['RegisterId', 'Id', 'Comment', 'Date', 'BirthDate', 'Genetics', 'OriType'] ], [v_list_ai, v_list_check_heatnotserved, v_list_check_check, v_list_check_abortion, v_list_birth,\ v_list_pwr, v_list_wean, v_list_nurse_on, v_list_nurse_off, v_list_remove, v_list_enter], v_if_show_msg=False ) print('成功生成文件:\n' + "\n".join(v_list_saved_files)) msgbox('成功生成文件:\n' + "\n".join(v_list_saved_files)) print('请手动关闭窗口') sleep(10000)

猜你喜欢

转载自www.cnblogs.com/gipagod/p/10101980.html