hariqueen/ERP_Preprocessor
0
1"""
2Excel 파일 처리 유틸리티
3"""
4import os
5import pandas as pd
6from typing import Dict, Any
7from core import config as cfg
8from pyexcel_xls import save_data
9from collections import OrderedDict
10
11def save_to_csv(df: pd.DataFrame, output_path: str, data_count: int = 0) -> bool:
12 try:
13 df.to_csv(output_path, index=False, encoding=cfg.CSV_OUTPUT_ENCODING)
14 print(f"처리 완료: {data_count}개 행이 '{output_path}'에 저장됨 ({cfg.CSV_OUTPUT_ENCODING} 인코딩)")
15 print(f"데이터는 {cfg.ERP_DATA_ROW_START}행부터 시작합니다.")
16 return True
17 except Exception as e:
18 print(f"CSV 파일 저장 중 오류 발생: {e}")
19 return False
20
21def save_to_excel(df: pd.DataFrame, output_path: str, data_count: int = 0) -> bool:
22 try:
23 # Excel 97-2003 형식(.xls)으로 저장
24 xls_path = output_path.replace('.xlsx', '.xls')
25
26 # 데이터프레임을 리스트로 변환
27 headers = df.columns.tolist()
28 data = [headers] # 헤더를 첫 번째 행으로 추가
29
30 # 데이터프레임의 각 행을 리스트로 변환하여 data에 추가
31 for _, row in df.iterrows():
32 data.append(row.tolist())
33
34 # OrderedDict 생성 (Sheet1이라는 이름의 시트에 데이터 저장)
35 data_dict = OrderedDict()
36 data_dict["Sheet1"] = data
37
38 # xls 파일로 저장
39 save_data(xls_path, data_dict)
40
41 print(f"처리 완료: {data_count}개 행이 '{xls_path}'에 저장됨")
42 print(f"엑셀 파일이 성공적으로 생성되었습니다: {os.path.abspath(xls_path)}")
43 return True
44 except Exception as e:
45 print(f"엑셀 파일 저장 중 오류 발생: {e}")
46
47 # 대체 저장 시도 (일반 Excel 형식)
48 try:
49 backup_path = output_path
50 df.to_excel(backup_path, index=False, engine='openpyxl')
51 print(f"대체 형식(.xlsx)으로 파일 저장 완료: {backup_path}")
52 return True
53 except Exception as ex:
54 print(f"대체 저장도 실패: {ex}")
55 return False
56
57def save_to_files(result_df: pd.DataFrame, output_csv: str, output_excel: str, erp_data_count: int) -> None:
58 # CSV 파일 저장
59 print(f"'{output_csv}'로 CSV 저장 중...")
60 csv_saved = save_to_csv(result_df, output_csv, erp_data_count)
61
62 # Excel 파일 저장
63 print(f"\n'{output_excel}'로 엑셀 파일 저장 중...")
64 excel_saved = save_to_excel(result_df, output_excel, erp_data_count)
65
66 if csv_saved and not excel_saved:
67 print("CSV 파일은 정상적으로 저장되었습니다.")
68 print("CSV 파일을 열 때는 Excel의 '데이터' 탭에서 '텍스트/CSV에서' 기능을 사용하시기 바랍니다.")