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