我们的库存报告软件每周都会以 .xlsx 格式将 15 份以上不同的库存报告(每个供应商各一份)输出到一个文件夹中。
所有 Excel 工作表均采用相同的格式,但在最终用户“可用”之前需要进行大量操作。在上周尝试学习 python 并将各种代码拼凑在一起之后,我设法想出了一个非常粗糙的脚本来执行所需的处理。
脚本按预期工作,但目前我必须在脚本中手动输入单独的 Excel 工作表文件路径,并更改输出文件名,然后为每个相应的 Excel 文件运行脚本。每周对 15 个以上的文件执行此操作会使脚本变得多余,因为在 Excel 中手动重新格式化会花费更少的时间。
经过更广泛的论坛阅读,并尝试将我的脚本插入其他代码解决方案中(https://python-forum.io/thread-10841.html),我陷入了僵局。我正在努力想出一个函数来批量处理一个文件夹中的所有 Excel 文件,并忽略所有其他文件。理想情况下,被操作的文件将替换同一文件夹中的原始 Excel 文件,但如果不可能,那么也不会破坏交易。
为了添加另一个曲线球,我一直在编写脚本并在我的 mac 上部署我的代码(使用我从工作中发送给自己的 .xlsx 文件的副本以及 mac os 文件路径)来测试我的脚本,但是我希望最终能在工作中的Windows系统上部署这个脚本。
我在下面只包含了我原来的、当前正在运行的脚本。
谢谢大家
#import pandas library
import pandas as pd
#import numpy
import numpy as np
#importing our excel to dataframe
df = pd.read_excel('/Users/christiane/Downloads/AGLC CJ Test.xls.xlsx')
#renaming our headers for each column
df = df.set_axis(['vendor code', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'current inventory', 'incoming inventory', 'm', 'Sales: Previous 4 weeks', 'o'], axis=1)
#convert 'vendor code' column data to string data
df['vendor code'] = df['vendor code'].astype(str)
#delete everything that doesn't start with a number from the bottom of the table
df = df[~df['vendor code'].str.contains("[a-zA-Z]").fillna(False)]
#convert 'vendor code' column data to interger data
df['vendor code'] = df['vendor code'].astype(int)
#sort values in column #1 from smallet to largest
df.sort_values(by='vendor code', ascending=True, inplace=True)
#add new column at the end input formula and populate downwards (=K1+L1)
df['expectedinventory'] = df.loc[:,['current inventory', 'incoming inventory']].sum(axis=1)
#move 'expected inventory' column from the end position to correct column position
name_col = df.pop('expectedinventory')
df.insert(12, 'expectedinventory', name_col)
#delete columns 'm' and 'o'
df = df.drop(['m', 'o'], axis=1)
#run formula for 4 weeks of back orders and populate column “sold in last 4 weeks” with the results
df['Sales Advice'] = df['expectedinventory'] - (( df['Sales: Previous 4 weeks']*1) + (0.1*( df['Sales: Previous 4 weeks'])*1))
#Don't know what this does but it works!
pd.set_option('future.no_silent_downcasting', True)
#change NaN values to Zero
df['Sales Advice'] = df['Sales Advice'].fillna(0)
inventory_data = pd.DataFrame(df)
cols = ['Sales Advice']
inventory_data.loc[:, cols] = inventory_data[cols].astype('float64').round()
#delete unnecessary columns
df = df.drop(['b', 'c', 'e', 'f','g','h', 'i', 'j'], axis=1)
#adding a right-most column with NaN values
df = df.reindex(columns=df.columns.tolist() + ['Ordering Now'])
#output excel file
df.to_excel('filteredaglctest.xlsx', index = False)
from pathlib import Path
# APIs get imported here
# Main folder where excel files are found
FOLDER = "/home/user/Documents/excel_files" #Change this to your folder path!
EXT = ".xlsx"
def updateExcel(file):
print(f"---> Processing {file} <----")
#Insert your code here:
def main():
#Specift the path in which the files are found
folder_path = Path(FOLDER)
#Get a list of files with a specific extension
files_ext = [files_ext for file in folder_path.iterdir() if file.is_file() and file.sufix = EXT]
#Process the files
for file in files_ext:
updateExcel(FOLDER+"/"+file)
if __name__ == '__main__':
main()