excel opening optimization

This commit is contained in:
2026-01-22 03:23:27 +03:00
parent 5041e6bd51
commit 62b1a4a48a
3 changed files with 33 additions and 24 deletions

View File

@@ -23,6 +23,7 @@ def process_sheet(df, multiply_price=1, sheet_name=''):
#Группировка #Группировка
df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping df = df.groupby('arti', as_index=False).agg({'counts': 'sum', 'price': 'sum'}) #groupping
print(df)
df = processing(df) #vlookup for ref_keys df = processing(df) #vlookup for ref_keys
validated_rows, errors = [], [] validated_rows, errors = [], []
for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки for i, row in df.iterrows(): #проходит построчно по df, где i - индекс строки, row - данные строки

View File

@@ -6,10 +6,6 @@ class ExcelDigitalization(BaseModel):
class ExcelInfo(ExcelDigitalization): class ExcelInfo(ExcelDigitalization):
counts:int = Field(..., gt=0, description="the quantity of the clothes") counts:int = Field(..., gt=0, description="the quantity of the clothes")
ref_key:str = Field(..., description="reffering key from db") ref_key:str = Field(..., description="reffering key from db")
class ExcelReturning(BaseModel):
pass
class ExcelOut(BaseModel):
pass
class Settings(BaseSettings): class Settings(BaseSettings):
DIR:str DIR:str
PRICES_DIR:str PRICES_DIR:str

View File

@@ -30,14 +30,12 @@ class BaseHandler:
except Exception as e: except Exception as e:
raise Exception(f"⚠️ Ошибка при получении структуры {self.file_path}: {e}") raise Exception(f"⚠️ Ошибка при получении структуры {self.file_path}: {e}")
def process(self):
raise NotImplementedError
class YandexHandler(BaseHandler): class YandexHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skiprows=[0,1,3]) xls= self.struct()
# проверяем наличие нужных листов if "Получено от потребителей" in xls.sheet_names and "Возвращено потребителям" in xls.sheet_names:
if "Получено от потребителей" not in dfs or "Возвращено потребителям" not in dfs: dfs = self.read(xls,sheet_name=["Получено от потребителей","Возвращено потребителям"], skiprows=[0,1,3])
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
# вызываем функцию evaluating # вызываем функцию evaluating
validated_data = yandex_handler.evaluating(dfs) validated_data = yandex_handler.evaluating(dfs)
@@ -64,8 +62,10 @@ class YandexHandler(BaseHandler):
doc_creator.fill_document_items_report(doc_key, validated_data[0], validated_data[1]) doc_creator.fill_document_items_report(doc_key, validated_data[0], validated_data[1])
class WBHandler(BaseHandler): class WBHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read() xls= self.struct()
if "Sheet1" not in dfs : if "Sheet1" in xls.sheet_names:
dfs = self.read(xls)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data = wb_handler.evaluating(dfs) validated_data = wb_handler.evaluating(dfs)
print("Реализация WB завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата") print("Реализация WB завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата")
@@ -91,8 +91,10 @@ class WBHandler(BaseHandler):
doc_creator.fill_document_items_report(doc_key, validated_data[0], validated_data[1]) doc_creator.fill_document_items_report(doc_key, validated_data[0], validated_data[1])
class OZONHandler(BaseHandler): class OZONHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skiprows=14, skipfooter=17) xls= self.struct()
if "Отчет о реализации" not in dfs: if "Отчет о реализации" in xls.sheet_names:
dfs = self.read(xls, skiprows=14, skipfooter=17)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data = ozon_handler.evaluating(dfs) validated_data = ozon_handler.evaluating(dfs)
print("Реализация OZON завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата") print("Реализация OZON завершена, валидированных строк:", len(validated_data[0]), "Реализация", len(validated_data[1]), "Возвраты", validated_data[2], "Дата")
@@ -120,8 +122,10 @@ class OZONHandler(BaseHandler):
class OZONPurchasesHandler(BaseHandler): class OZONPurchasesHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skiprows=[0,3,4,5,6,7,8,9,10,11], skipfooter=1) xls= self.struct()
if "Отчёт о выкупленных товарах" not in dfs: if "Отчёт о выкупленных товарах" in xls.sheet_names:
dfs = self.read(xls, skiprows=[0,3,4,5,6,7,8,9,10,11], skipfooter=1)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data, date = ozon_purchases_handler.evaluating(dfs) validated_data, date = ozon_purchases_handler.evaluating(dfs)
print("Выкупы OZON завершены, валидированных строк:", len(validated_data), "Реализация", date, "Дата") print("Выкупы OZON завершены, валидированных строк:", len(validated_data), "Реализация", date, "Дата")
@@ -140,8 +144,10 @@ class OZONPurchasesHandler(BaseHandler):
doc_creator.fill_document_items_purchase(doc_key, validated_data) doc_creator.fill_document_items_purchase(doc_key, validated_data)
class WBPurchasesHandler(BaseHandler): class WBPurchasesHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skiprows=[0,3,4,5,6,7,8], skipfooter=7) xls= self.struct()
if "Sheet1" not in dfs: if "Sheet1" in xls.sheet_names:
dfs = self.read(xls, skiprows=[0,3,4,5,6,7,8], skipfooter=7)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
validated_data, date = wb_purchases_handler.evaluating(dfs) validated_data, date = wb_purchases_handler.evaluating(dfs)
print("Выкупы WB завершены, валидированных строк:", len(validated_data), "Реализация", date, "Дата" ) print("Выкупы WB завершены, валидированных строк:", len(validated_data), "Реализация", date, "Дата" )
@@ -160,8 +166,10 @@ class WBPurchasesHandler(BaseHandler):
doc_creator.fill_document_items_purchase(doc_key, validated_data) doc_creator.fill_document_items_purchase(doc_key, validated_data)
class OZONComHandler(BaseHandler): class OZONComHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skipfooter=1) xls= self.struct()
if "Лист_1" not in dfs: if "Лист_1" in xls.sheet_names:
dfs = self.read(xls, skipfooter=1)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
df = dfs["Лист_1"] df = dfs["Лист_1"]
# контрагент # контрагент
@@ -186,8 +194,10 @@ class OZONComHandler(BaseHandler):
doc_creator.fill_document_items_to_real(doc_key, validated_data) doc_creator.fill_document_items_to_real(doc_key, validated_data)
class WBComHandler(BaseHandler): class WBComHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skipfooter=1) xls= self.struct()
if "Лист_1" not in dfs: if "Лист_1" in xls.sheet_names:
dfs = self.read(xls, skipfooter=1)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
df = dfs["Лист_1"] df = dfs["Лист_1"]
# контрагент # контрагент
@@ -213,8 +223,10 @@ class WBComHandler(BaseHandler):
class YandexComHandler(BaseHandler): class YandexComHandler(BaseHandler):
def process(self): def process(self):
dfs = self.read(skipfooter=1) xls= self.struct()
if "Лист_1" not in dfs: if "Лист_1" in xls.sheet_names:
dfs = self.read(xls, skipfooter=1)
else:
raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы")
df = dfs["Лист_1"] df = dfs["Лист_1"]
# контрагент # контрагент