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
| Name | Required | Description | Default |
|---|---|---|---|
| filepath | Yes | ||
| new_name | Yes | ||
| old_name | Yes |
Implementation Reference
- src/xlwings_mcp/server.py:882-912 (handler)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)}"}
- src/xlwings_mcp/sheet.py:34-39 (helper)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}")