Skip to main content
Glama
content.py7.52 kB
"""PowerPoint 内容操作工具.""" from typing import Any, Optional, List from fastmcp import FastMCP from loguru import logger from office_mcp_server.handlers.ppt_handler import PowerPointHandler def register_content_tools(mcp: FastMCP, ppt_handler: PowerPointHandler) -> None: """注册 PowerPoint 内容操作工具.""" @mcp.tool() def add_text_to_ppt( filename: str, slide_index: int, text: str, left_inches: float = 1.0, top_inches: float = 1.0, width_inches: float = 8.0, height_inches: float = 1.0, ) -> dict[str, Any]: """向 PowerPoint 幻灯片添加文本框. Args: filename: 文件名 slide_index: 幻灯片索引 (从0开始) text: 文本内容 left_inches: 左边距 (英寸, 默认 1.0) top_inches: 上边距 (英寸, 默认 1.0) width_inches: 宽度 (英寸, 默认 8.0) height_inches: 高度 (英寸, 默认 1.0) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: add_text_to_ppt(filename={filename}, slide={slide_index})") return ppt_handler.add_text( filename, slide_index, text, left_inches, top_inches, width_inches, height_inches ) @mcp.tool() def add_table_to_ppt( filename: str, slide_index: int, rows: int, cols: int, data: Optional[list[list[str]]] = None, ) -> dict[str, Any]: """向 PowerPoint 幻灯片添加表格. Args: filename: 文件名 slide_index: 幻灯片索引 (从0开始) rows: 行数 cols: 列数 data: 表格数据 (可选, 二维列表) Returns: dict: 操作结果 """ logger.info( f"MCP工具调用: add_table_to_ppt(filename={filename}, slide={slide_index})" ) return ppt_handler.add_table(filename, slide_index, rows, cols, data) @mcp.tool() def insert_ppt_table_row( filename: str, slide_index: int, table_index: int, row_index: int, data: Optional[List[str]] = None, ) -> dict[str, Any]: """向 PowerPoint 表格插入行. Args: filename: 文件名 slide_index: 幻灯片索引(从0开始) table_index: 表格索引(从0开始) row_index: 插入位置索引 data: 行数据列表 (可选) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: insert_ppt_table_row(filename={filename})") return ppt_handler.insert_table_row(filename, slide_index, table_index, row_index, data) @mcp.tool() def merge_ppt_table_cells( filename: str, slide_index: int, table_index: int, start_row: int, start_col: int, end_row: int, end_col: int, ) -> dict[str, Any]: """合并 PowerPoint 表格单元格. Args: filename: 文件名 slide_index: 幻灯片索引(从0开始) table_index: 表格索引(从0开始) start_row: 起始行索引 start_col: 起始列索引 end_row: 结束行索引 end_col: 结束列索引 Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: merge_ppt_table_cells(filename={filename})") return ppt_handler.merge_table_cells( filename, slide_index, table_index, start_row, start_col, end_row, end_col ) @mcp.tool() def format_ppt_table_cell( filename: str, slide_index: int, table_index: int, row: int, col: int, fill_color: Optional[str] = None, text_color: Optional[str] = None, bold: bool = False, font_size: Optional[int] = None, ) -> dict[str, Any]: """格式化 PowerPoint 表格单元格. Args: filename: 文件名 slide_index: 幻灯片索引(从0开始) table_index: 表格索引(从0开始) row: 行索引 col: 列索引 fill_color: 填充颜色 HEX格式 (如 '#FF0000', 可选) text_color: 文字颜色 HEX格式 (可选) bold: 是否加粗 (默认 False) font_size: 字号 (可选) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: format_ppt_table_cell(filename={filename})") return ppt_handler.format_table_cell( filename, slide_index, table_index, row, col, fill_color, text_color, bold, font_size ) @mcp.tool() def add_ppt_shape( filename: str, slide_index: int, shape_type: str, left_inches: float, top_inches: float, width_inches: float, height_inches: float, text: Optional[str] = None, fill_color: Optional[str] = None, line_color: Optional[str] = None, ) -> dict[str, Any]: """向 PowerPoint 幻灯片添加形状. Args: filename: 文件名 slide_index: 幻灯片索引(从0开始) shape_type: 形状类型 ('rectangle'矩形, 'oval'椭圆, 'triangle'三角形, 'arrow'箭头, 'rounded_rectangle'圆角矩形) left_inches: 左边距(英寸) top_inches: 上边距(英寸) width_inches: 宽度(英寸) height_inches: 高度(英寸) text: 形状中的文本 (可选) fill_color: 填充颜色 HEX格式 (可选) line_color: 线条颜色 HEX格式 (可选) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: add_ppt_shape(filename={filename}, type={shape_type})") return ppt_handler.add_shape( filename, slide_index, shape_type, left_inches, top_inches, width_inches, height_inches, text, fill_color, line_color ) @mcp.tool() def add_ppt_chart( filename: str, slide_index: int, chart_type: str, categories: List[str], series_data: dict[str, List[float]], left_inches: float = 1.0, top_inches: float = 1.5, width_inches: float = 8.0, height_inches: float = 5.0, title: Optional[str] = None, ) -> dict[str, Any]: """向 PowerPoint 幻灯片添加图表. Args: filename: 文件名 slide_index: 幻灯片索引(从0开始) chart_type: 图表类型 ('column'柱状图, 'bar'条形图, 'line'折线图, 'pie'饼图, 'area'面积图) categories: 分类标签列表 series_data: 系列数据字典 {"系列名": [数据列表]} left_inches: 左边距(英寸, 默认 1.0) top_inches: 上边距(英寸, 默认 1.5) width_inches: 宽度(英寸, 默认 8.0) height_inches: 高度(英寸, 默认 5.0) title: 图表标题 (可选) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: add_ppt_chart(filename={filename}, type={chart_type})") return ppt_handler.add_chart( filename, slide_index, chart_type, categories, series_data, left_inches, top_inches, width_inches, height_inches, title )

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