Skip to main content
Glama
hyunjae-labs

xlwings Excel MCP Server

by hyunjae-labs

insert_columns

Add one or more columns in an Excel worksheet starting at a specified column. Specify filepath, sheet name, start column, and column count for precise data organization.

Instructions

Insert one or more columns starting at the specified column.

Input Schema

NameRequiredDescriptionDefault
countNo
filepathYes
sheet_nameYes
start_colYes

Input Schema (JSON Schema)

{ "properties": { "count": { "default": 1, "title": "Count", "type": "integer" }, "filepath": { "title": "Filepath", "type": "string" }, "sheet_name": { "title": "Sheet Name", "type": "string" }, "start_col": { "title": "Start Col", "type": "integer" } }, "required": [ "filepath", "sheet_name", "start_col" ], "title": "insert_columnsArguments", "type": "object" }

Implementation Reference

  • MCP tool registration for 'insert_columns'. This wrapper function handles session-based and legacy filepath calls, dispatching to the xlwings implementation functions.
    def insert_columns( sheet_name: str, start_col: int, session_id: Optional[str] = None, filepath: Optional[str] = None, count: int = 1 ) -> str: """ Insert one or more columns starting at the specified column. Args: sheet_name: Name of worksheet start_col: Column number to start inserting at session_id: Session ID from open_workbook (preferred) filepath: Path to Excel file (legacy, deprecated) count: Number of columns to insert 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 insert_columns_xlw_with_wb result = insert_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 insert_columns_xlw result = insert_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 inserting columns: {e}") raise
  • Core handler function for inserting columns using xlwings with filepath. Opens workbook, inserts columns via COM API, saves and closes.
    def insert_columns_xlw( filepath: str, sheet_name: str, start_col: int, count: int = 1 ) -> Dict[str, Any]: """ Insert 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 insertion (1-based) count: Number of columns to insert Returns: Dict with success message or error """ app = None wb = None # Initialize COM for thread safety (Windows) _com_initialize() try: logger.info(f"Inserting {count} columns at 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) # Insert columns using xlwings target_col = sheet.range(f"{col_letter}:{col_letter}") # Insert columns - use COM API for better control for _ in range(count): target_col.api.Insert() # Save the workbook wb.save() logger.info(f"βœ… Successfully inserted {count} columns at column {col_letter}") return { "message": f"Successfully inserted {count} columns at column {col_letter}", "sheet": sheet_name, "start_col": start_col, "count": count } except Exception as e: logger.error(f"Error inserting columns: {e}") return {"error": str(e)} finally: if wb: wb.close() if app: app.quit()
  • Session-based handler for inserting columns using existing workbook object from MCP session.
    def insert_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 insertion (1-based) count: Number of columns to insert Returns: Dict with success message or error """ try: logger.info(f"πŸ“Š Inserting {count} columns at 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) # Insert columns using xlwings target_col = sheet.range(f"{col_letter}:{col_letter}") # Insert columns - use COM API for better control for _ in range(count): target_col.api.Insert() # Save the workbook wb.save() logger.info(f"βœ… Successfully inserted {count} columns at column {col_letter}") return { "message": f"Successfully inserted {count} columns at column {col_letter}", "sheet": sheet_name, "start_col": start_col, "count": count } except Exception as e: logger.error(f"Error inserting 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