Skip to main content
Glama
basic.py7.41 kB
"""Word 基础操作工具.""" from typing import Any, Optional from fastmcp import FastMCP from loguru import logger from office_mcp_server.handlers.word_handler import WordHandler def register_basic_tools(mcp: FastMCP, word_handler: WordHandler) -> None: """注册 Word 基础操作工具.""" @mcp.tool() def create_word_document(filename: str, title: str = "", content: str = "") -> dict[str, Any]: """创建 Word 文档. Args: filename: 文件名 (如 'document.docx') title: 文档标题 (可选) content: 文档内容 (可选) Returns: dict: 操作结果,包含文件路径和状态 """ logger.info(f"MCP工具调用: create_word_document(filename={filename})") return word_handler.create_document(filename, title, content) @mcp.tool() def insert_text_to_word( filename: str, text: str, position: str = "end" ) -> dict[str, Any]: """向 Word 文档插入文本. Args: filename: 文件名 text: 要插入的文本 position: 插入位置 ('start' 或 'end', 默认 'end') Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: insert_text_to_word(filename={filename})") return word_handler.insert_text(filename, text, position) @mcp.tool() def format_word_text( filename: str, paragraph_index: int, font_name: Optional[str] = None, font_size: Optional[int] = None, bold: bool = False, italic: bool = False, color: Optional[str] = None, underline: Optional[str] = None, strike: bool = False, double_strike: bool = False, superscript: bool = False, subscript: bool = False, highlight: Optional[str] = None, spacing: Optional[float] = None, shadow: bool = False, ) -> dict[str, Any]: """格式化 Word 文档中的文本. Args: filename: 文件名 paragraph_index: 段落索引 (从0开始) font_name: 字体名称 (可选) font_size: 字号 (可选) bold: 是否加粗 (默认 False) italic: 是否斜体 (默认 False) color: 文字颜色 HEX格式 (如 '#FF0000', 可选) underline: 下划线样式 ('single', 'double', 'thick', 'dotted', 'dash', 'wave', 可选) strike: 是否删除线 (默认 False) double_strike: 是否双删除线 (默认 False) superscript: 是否上标 (默认 False) subscript: 是否下标 (默认 False) highlight: 高亮颜色 ('yellow', 'green', 'cyan', 'magenta', 'blue', 'red', 等, 可选) spacing: 字符间距 (磅值, 可选) shadow: 是否文字阴影 (默认 False) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: format_word_text(filename={filename})") return word_handler.format_text( filename, paragraph_index, font_name, font_size, bold, italic, color, underline, strike, double_strike, superscript, subscript, highlight, spacing, shadow ) @mcp.tool() def add_heading_to_word(filename: str, text: str, level: int = 1) -> dict[str, Any]: """向 Word 文档添加标题. Args: filename: 文件名 text: 标题文本 level: 标题级别 (1-9, 默认 1) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: add_heading_to_word(filename={filename})") return word_handler.add_heading(filename, text, level) @mcp.tool() def create_word_table( filename: str, rows: int, cols: int, data: Optional[list[list[str]]] = None ) -> dict[str, Any]: """在 Word 文档中创建表格. Args: filename: 文件名 rows: 行数 cols: 列数 data: 表格数据 (可选, 二维列表) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: create_word_table(filename={filename})") return word_handler.create_table(filename, rows, cols, data) @mcp.tool() def insert_image_to_word( filename: str, image_path: str, width_inches: Optional[float] = None ) -> dict[str, Any]: """向 Word 文档插入图片. Args: filename: 文件名 image_path: 图片文件路径 width_inches: 图片宽度 (英寸, 可选) Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: insert_image_to_word(filename={filename})") return word_handler.insert_image(filename, image_path, width_inches) @mcp.tool() def add_page_break_to_word(filename: str) -> dict[str, Any]: """向 Word 文档添加分页符. Args: filename: 文件名 Returns: dict: 操作结果 """ logger.info(f"MCP工具调用: add_page_break_to_word(filename={filename})") return word_handler.add_page_break(filename) @mcp.tool() def get_word_document_info(filename: str) -> dict[str, Any]: """获取 Word 文档信息. Args: filename: 文件名 Returns: dict: 文档信息 (段落数、表格数、字数等) """ logger.info(f"MCP工具调用: get_word_document_info(filename={filename})") return word_handler.get_document_info(filename) @mcp.tool() def get_word_page_count(filename: str) -> dict[str, Any]: """获取 Word 文档页数(估算值). 使用跨平台兼容的估算方法,基于文档内容(字数、段落数、表格数、图片数)估算页数。 估算公式: - 基础页数 = 字数 / 每页平均字数(中文约550字/页) - 段落修正 = 段落数 * 0.02(每个段落约占0.02页) - 表格修正 = 表格数 * 0.3(每个表格约占0.3页) - 图片修正 = 图片数 * 0.2(每张图片约占0.2页) - 预估页数 = 基础页数 + 段落修正 + 表格修正 + 图片修正 Args: filename: 文件名 Returns: dict: 页数统计结果,包含: - estimated_pages: 估算的页数(整数) - is_estimated: true(标记为估算值) - confidence_level: 置信度("low"/"medium"/"high") - estimation_basis: 估算依据(字数、段落数、表格数、图片数) - details: 详细计算过程 注意: 这是估算值,实际页数可能因字体、字号、行距、段落间距、页边距等因素有所不同。 误差范围通常在±2页以内。 使用场景: - 验证文档优化效果(优化前后页数对比) - 评估文档长度 - 预估打印成本 - 检查文档是否符合页数要求 提示: 如果需要精确页数,建议在Windows系统上使用Word应用程序打开文档查看。 """ logger.info(f"MCP工具调用: get_word_page_count(filename={filename})") return word_handler.get_page_count(filename)

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