Skip to main content
Glama
hyunjae-labs

xlwings Excel MCP Server

by hyunjae-labs

rename_worksheet

Change worksheet names in Excel workbooks through the xlwings Excel MCP Server. Provide session ID, current name, and new name to update sheet labels for better organization.

Instructions

Rename worksheet in workbook. Args: session_id: Session ID from open_workbook (required) old_name: Current name of the worksheet new_name: New name for the worksheet

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
session_idYes
old_nameYes
new_nameYes

Implementation Reference

  • Registration and handler for the 'rename_worksheet' MCP tool. Validates session and delegates to xlwings implementation.
    @mcp.tool() def rename_worksheet( session_id: str, old_name: str, new_name: str ) -> str: """ Rename worksheet in workbook. Args: session_id: Session ID from open_workbook (required) old_name: Current name of the worksheet new_name: New name for the worksheet """ try: # Validate session using centralized helper session = get_validated_session(session_id) if isinstance(session, str): # Error message returned return session with session.lock: from xlwings_mcp.xlwings_impl.sheet_xlw import rename_worksheet_xlw_with_wb result = rename_worksheet_xlw_with_wb(session.workbook, old_name, new_name) return result.get("message", "Worksheet renamed successfully") if "error" not in result else f"Error: {result['error']}" except (ValidationError, SheetError) as e: return f"Error: {str(e)}" except Exception as e: logger.error(f"Error renaming worksheet: {e}") raise
  • Core xlwings implementation for renaming a worksheet using an existing workbook object (session-based). Performs validation, renames sheet, and saves.
    def rename_worksheet_xlw_with_wb(wb, old_name: str, new_name: str) -> Dict[str, Any]: """Session-based version using existing workbook object. Args: wb: Workbook object from session old_name: 기존 시트명 new_name: 새 시트명 Returns: 이름 변경 결과 딕셔너리 """ try: # 기존 시트 확인 existing_sheets = [sheet.name for sheet in wb.sheets] if old_name not in existing_sheets: return {"error": f"Sheet '{old_name}' not found"} # 새 이름 중복 확인 if new_name in existing_sheets: return {"error": f"Sheet '{new_name}' already exists"} # 시트 이름 변경 wb.sheets[old_name].name = new_name # 파일 저장 wb.save() return {"message": f"Sheet renamed from '{old_name}' to '{new_name}'"} except Exception as e: logger.error(f"xlwings 워크시트 이름 변경 실패: {e}") return {"error": f"Failed to rename worksheet: {str(e)}"}
  • Wrapper function in sheet.py that calls the non-session xlwings rename_worksheet_xlw implementation (legacy/non-primary path).
    def rename_sheet(filepath: str, old_name: str, new_name: str) -> Dict[str, Any]: """Rename a worksheet.""" result = rename_worksheet_xlw(filepath, old_name, new_name) if "error" in result: raise SheetError(result["error"]) return result
  • Non-session (filepath-based) xlwings implementation for renaming worksheet. Opens workbook, renames, saves, and cleans up Excel app.
    def rename_worksheet_xlw(filepath: str, old_name: str, new_name: str) -> Dict[str, Any]: """xlwings를 사용한 워크시트 이름 변경 Args: filepath: Excel 파일 경로 old_name: 기존 시트명 new_name: 새 시트명 Returns: 이름 변경 결과 딕셔너리 """ app = None wb = None # Initialize COM for thread safety (Windows) _com_initialize() try: # 파일 경로 검증 file_path = Path(filepath) if not file_path.exists(): return {"error": f"File not found: {filepath}"} # Excel 앱 시작 app = xw.App(visible=False, add_book=False) # 워크북 열기 wb = app.books.open(filepath) # 기존 시트 확인 existing_sheets = [sheet.name for sheet in wb.sheets] if old_name not in existing_sheets: return {"error": f"Sheet '{old_name}' not found"} # 새 이름 중복 확인 if new_name in existing_sheets: return {"error": f"Sheet '{new_name}' already exists"} # 시트 이름 변경 wb.sheets[old_name].name = new_name # 파일 저장 wb.save() return {"message": f"Sheet renamed from '{old_name}' to '{new_name}'"} except Exception as e: logger.error(f"xlwings 워크시트 이름 변경 실패: {e}") return {"error": f"Failed to rename worksheet: {str(e)}"} finally: # 리소스 정리 if wb: try: wb.close() except Exception as e: logger.warning(f"워크북 닫기 실패: {e}") if app: try: app.quit() except Exception as e: logger.warning(f"Excel 앱 종료 실패: {e}")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hyunjae-labs/xlwings-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server