批量价格表数量多,每次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...')