import argparse import os import pandas as pd """ Dieses Programm kann: - eine Excel-Datei exportieren, in der alle aktualisierten Preise der Excel Datei aus dme work Ordner enthalten sind """ class Fetch: datafile = 'grid_export.xlsx' lib_dir = os.environ.get('SIVASPRICES_LIB') data_dir = os.environ.get('SIVASPRICES_DATA') in_dir = os.environ.get('SIVASPRICES_WORK') out_dir = os.environ.get('SIVASPRICES_OUT') sivas_prices_xls_path = os.path.join(data_dir, datafile) def __init__(self): self.read_grid_export() def process(self, inputfile): df_to_search_ids = self.read_inputfile(inputfile) self.create_excel_export(df_to_search_ids) def read_grid_export(self): # liest die XLS-Datei ein, in der alle Preise des kompletten Teilestamms enthalten sind # mit Teilenummer, Bezeichnung 1 und Laufende Materialkosten try: #self._sivas_df = pd.read_excel(self.sivas_prices_xls_path, usecols=["Teilenummer", "Bezeichnung1", "Laufende Materialkosten"]) self._sivas_df = pd.read_excel(self.sivas_prices_xls_path) self._sivas_df['Teilenummer'] = self._sivas_df['Teilenummer'].astype(str) except FileNotFoundError: # XLSX-Datei wurde noch nicht ins %SIVASPRICES_WORK% kopiert print(f"FAILED: '{Fetch.datafile}' nicht gefunden. sollte im '{Fetch.in_dir}' liegen ...") def read_inputfile(self, inputfile): # Methode liest die Sivas Ids der Eingabedatei, um festzustellen welche Preise gesucht werden. try: df = pd.read_excel(inputfile, sheet_name='Kaufteile', usecols=["Teilenummer"]) df['Teilenummer'] = df['Teilenummer'].astype(str) return df except FileNotFoundError: print(f"FAILED: '{inputfile}' nicht gefunden. sollte im '{Fetch.data_dir}' liegen ...") return pd.DataFrame() except ValueError: print(f"FAILED: Spalte 'Teilenummer' nicht gefunden") return pd.DataFrame() def create_excel_export(self, df_to_search_sivas_ids:pd.DataFrame, outfile): # Spalten in Excel-Datei: Teilenummer, Bezeichnung, Preis df_merged = self._sivas_df.merge(df_to_search_sivas_ids, how='inner', on='Teilenummer') df_merged.set_index('Teilenummer') df_merged.to_excel(outfile, index=False) print(f"OK: Excel-Datei erfolgreich in '{Fetch.out_dir}' geschrieben...") if __name__ == '__main__': parser = argparse.ArgumentParser(description='Das Programm holt die speziell gewünschten Preise aus der data/grid_export.xlsx ', prog='update_prices') parser.add_argument('-a', '--all', action='store_true', help='Erzeugt Excel-Dateien für alle Teilenummern in allen .xlsx Files im Work Ordner') parser.add_argument('-e', '--excel', action='store', help='Erzeugt Excel-Datei in der alle Teilenummern, die migriert werden müssen, aufgelistet sind') args = parser.parse_args() if args.excel: fetch = Fetch() fetch.process(args.excel) elif args.all: all_files = os.listdir(os.environ.get('SIVASPRICES_WORK')) fetch = Fetch() in_dir = os.environ.get('SIVASPRICES_WORK') out_dir = os.environ.get('SIVASPRICES_OUT') for myfile in all_files: if not myfile.endswith(".xlsx"): continue input_xlsx = os.path.join(in_dir, myfile) output_xlsx = os.path.join(out_dir, 'updated_'+myfile) df_to_search_ids = fetch.read_inputfile(input_xlsx) if df_to_search_ids.empty: continue fetch.create_excel_export(df_to_search_ids, output_xlsx) else: parser.print_help()