批量价格表数量多,每次excel表格打开缓慢,人工统计或excel公式拉取缓慢,如自动生成新的excel只能使用VB,需要一定基础
故使用python批量处理:
1、将所有报价表放入待处理文件夹
import xlwings as xw import os # 新建文件夹创建用 filePath = "D:\pytest\baojia\" file_name = list() # 新建列表 for i in os.listdir(filePath): # 获取filePath路径下所有文件名 data_collect = ''.join(i) # 文件名字符串格式 file_name.append(data_collect) # 将文件名作为列表元素填入 for item in file_name: if "~" in item: # 删掉临时文件 file_name.remove(item) print(file_name) # 打印获取成功提示
2、读取报价表内容
app = xw.App(visible=False, add_book=False) # 启动excel print( "*******************************************************************start" "*******************************************************************") for i in file_name: workbook1 = app.books.open(f'D:\pytest\baojia\{i}') # 打开价格表 worksheet1 = workbook1.sheets["Sheet1"] # 打开价格表sheet1 print("表格打开成功") province = worksheet1.range('C2').value # 读取报价省份 company = worksheet1.range('H2').value # 读取报价承运商 # 以下为降幅比例获取,可简化,暂为交流易懂 price1 = worksheet1.range('B5').value price2 = worksheet1.range('c5').value price3 = worksheet1.range('d5').value price4 = worksheet1.range('e5').value price5 = worksheet1.range('f5').value price6 = worksheet1.range('g5').value price7 = worksheet1.range('h5').value price8 = worksheet1.range('i5').value price9 = worksheet1.range('j5').value # 展示降幅比例 print("降幅为A分公司产品{},B分公司产品{},C分公司产品{},D分公司产品{},E分公司产品{},F分公司产品{},I分公司产品{},J分公司产品{},K分公司产品{}". format(price1, price2, price3, price4, price5, price6, price7, price8, price9)) workbook = app.books.open(f"D:\pytest\{province}.xls") # 打开标杆价格表 # 创建一个字典,存放有效价终止单元格,即每个省份市县数量不同,固定操作单元格范围 company_dict = {'海南省': 'N16', '北京市': 'N20', '河南省': 'N20', '湖北省': 'N19', '新疆省': 'N150'} con_end = company_dict.get(province) print("{}有效数据范围到:{}".format(province, con_end))
3、根据报价表里的降幅,构建新的价格表
def mdd(sfx, sff, sfz): # 以下为根据降幅构建新的标杆价格表函数 worksheet = workbook.sheets[sfx] # 指定工作簿 data = worksheet.range("E3", con_end).value # for i, j in enumerate(data): # 遍历工作表数据 for s in range(0, sfz): if type(data[i][s]) == float: # 跳过非数字 data[i][s] = float(j[s]) * (1 - sff) # 替换数据 else: continue worksheet.range("E3", con_end).value = data # 将完成替换的数据写入工作表 # 以下为代入报价表构建新的标杆价格表,每个公司报价跨度不同(公司,价格系数,报价跨度数量) mdd("A公司产品", price1, 10) mdd("B公司产品", price2, 10) mdd("C公司产品", price3, 10) mdd("D公司产品", price4, 9) mdd("E公司产品", price5, 10) mdd("F公司产品", price8, 10) mdd("G公司产品", price9, 10)
4将数据根据报价表中的承运商名称形成新的价格文件夹和价格文件
# 根据承运商创建公司文件夹 try: File_Path = f"D:\pytest\new\{company}" print(File_Path) # 判断是否已经存在该目录 if not os.path.exists(File_Path): # 目录不存在,进行创建操作 os.makedirs(File_Path) # 使用os.makedirs()方法创建多层目录 print("目录新建成功,文件放入:" + File_Path) else: print("目录已存在,文件放入") except BaseException as msg: print("新建目录失败:" + msg) # 保存和退出 workbook.save(f"D:\pytest\new\{company}\{province}{'2022-2023'}.xlsx") workbook1.close() # 不关全在后台 print("报价表close") workbook.close() print("标杆价close") # 不关全在后台 app.quit() # 退出excel程序 print("*******************************************************************end" "*******************************************************************") input('Press Enter to exit...')