Skip to main content
Glama
hyunjae-labs

xlwings Excel MCP Server

by hyunjae-labs

rename_worksheet

Rename a worksheet in an Excel workbook by specifying the filepath, old name, and new name using the xlwings Excel MCP Server.

Instructions

Rename worksheet in workbook.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filepathYes
new_nameYes
old_nameYes

Implementation Reference

  • MCP tool handler for 'rename_worksheet'. Validates session, locks it, imports and calls the xlwings implementation with workbook object, handles errors and returns result message.
    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 implementation of worksheet renaming using xlwings with an existing workbook object (session-based). Performs existence checks, renames the sheet, saves the workbook, and returns success/error dict.
    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)}"}
  • High-level wrapper function 'rename_sheet' that calls the non-session xlwings implementation and raises custom exception on error.
    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 version of worksheet renaming: opens workbook from filepath, performs rename, saves, 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