Skip to main content
Glama
hyunjae-labs

xlwings Excel MCP Server

by hyunjae-labs

delete_worksheet

Remove a specific worksheet from an Excel workbook using the xlwings Excel MCP Server. Specify the workbook session and sheet name to delete unwanted worksheets.

Instructions

Delete worksheet from workbook.

Args:
    session_id: Session ID from open_workbook (required)
    sheet_name: Name of the worksheet to delete

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
session_idYes
sheet_nameYes

Implementation Reference

  • Main tool handler decorated with @mcp.tool(). Validates session, acquires lock, imports and calls the xlwings implementation delete_worksheet_xlw_with_wb, handles errors and returns result message.
    def delete_worksheet(
        session_id: str,
        sheet_name: str
    ) -> str:
        """
        Delete worksheet from workbook.
        
        Args:
            session_id: Session ID from open_workbook (required)
            sheet_name: Name of the worksheet to delete
        """
        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 delete_worksheet_xlw_with_wb
                result = delete_worksheet_xlw_with_wb(session.workbook, sheet_name)
            
            return result.get("message", "Worksheet deleted 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 deleting worksheet: {e}")
            raise
  • Core xlwings implementation for deleting a worksheet using an existing workbook object (session-based). Checks if sheet exists and is not the only one, deletes it via wb.sheets[sheet_name].delete(), saves the workbook, returns success/error dict.
    def delete_worksheet_xlw_with_wb(wb, sheet_name: str) -> Dict[str, Any]:
        """Session-based version using existing workbook object.
        
        Args:
            wb: Workbook object from session
            sheet_name: 삭제할 시트명
            
        Returns:
            삭제 결과 딕셔너리
        """
        try:
            # 시트 존재 확인
            existing_sheets = [sheet.name for sheet in wb.sheets]
            if sheet_name not in existing_sheets:
                return {"error": f"Sheet '{sheet_name}' not found"}
            
            # 시트가 1개만 있으면 삭제 불가
            if len(wb.sheets) == 1:
                return {"error": "Cannot delete the only sheet in workbook"}
            
            # 시트 삭제
            wb.sheets[sheet_name].delete()
            
            # 파일 저장
            wb.save()
            
            return {"message": f"Sheet '{sheet_name}' deleted successfully"}
            
        except Exception as e:
            logger.error(f"xlwings 워크시트 삭제 실패: {e}")
            return {"error": f"Failed to delete worksheet: {str(e)}"}
  • Filepath-based xlwings implementation for deleting worksheet. Opens workbook, performs same checks and deletion as session version, cleans up app and workbook resources.
    def delete_worksheet_xlw(filepath: str, sheet_name: str) -> Dict[str, Any]:
        """xlwings를 사용한 워크시트 삭제
    
        Args:
            filepath: Excel 파일 경로
            sheet_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 sheet_name not in existing_sheets:
                return {"error": f"Sheet '{sheet_name}' not found"}
            
            # 시트가 1개만 있으면 삭제 불가
            if len(wb.sheets) == 1:
                return {"error": "Cannot delete the only sheet in workbook"}
            
            # 시트 삭제
            wb.sheets[sheet_name].delete()
            
            # 파일 저장
            wb.save()
            
            return {"message": f"Sheet '{sheet_name}' deleted successfully"}
            
        except Exception as e:
            logger.error(f"xlwings 워크시트 삭제 실패: {e}")
            return {"error": f"Failed to delete 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}")
  • The @mcp.tool() decorator registers this function as the MCP tool named "delete_worksheet" with input schema derived from function parameters.
    def delete_worksheet(
        session_id: str,
        sheet_name: str
    ) -> str:
        """
        Delete worksheet from workbook.
        
        Args:
            session_id: Session ID from open_workbook (required)
            sheet_name: Name of the worksheet to delete
        """
        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 delete_worksheet_xlw_with_wb
                result = delete_worksheet_xlw_with_wb(session.workbook, sheet_name)
            
            return result.get("message", "Worksheet deleted 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 deleting worksheet: {e}")
            raise

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