Skip to main content
Glama
hyunjae-labs

xlwings Excel MCP Server

by hyunjae-labs

delete_sheet_columns

Remove specific columns in an Excel sheet starting from a designated column, simplifying file cleanup and organization through secure, automated Excel file manipulation.

Instructions

Delete one or more columns starting at the specified column.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
countNo
filepathYes
sheet_nameYes
start_colYes

Implementation Reference

  • Primary MCP tool handler for 'delete_sheet_columns'. Dispatches to session-based or legacy filepath-based implementations based on parameters provided.
    @mcp.tool() def delete_sheet_columns( sheet_name: str, start_col: int, session_id: Optional[str] = None, filepath: Optional[str] = None, count: int = 1 ) -> str: """ Delete one or more columns starting at the specified column. Args: sheet_name: Name of worksheet start_col: Column number to start deleting from session_id: Session ID from open_workbook (preferred) filepath: Path to Excel file (legacy, deprecated) count: Number of columns to delete Note: Use session_id for better performance. filepath parameter is deprecated. """ try: # Support both new (session_id) and old (filepath) API if session_id: # New API: use session session = SESSION_MANAGER.get_session(session_id) if not session: return ERROR_TEMPLATES['SESSION_NOT_FOUND'].format( session_id=session_id, ttl=10 # Default TTL is 10 minutes (600 seconds) ) with session.lock: from xlwings_mcp.xlwings_impl.rows_cols_xlw import delete_sheet_columns_xlw_with_wb result = delete_sheet_columns_xlw_with_wb(session.workbook, sheet_name, start_col, count) elif filepath: # Legacy API: backwards compatibility logger.warning("Using deprecated filepath parameter. Please use session_id instead.") full_path = get_excel_path(filepath) from xlwings_mcp.xlwings_impl.rows_cols_xlw import delete_sheet_columns_xlw result = delete_sheet_columns_xlw(full_path, sheet_name, start_col, count) else: return ERROR_TEMPLATES['PARAMETER_MISSING'].format( param1='session_id', param2='filepath' ) if "error" in result: return f"Error: {result['error']}" return result["message"] except (ValidationError, SheetError) as e: return f"Error: {str(e)}" except Exception as e: logger.error(f"Error deleting columns: {e}") raise
  • Core implementation of column deletion using xlwings for standalone filepath mode (legacy). Handles Excel COM API interactions, file opening/closing, error handling, and column number to letter conversion.
    def delete_sheet_columns_xlw( filepath: str, sheet_name: str, start_col: int, count: int = 1 ) -> Dict[str, Any]: """ Delete one or more columns in Excel using xlwings. Args: filepath: Path to Excel file sheet_name: Name of worksheet start_col: Column number to start deletion (1-based) count: Number of columns to delete Returns: Dict with success message or error """ app = None wb = None # Initialize COM for thread safety (Windows) _com_initialize() try: logger.info(f"Deleting {count} columns starting from column {start_col} in {sheet_name}") # Check if file exists if not os.path.exists(filepath): return {"error": f"File not found: {filepath}"} # Open Excel app and workbook app = xw.App(visible=False, add_book=False) wb = app.books.open(filepath) # Check if sheet exists sheet_names = [s.name for s in wb.sheets] if sheet_name not in sheet_names: return {"error": f"Sheet '{sheet_name}' not found"} sheet = wb.sheets[sheet_name] # Convert column number to letter def col_num_to_letter(n): string = "" while n > 0: n, remainder = divmod(n - 1, 26) string = chr(65 + remainder) + string return string col_letter = col_num_to_letter(start_col) # Delete columns using xlwings # Delete multiple times since we delete one at a time for i in range(count): col_to_delete = sheet.range(f"{col_letter}:{col_letter}") col_to_delete.api.Delete() # Save the workbook wb.save() logger.info(f"✅ Successfully deleted {count} columns starting from column {col_letter}") return { "message": f"Successfully deleted {count} columns starting from column {col_letter}", "sheet": sheet_name, "start_col": start_col, "count": count } except Exception as e: logger.error(f"Error deleting columns: {e}") return {"error": str(e)} finally: if wb: wb.close() if app: app.quit()
  • Session-optimized implementation of column deletion using existing workbook object. Used by the primary handler when session_id is provided.
    def delete_sheet_columns_xlw_with_wb( wb, sheet_name: str, start_col: int, count: int = 1 ) -> Dict[str, Any]: """Session-based version using existing workbook object. Args: wb: Workbook object from session sheet_name: Name of worksheet start_col: Column number to start deletion (1-based) count: Number of columns to delete Returns: Dict with success message or error """ try: logger.info(f"🗑️ Deleting {count} columns starting from column {start_col} in {sheet_name}") # Check if sheet exists sheet_names = [s.name for s in wb.sheets] if sheet_name not in sheet_names: return {"error": f"Sheet '{sheet_name}' not found"} sheet = wb.sheets[sheet_name] # Convert column number to letter def col_num_to_letter(n): string = "" while n > 0: n, remainder = divmod(n - 1, 26) string = chr(65 + remainder) + string return string col_letter = col_num_to_letter(start_col) # Delete columns using xlwings # Delete multiple times since we delete one at a time for i in range(count): col_to_delete = sheet.range(f"{col_letter}:{col_letter}") col_to_delete.api.Delete() # Save the workbook wb.save() logger.info(f"✅ Successfully deleted {count} columns starting from column {col_letter}") return { "message": f"Successfully deleted {count} columns starting from column {col_letter}", "sheet": sheet_name, "start_col": start_col, "count": count } except Exception as e: logger.error(f"Error deleting columns: {e}") return {"error": str(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