얼레벌레

회사 보안용프로그램으로 인한 엑셀파일 파이썬 로드 오류 해결 방법 본문

사담

회사 보안용프로그램으로 인한 엑셀파일 파이썬 로드 오류 해결 방법

낭낭이 2022. 2. 4. 21:20

회사에서 원본DB와 적재DB 사이에 오류가 생기는 현상이 어떤 툴이든 괜찮으니 왜 그런지 원인을 찾아보고, 그 원인을 어떻게 고칠 수 있을지 Python으로 적재할 수 있게끔 찾으라는 업무를 받았다.

정말 난감했던 건 엑셀파일부터 pd.read_excel로 안됐다는 점이다..

그래서 미친듯이 구글링을 했다.

우선 처음에 pd.read_excel했을 때 뜬 오류는 XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b’\x9b DRMONE’ 이었다.

Stackoverflow도..그냥 구글링도 미친듯이 찾아봤지만 XLRDError에 관한 내용은 많아도 뒷부분이 에러내용이 달랐다.

그 중 하나 찾은 방법이 openpyxl을 사용하는 것이었다.

[Python] Pandas에서 xlsx 파일 열기

위 블로그를 참고하였지만 engine을 넣어도 동일한 오류메세지가 떴으며, openpyxl.load_workbook을 사용하면 BadZipFile이라며 초딩같은 에러메세지가 떴다.

그래서 openpyxl를 사용하는 건 포기하고 다시 구글링을 했는데 DRM이라는 게 회사 보안프로그램이었다는 걸 알았다.. 그렇다 회사 보안프로그램으로 엑셀파일이 잠겨서 안됐던 것임 ㅠㅠ 사실 자물쇠때문인가? 생각은 했지만 사수님이 일도 별 거 해본 적 없는 나와 다른 인턴에게 보안프로그램으로 잠겨있는 엑셀파일을 넘겨줄리 있을까? 생각해서 그냥 바로 여쭤보질 않았다.

오기가 생겨서 회사 보안프로그램을 해결하는 방식으로 찾아봤다.

사내망 엑셀파일에 걸린 자물쇠를 뚫고 코딩하기

과장님 정말정말 감사합니다 ㅠㅠ

xlwings라는 라이브러리는 처음 접해봤는데 xlwings를 통해 불러오는 것까진 됐다. 하지만 또 다시 마지막줄에서 에러가 났다. 2)데이터프레임으로 읽어오기에 used_range에서 AttributeError: ‘Sheet’ object has no attribute ‘used_range’라는 에러가 떴다.

다시 한 번 좌절.. 구글링했지만 used_range관련해선 뜨질 않았고 아예 xlwings를 검색해보자고 마인드를 바꿨다.

파이썬 xlwings 엑셀 창 없이 작업하는 방법: 엑셀을 데이터프레임으로 읽어오기

해당 블로그를 사용해서 했더니..됐다!

import xlwings as xw
import pandas as pd

app = xw.App(visible=False)
wb = xw.Book('파일명.xlsx')
sheet = wb.sheets[0]
df = sheet.range('A1').options(pd.DataFrame, index=False, expand='table').value
app.kil()

됐긴 했는데 뭔가 이상했다. 블로그에 나와있는 그대로 코드를 쳤더니 첫번째줄 헤딩만 나오는 것이었다.. 즉 엑셀파일이 헤딩이 있고 G1열부터 시작하는 식이었어서 A1을 G1로 고쳤더니 제대로 나왔다.

원본파일과 적재파일을 비교해야 하기에 적재파일도 불러오려 했는데 거기서 또다시 com_error: (-2147352570, ‘알 수 없는 이름입니다’, None, None) 이 떴다 하하 파이썬 파일 하나 불러오는데 무슨 에러가 이렇게 뜬담

xlwings error: not opening excel workbook getting an error upon call wb.open

그치만 해당사항은 굉장히 간단했다. 적재엑셀파일이 열려있는 상태였는데 그거 닫고 코드 실행하면 되는 거였다.

드디어 파이썬 파일을 불러왔다!

하지만 사내 보안프로그램은 윗분한테 파일 암호화 해제신청하면 풀리는 거였다^_^..

^^ㅠ 그래도 구글링 많이 늘었슴니다!

'사담' 카테고리의 다른 글

슬기로운 인턴생활) DB 오류 해결하기  (0) 2022.02.16
Comments