Skip to main content
Glama
structure.py10.2 kB
"""Excel 结构操作工具.""" from typing import Any, Optional from fastmcp import FastMCP from loguru import logger from office_mcp_server.handlers.excel_handler import ExcelHandler def register_structure_tools(mcp: FastMCP, excel_handler: ExcelHandler) -> None: """注册 Excel 结构操作工具.""" @mcp.tool() def insert_excel_rows( filename: str, sheet_name: str, row_index: int, count: int = 1 ) -> dict[str, Any]: """插入 Excel 行.""" logger.info(f"MCP工具调用: insert_excel_rows(filename={filename}, row_index={row_index}, count={count})") return excel_handler.insert_rows(filename, sheet_name, row_index, count) @mcp.tool() def delete_excel_rows( filename: str, sheet_name: str, row_index: int, count: int = 1 ) -> dict[str, Any]: """删除 Excel 行.""" logger.info(f"MCP工具调用: delete_excel_rows(filename={filename}, row_index={row_index}, count={count})") return excel_handler.delete_rows(filename, sheet_name, row_index, count) @mcp.tool() def insert_excel_cols( filename: str, sheet_name: str, col_index: int, count: int = 1 ) -> dict[str, Any]: """插入 Excel 列.""" logger.info(f"MCP工具调用: insert_excel_cols(filename={filename}, col_index={col_index}, count={count})") return excel_handler.insert_cols(filename, sheet_name, col_index, count) @mcp.tool() def delete_excel_cols( filename: str, sheet_name: str, col_index: int, count: int = 1 ) -> dict[str, Any]: """删除 Excel 列.""" logger.info(f"MCP工具调用: delete_excel_cols(filename={filename}, col_index={col_index}, count={count})") return excel_handler.delete_cols(filename, sheet_name, col_index, count) @mcp.tool() def hide_excel_rows( filename: str, sheet_name: str, row_start: int, row_end: Optional[int] = None ) -> dict[str, Any]: """隐藏 Excel 行.""" logger.info(f"MCP工具调用: hide_excel_rows(filename={filename}, row_start={row_start}, row_end={row_end})") return excel_handler.hide_rows(filename, sheet_name, row_start, row_end) @mcp.tool() def show_excel_rows( filename: str, sheet_name: str, row_start: int, row_end: Optional[int] = None ) -> dict[str, Any]: """显示 Excel 行.""" logger.info(f"MCP工具调用: show_excel_rows(filename={filename}, row_start={row_start}, row_end={row_end})") return excel_handler.show_rows(filename, sheet_name, row_start, row_end) @mcp.tool() def hide_excel_cols( filename: str, sheet_name: str, col_start: int, col_end: Optional[int] = None ) -> dict[str, Any]: """隐藏 Excel 列.""" logger.info(f"MCP工具调用: hide_excel_cols(filename={filename}, col_start={col_start}, col_end={col_end})") return excel_handler.hide_cols(filename, sheet_name, col_start, col_end) @mcp.tool() def show_excel_cols( filename: str, sheet_name: str, col_start: int, col_end: Optional[int] = None ) -> dict[str, Any]: """显示 Excel 列.""" logger.info(f"MCP工具调用: show_excel_cols(filename={filename}, col_start={col_start}, col_end={col_end})") return excel_handler.show_cols(filename, sheet_name, col_start, col_end) @mcp.tool() def set_excel_row_height( filename: str, sheet_name: str, row_index: int, height: float ) -> dict[str, Any]: """设置 Excel 行高.""" logger.info(f"MCP工具调用: set_excel_row_height(filename={filename}, row_index={row_index}, height={height})") return excel_handler.set_row_height(filename, sheet_name, row_index, height) @mcp.tool() def set_excel_col_width( filename: str, sheet_name: str, col_index: int, width: float ) -> dict[str, Any]: """设置 Excel 列宽.""" logger.info(f"MCP工具调用: set_excel_col_width(filename={filename}, col_index={col_index}, width={width})") return excel_handler.set_col_width(filename, sheet_name, col_index, width) @mcp.tool() def merge_excel_cells( filename: str, sheet_name: str, cell_range: str ) -> dict[str, Any]: """合并 Excel 单元格.""" logger.info(f"MCP工具调用: merge_excel_cells(filename={filename}, cell_range={cell_range})") return excel_handler.merge_cells(filename, sheet_name, cell_range) @mcp.tool() def unmerge_excel_cells( filename: str, sheet_name: str, cell_range: str ) -> dict[str, Any]: """取消合并 Excel 单元格.""" logger.info(f"MCP工具调用: unmerge_excel_cells(filename={filename}, cell_range={cell_range})") return excel_handler.unmerge_cells(filename, sheet_name, cell_range) @mcp.tool() def insert_excel_cells( filename: str, sheet_name: str, cell: str, shift: str = "down", ) -> dict[str, Any]: """插入 Excel 单元格并移动其他单元格. Args: filename: 文件名 sheet_name: 工作表名称 cell: 起始单元格 (如 'B2') shift: 移动方向 ('down'向下, 'right'向右, 默认 'down') Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: insert_excel_cells(filename={filename}, cell={cell}, shift={shift})") return excel_handler.insert_cells(filename, sheet_name, cell, shift) @mcp.tool() def delete_excel_cells( filename: str, sheet_name: str, cell: str, shift: str = "up", ) -> dict[str, Any]: """删除 Excel 单元格并移动其他单元格. Args: filename: 文件名 sheet_name: 工作表名称 cell: 起始单元格 (如 'B2') shift: 移动方向 ('up'向上, 'left'向左, 默认 'up') Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: delete_excel_cells(filename={filename}, cell={cell}, shift={shift})") return excel_handler.delete_cells(filename, sheet_name, cell, shift) @mcp.tool() def insert_excel_cell_range( filename: str, sheet_name: str, start_cell: str, end_cell: str, shift: str = "down", ) -> dict[str, Any]: """插入 Excel 单元格范围并移动其他单元格. Args: filename: 文件名 sheet_name: 工作表名称 start_cell: 起始单元格 (如 'B2') end_cell: 结束单元格 (如 'D4') shift: 移动方向 ('down'向下, 'right'向右, 默认 'down') Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: insert_excel_cell_range(filename={filename}, range={start_cell}:{end_cell}, shift={shift})") return excel_handler.insert_cell_range(filename, sheet_name, start_cell, end_cell, shift) @mcp.tool() def delete_excel_cell_range( filename: str, sheet_name: str, start_cell: str, end_cell: str, shift: str = "up", ) -> dict[str, Any]: """删除 Excel 单元格范围并移动其他单元格. Args: filename: 文件名 sheet_name: 工作表名称 start_cell: 起始单元格 (如 'B2') end_cell: 结束单元格 (如 'D4') shift: 移动方向 ('up'向上, 'left'向左, 默认 'up') Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: delete_excel_cell_range(filename={filename}, range={start_cell}:{end_cell}, shift={shift})") return excel_handler.delete_cell_range(filename, sheet_name, start_cell, end_cell, shift) @mcp.tool() def copy_excel_rows( filename: str, sheet_name: str, source_row: int, target_row: int, count: int = 1 ) -> dict[str, Any]: """复制 Excel 行.""" logger.info(f"MCP工具调用: copy_excel_rows(filename={filename}, source={source_row}, target={target_row})") return excel_handler.copy_rows(filename, sheet_name, source_row, target_row, count) @mcp.tool() def copy_excel_cols( filename: str, sheet_name: str, source_col: int, target_col: int, count: int = 1 ) -> dict[str, Any]: """复制 Excel 列.""" logger.info(f"MCP工具调用: copy_excel_cols(filename={filename}, source={source_col}, target={target_col})") return excel_handler.copy_cols(filename, sheet_name, source_col, target_col, count) @mcp.tool() def move_excel_rows( filename: str, sheet_name: str, source_row: int, target_row: int, count: int = 1 ) -> dict[str, Any]: """移动 Excel 行.""" logger.info(f"MCP工具调用: move_excel_rows(filename={filename}, source={source_row}, target={target_row})") return excel_handler.move_rows(filename, sheet_name, source_row, target_row, count) @mcp.tool() def move_excel_cols( filename: str, sheet_name: str, source_col: int, target_col: int, count: int = 1 ) -> dict[str, Any]: """移动 Excel 列.""" logger.info(f"MCP工具调用: move_excel_cols(filename={filename}, source={source_col}, target={target_col})") return excel_handler.move_cols(filename, sheet_name, source_col, target_col, count) @mcp.tool() def freeze_excel_panes( filename: str, sheet_name: str, cell: Optional[str] = None, freeze_rows: int = 0, freeze_cols: int = 0, ) -> dict[str, Any]: """冻结 Excel 窗格. Args: filename: 文件名 sheet_name: 工作表名称 cell: 冻结单元格位置 (如 'B2'表示冻结第1行和第1列, 可选) freeze_rows: 冻结行数 (默认 0) freeze_cols: 冻结列数 (默认 0) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: freeze_excel_panes(filename={filename}, cell={cell}, rows={freeze_rows}, cols={freeze_cols})") return excel_handler.freeze_panes(filename, sheet_name, cell, freeze_rows, freeze_cols)

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/walkingzzzy/office-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server