클로드로 엑셀 파일 생성
1. 파일 생성
이번에는 엑셀 파일을 생성하는 실습을 해보도록 하겠습니다. 같은 폴더에 tutorial_4.py
라는 파일을 만들고 아래와 같이 작성해주세요. 여기서 주의해야 할 점은 앞서 파일 입출력을 했기 때문에 함수 명을 비슷한 이름으로 하면 LLM은 앞의 함수를 실행시킬 수 있습니다. 따라서 명확하게 구분되며, 목적에 적합하게 이름을 지어주셔야 합니다.
엑셀 라이터에 대한 설명은 아래 링크를 참고해주세요.
엑셀라이터 요약강의from mcp.server.fastmcp import FastMCP
# MCP 서버 생성
mcp = FastMCP(name="tutorial_4", host="127.0.0.1", port=5003, timeout=30)
# 엑셀라이터로 입력된 표 정리하기
@mcp.tool()
def write_excel(contents: list) -> str:
# pip install xlsxwriter
# 엑셀 파일 생성하기(test.xlsx로 생성)
import os
import xlsxwriter
file_path = os.path.join("c:/test", "test.xlsx")
workbook = xlsxwriter.Workbook(file_path)
# 파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet("test")
# 엑셀에 데이터 쓰기
for row_num, row_data in enumerate(contents):
for col_num, value in enumerate(row_data.values()):
worksheet.write(row_num, col_num, value)
# 엑셀 파일 저장하기
workbook.close()
return f"엑셀 파일 '{file_path}' 가 생성되었습니다."
# 서버 실행
if __name__ == "__main__":
mcp.run()
from mcp.server.fastmcp import FastMCP
# MCP 서버 생성
mcp = FastMCP(name="tutorial_4", host="127.0.0.1", port=5003, timeout=30)
# 엑셀라이터로 입력된 표 정리하기
@mcp.tool()
def write_excel(contents: list) -> str:
# pip install xlsxwriter
# 엑셀 파일 생성하기(test.xlsx로 생성)
import os
import xlsxwriter
file_path = os.path.join("c:/test", "test.xlsx")
workbook = xlsxwriter.Workbook(file_path)
# 파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet("test")
# 엑셀에 데이터 쓰기
for row_num, row_data in enumerate(contents):
for col_num, value in enumerate(row_data.values()):
worksheet.write(row_num, col_num, value)
# 엑셀 파일 저장하기
workbook.close()
return f"엑셀 파일 '{file_path}' 가 생성되었습니다."
# 서버 실행
if __name__ == "__main__":
mcp.run()
2. 설정파일 작성
claude_desktop_config.json 파일을 아래와 같이 수정해주세요.
{
"mcpServers": {
"tutorial_1": {
"command": "python",
"args": [
"C:\\test\\tutorial_1.py"
]
},
"tutorial_2": {
"command": "python",
"args": [
"C:\\test\\tutorial_2.py"
]
},
"tutorial_3": {
"command": "python",
"args": [
"C:\\test\\tutorial_3.py"
]
},
"tutorial_4": {
"command": "python",
"args": [
"C:\\test\\tutorial_4.py"
]
}
}
}
{
"mcpServers": {
"tutorial_1": {
"command": "python",
"args": [
"C:\\test\\tutorial_1.py"
]
},
"tutorial_2": {
"command": "python",
"args": [
"C:\\test\\tutorial_2.py"
]
},
"tutorial_3": {
"command": "python",
"args": [
"C:\\test\\tutorial_3.py"
]
},
"tutorial_4": {
"command": "python",
"args": [
"C:\\test\\tutorial_4.py"
]
}
}
}
3. 프롬프트
`contents = [{'이름': '홍길동', '나이': 30, '성별': '남자'}, {...}]` 의 형태로 셈플 데이터 10개를 만들고, 이를 write_excel() 함수를 사용해서 엑셀에 작성해줘. 이 함수의 시트 이름은 항상 'test'이기 때문에 별도로 입력할 필요는 없어.
`contents = [{'이름': '홍길동', '나이': 30, '성별': '남자'}, {...}]` 의 형태로 셈플 데이터 10개를 만들고, 이를 write_excel() 함수를 사용해서 엑셀에 작성해줘. 이 함수의 시트 이름은 항상 'test'이기 때문에 별도로 입력할 필요는 없어.
4. 나아가기
이렇게 프롬프트를 길게 입력할 것이 아니라 함수 안에 아래와 같이 Docstring을 자세하게 작성하여 클로드가 입력값을 제대로 줄 수 있게 하는 편이 좋습니다. 또한 정확한 애러명을 알기 위해 try-except 문을 사용하여 애러를 잡아주는 것이 좋습니다. 아래는 예시입니다.
from mcp.server.fastmcp import FastMCP
# MCP 서버 생성
mcp = FastMCP(name="tutorial_4", host="127.0.0.1", port=5003, timeout=30)
# 엑셀 파일 읽기
@mcp.tool()
def read_excel(file_name: str) -> list:
"""엑셀 파일을 읽어 데이터를 리스트로 반환합니다.
엑셀 파일명을 받아, 그 내용을 딕셔너리 리스트 형태로 변환합니다.
Args:
file_name (str): 읽을 엑셀 파일의 이름
예: 'data.xlsx'
Returns:
list: 엑셀 데이터가 포함된 딕셔너리 리스트
예: [{'name': 'hojun', 'age': 30}, {...}]
"""
import os
import pandas as pd
# pip install pandas 하셔야 합니다.
# pip install openpyxl 하셔야 합니다.
file_path = os.path.join("c:/test", file_name)
try:
# 엑셀 파일이 존재하는지 확인
if not os.path.exists(file_path):
return [f"파일 '{file_name}' 는 존재하지 않습니다."]
# 엑셀 파일 읽기
df = pd.read_excel(file_path)
# 데이터프레임을 딕셔너리 리스트로 변환
result = df.to_dict("records")
return result
except Exception as e:
return [f"파일 '{file_name}' 를 읽는 중 오류가 발생했습니다: {e}"]
@mcp.tool()
def write_excel(contents: list) -> str:
"""리스트를 엑셀 파일로 저장합니다.
주어진 리스트 데이터를 엑셀 파일로 변환하여 지정된 경로에 저장합니다.
Args:
contents (list): 딕셔너리 리스트 형태의 데이터
예: [{'name': 'hojun', 'age': 30}, {...}]
Returns:
str: 파일 생성 완료 메시지
예: '엑셀 파일 c:/test/test.xlsx 가 생성되었습니다.'
"""
import os
import xlsxwriter
file_path = os.path.join("c:/test", "test.xlsx")
workbook = xlsxwriter.Workbook(file_path)
# 파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet("test")
# 엑셀에 데이터 쓰기
for row_num, row_data in enumerate(contents):
for col_num, value in enumerate(row_data.values()):
worksheet.write(row_num, col_num, value)
# 엑셀 파일 저장하기
workbook.close()
return f"엑셀 파일 '{file_path}' 가 생성되었습니다."
# 서버 실행
if __name__ == "__main__":
mcp.run()
from mcp.server.fastmcp import FastMCP
# MCP 서버 생성
mcp = FastMCP(name="tutorial_4", host="127.0.0.1", port=5003, timeout=30)
# 엑셀 파일 읽기
@mcp.tool()
def read_excel(file_name: str) -> list:
"""엑셀 파일을 읽어 데이터를 리스트로 반환합니다.
엑셀 파일명을 받아, 그 내용을 딕셔너리 리스트 형태로 변환합니다.
Args:
file_name (str): 읽을 엑셀 파일의 이름
예: 'data.xlsx'
Returns:
list: 엑셀 데이터가 포함된 딕셔너리 리스트
예: [{'name': 'hojun', 'age': 30}, {...}]
"""
import os
import pandas as pd
# pip install pandas 하셔야 합니다.
# pip install openpyxl 하셔야 합니다.
file_path = os.path.join("c:/test", file_name)
try:
# 엑셀 파일이 존재하는지 확인
if not os.path.exists(file_path):
return [f"파일 '{file_name}' 는 존재하지 않습니다."]
# 엑셀 파일 읽기
df = pd.read_excel(file_path)
# 데이터프레임을 딕셔너리 리스트로 변환
result = df.to_dict("records")
return result
except Exception as e:
return [f"파일 '{file_name}' 를 읽는 중 오류가 발생했습니다: {e}"]
@mcp.tool()
def write_excel(contents: list) -> str:
"""리스트를 엑셀 파일로 저장합니다.
주어진 리스트 데이터를 엑셀 파일로 변환하여 지정된 경로에 저장합니다.
Args:
contents (list): 딕셔너리 리스트 형태의 데이터
예: [{'name': 'hojun', 'age': 30}, {...}]
Returns:
str: 파일 생성 완료 메시지
예: '엑셀 파일 c:/test/test.xlsx 가 생성되었습니다.'
"""
import os
import xlsxwriter
file_path = os.path.join("c:/test", "test.xlsx")
workbook = xlsxwriter.Workbook(file_path)
# 파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet("test")
# 엑셀에 데이터 쓰기
for row_num, row_data in enumerate(contents):
for col_num, value in enumerate(row_data.values()):
worksheet.write(row_num, col_num, value)
# 엑셀 파일 저장하기
workbook.close()
return f"엑셀 파일 '{file_path}' 가 생성되었습니다."
# 서버 실행
if __name__ == "__main__":
mcp.run()
이렇게 Docstring을 작성하면 아래와 같이 프롬프트가 간결해집니다.
이름, 나이, 성별, 이메일을 리스트로 만들어서 엑셀에 작성해줘.
이름, 나이, 성별, 이메일을 리스트로 만들어서 엑셀에 작성해줘.
현재 폴더에서 test.xlsx를 읽어 안에 홍길동 정보를 알려줘.
현재 폴더에서 test.xlsx를 읽어 안에 홍길동 정보를 알려줘.
