CoolFace
Apppublic

hariqueen/ERP_Preprocessor

sourceHugging Faceotherupdated 1y agoView on Hugging Face
0likes
excel_utils.py68 linesDownload Raw Back to utils
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에서' 기능을 사용하시기 바랍니다.")