• 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    해결됨

엑셀 xlsm파일 불러오기

23.04.11 16:35 작성 조회수 668

1

class App:

def init(self, master):

self.master = master

self.file_path = 'C:\coding'

self.wb = None

master.title("Excel 파일 불러오기")

self.label = tk.Label(master, text="Excel 파일을 선택하세요.")

self.label.pack()

self.button = tk.Button(master, text="파일 선택", command=self.open_file_dialog)

self.button.pack()

self.file_path = None # 파일 경로를 저장할 변수를 초기화합니다.

def open_file_dialog(self):

self.file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls;*.xlsm")])

if self.file_path:

try:

df = pd.read_excel(self.file_path)

self.label.config(text="파일이 성공적으로 불러와졌습니다.")

except pd.errors.ParserError:

self.label.config(text="유효한 엑셀 파일이 아닙니다.")

else:

self.label.config(text="파일을 선택하지 않았습니다.")

이 엑셀을 매크로가 있는 문서에 실행시키면

아래와 같은 에러가 뜹니다.

실행는 되는데 에러가 신경쓰입니다

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\Public\Documents\ESTsoft\CreatorTemp\ipykernel_20568\1648523354.py", line 35, in open_file_dialog
    df = pd.read_excel(self.file_path)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\util\_decorators.py", line 211, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\util\_decorators.py", line 331, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_base.py", line 482, in read_excel
    io = ExcelFile(io, storage_options=storage_options, engine=engine)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_base.py", line 1695, in __init__
    self._reader = self._engines[engine](self._io, storage_options=storage_options)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_openpyxl.py", line 557, in __init__
    super().__init__(filepath_or_buffer, storage_options=storage_options)
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_base.py", line 545, in __init__
    self.book = self.load_workbook(self.handles.handle)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\excel\_openpyxl.py", line 568, in load_workbook
    return load_workbook(
           ^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\excel.py", line 346, in load_workbook
    reader.read()
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\excel.py", line 303, in read
    self.parser.assign_names()
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\reader\workbook.py", line 109, in assign_names
    sheet.defined_names[name] = defn
    ^^^^^^^^^^^^^^^^^^^
AttributeError: 'ReadOnlyWorksheet' object has no attribute 'defined_names'

답변 2

·

답변을 작성해보세요.

1

헉 아래 인프런 AI 인턴이 정확한 답변을 제시해준 것 같아요!

pip install --upgrade openpyxl

을 실행하여 openpyxl을 업데이트하신 후에 다시 실행해 보시기 바랍니다^^

 

멋진 코드 짜셨네요!

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.24

안녕하세요, 인프런 AI 인턴이에요. 엑셀 xlsm 파일 불러오기 코드를 작성하고 있는데, 에러가 발생하는 상황입니다. 해당 에러는 ReadOnlyWorksheet 객체가 defined_names 속성을 가지지 않기 때문에 발생하는 것으로 보입니다. 이를 해결하기 위해 openpyxl 라이브러리를 업그레이드해보세요. 예를 들면, pip install openpyxl –upgrade 명령어를 입력하시면 업그레이드가 가능합니다. 이후에도 에러가 발생한다면, openpyxl 라이브러리가 최신 버전인지 확인해보시기 바랍니다. 감사합니다.