반응형
import openpyxl
from openpyxl.styles import PatternFill
class CompareExcel:
def __init__(self, file_a, file_b, key_column, compare_columns):
self.file_a = file_a
self.file_b = file_b
self.key_column = key_column
self.compare_columns = compare_columns
self.wb1 = None
self.wb2 = None
self.ws1 = None
self.ws2 = None
self.yellow_fill = PatternFill(start_color="FFFFFF00", end_color="FFFFFF00", fill_type="solid")
def load_workbooks(self):
self.wb1 = openpyxl.load_workbook(self.file_a)
self.wb2 = openpyxl.load_workbook(self.file_b)
self.ws1 = self.wb1.active
self.ws2 = self.wb2.active
def find_column_index(self, column_name):
for cell in self.ws1[2]: # 두 번째 행부터 검색
if cell.value == column_name:
return cell.column
return None
def compare_rows(self):
key_column_index = self.find_column_index(self.key_column)
if key_column_index is None:
print(f"{self.file_a} 파일에 '{self.key_column}' 컬럼이 없습니다.")
return
compare_column_indexes = [self.find_column_index(column) for column in self.compare_columns]
if None in compare_column_indexes:
missing_columns = [
self.compare_columns[i] for i, index in enumerate(compare_column_indexes) if index is None
]
print(f"{self.file_a} 파일에 '{', '.join(missing_columns)}' 컬럼이 없습니다.")
return
for row in self.ws2.iter_rows(min_row=3): # 세 번째 행부터 비교 시작
key_value = row[key_column_index - 1].value
# A.xlsx에서 해당 키 값을 가진 행 찾기
for row1 in self.ws1.iter_rows(min_row=3): # 세 번째 행부터 검색
if row1[key_column_index - 1].value == key_value:
for i, column_index in enumerate(compare_column_indexes):
if row1[column_index - 1].value != row[column_index - 1].value:
row[column_index - 1].fill = self.yellow_fill
break
def save_workbook(self):
self.wb2.save(self.file_b)
def run(self):
self.load_workbooks()
self.compare_rows()
self.save_workbook()
# 사용 예시
if __name__ == "__main__":
A_EXCEL = r"C:\consolework\north-outdoor-crawler\output\20240509\노스\노스_남성-자켓&조끼-다운&패딩\노스_남성-자켓&조끼-다운&패딩_20240509_스스양식.xlsx"
B_EXCEL = r"C:\consolework\north-outdoor-crawler\output\20240509\노스\노스_남성-자켓&조끼-다운&패딩\노스_남성-자켓&조끼-다운&패딩_20240509_스스양식2.xlsx"
compare_excel = CompareExcel(
A_EXCEL, B_EXCEL, "판매자 상품코드", ["옵션값", "옵션가", "판매가", "옵션 재고수량", "재고수량"]
)
compare_excel.run()
해설
판매자 상품코드가 같은 행끼리 비교하여, 원하는 컬럼["옵션값".. 등]에 데이터가 변경된 경우 노랑색으로 표시해주는 코드입니다.
키 컬럼은 각 시트에 unique 값일 경우로 가정했습니다.
반응형
'프로그래밍 > python' 카테고리의 다른 글
| 파이썬 셀레니움 html 특정영역 드래그하여 복사하는 코드 (0) | 2024.11.29 |
|---|---|
| 셀레니움 크롬 개발자 도구 시크릿모드 복사붙여넣기 안됨 (1) | 2024.06.17 |
| python pyinstaller로 만든 exe 파일을 inno setup 6 버전으로 만들기(한글 설치) (0) | 2024.04.19 |
| openpyxl 엑셀에 특정열이 없는 경우 오른쪽으로 하나씩 추가하는 코드 (0) | 2024.04.13 |
| python 코드로 pnu(필지고유번호) 번호 만드는 방법 (0) | 2024.04.09 |