We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xuhongxin/excel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""
Excel MCP Server 测试用例
"""
import json
import tempfile
import pandas as pd
from pathlib import Path
import sys
import os
# 添加src目录到Python路径
src_path = Path(__file__).parent.parent / "src"
sys.path.insert(0, str(src_path))
from excel_mcp.config import ConfigManager
from excel_mcp.security import SecurityValidator
from excel_mcp.file_manager import FileManager
from excel_mcp.data_processor import DataProcessor
from excel_mcp.sheet_operations import SheetOperations
def test_basic_functionality():
"""测试基本功能"""
print("开始测试Excel MCP Server基本功能...")
# 初始化组件
config_manager = ConfigManager()
security_validator = SecurityValidator(config_manager)
file_manager = FileManager(config_manager, security_validator)
data_processor = DataProcessor(file_manager)
sheet_operations = SheetOperations(file_manager)
# 创建测试数据目录
test_data_dir = Path("data")
test_data_dir.mkdir(exist_ok=True)
# 测试文件路径
test_file = test_data_dir / "test_excel.xlsx"
print(f"测试文件路径: {test_file}")
# 1. 测试创建Excel文件
print("\n1. 测试创建Excel文件...")
success = file_manager.create_workbook(str(test_file), ["Sales", "Products"])
if success:
print("✓ Excel文件创建成功")
else:
print("✗ Excel文件创建失败")
return False
# 2. 测试获取文件信息
print("\n2. 测试获取文件信息...")
info = file_manager.get_file_info(str(test_file))
if info:
print(f"✓ 文件信息获取成功: {info['sheet_names']}")
else:
print("✗ 文件信息获取失败")
return False
# 3. 测试写入数据
print("\n3. 测试写入数据...")
test_data = [
["Product", "Price", "Quantity"],
["Apple", 1.50, 100],
["Banana", 0.80, 150],
["Orange", 2.00, 80]
]
result = data_processor.write_range(str(test_file), "Sales", "A1", test_data)
if result.get("success"):
print("✓ 数据写入成功")
else:
print(f"✗ 数据写入失败: {result.get('error')}")
return False
# 4. 测试读取数据
print("\n4. 测试读取数据...")
result = data_processor.read_range(str(test_file), "Sales", "A1:C4")
if result.get("success"):
print(f"✓ 数据读取成功: {len(result['data'])} 行数据")
print(f"数据内容: {result['data']}")
else:
print(f"✗ 数据读取失败: {result.get('error')}")
return False
# 5. 测试查询数据
print("\n5. 测试查询数据...")
result = data_processor.query_data(str(test_file), "Sales")
if result.get("success"):
print(f"✓ 数据查询成功: {result['row_count']} 行数据")
else:
print(f"✗ 数据查询失败: {result.get('error')}")
return False
# 6. 测试工作表操作
print("\n6. 测试工作表操作...")
# 创建新工作表
result = sheet_operations.create_sheet(str(test_file), "Inventory")
if result.get("success"):
print("✓ 新工作表创建成功")
else:
print(f"✗ 新工作表创建失败: {result.get('error')}")
return False
# 列出所有工作表
result = sheet_operations.list_sheets(str(test_file))
if result.get("success"):
print(f"✓ 工作表列表获取成功: {result['sheet_names']}")
else:
print(f"✗ 工作表列表获取失败: {result.get('error')}")
return False
# 7. 测试公式计算
print("\n7. 测试公式计算...")
result = data_processor.calculate_formula(str(test_file), "Sales", "D2", "B2*C2")
if result.get("success"):
print(f"✓ 公式计算成功: {result['value']}")
else:
print(f"✗ 公式计算失败: {result.get('error')}")
return False
print("\n🎉 所有基本功能测试通过!")
return True
def test_mcp_tools():
"""测试MCP工具"""
print("\n开始测试MCP工具...")
# 这里我们模拟MCP工具调用
test_data_dir = Path("data")
test_file = test_data_dir / "mcp_test.xlsx"
# 导入MCP工具函数
from excel_mcp.server import (
initialize_components,
create_excel_file,
write_excel_file,
read_excel_file,
get_excel_info,
list_worksheets
)
# 初始化组件
initialize_components()
print("\n1. 测试创建Excel文件MCP工具...")
result = create_excel_file(str(test_file), ["Data", "Summary"])
if result.get("success"):
print("✓ MCP创建文件工具测试成功")
else:
print(f"✗ MCP创建文件工具测试失败: {result.get('error')}")
return False
print("\n2. 测试写入数据MCP工具...")
test_data = [
["Name", "Age", "City"],
["Alice", 25, "New York"],
["Bob", 30, "London"],
["Charlie", 35, "Tokyo"]
]
result = write_excel_file(str(test_file), test_data, "Data", "A1")
if result.get("success"):
print("✓ MCP写入数据工具测试成功")
else:
print(f"✗ MCP写入数据工具测试失败: {result.get('error')}")
return False
print("\n3. 测试读取文件MCP工具...")
result = read_excel_file(str(test_file), "Data")
if result.get("success"):
print(f"✓ MCP读取文件工具测试成功: 读取了 {len(result['data'])} 行数据")
else:
print(f"✗ MCP读取文件工具测试失败: {result.get('error')}")
return False
print("\n4. 测试获取文件信息MCP工具...")
result = get_excel_info(str(test_file))
if result.get("success"):
print(f"✓ MCP获取文件信息工具测试成功: {result['sheet_names']}")
else:
print(f"✗ MCP获取文件信息工具测试失败: {result.get('error')}")
return False
print("\n🎉 所有MCP工具测试通过!")
return True
def create_sample_data():
"""创建示例数据文件"""
print("\n创建示例数据文件...")
test_data_dir = Path("data")
test_data_dir.mkdir(exist_ok=True)
# 创建销售数据示例
sales_data = {
'Product': ['Apple', 'Banana', 'Orange', 'Grape', 'Strawberry'],
'Price': [1.50, 0.80, 2.00, 3.50, 4.00],
'Quantity': [100, 150, 80, 60, 40],
'Total': [150.0, 120.0, 160.0, 210.0, 160.0]
}
df = pd.DataFrame(sales_data)
sales_file = test_data_dir / "sales_example.xlsx"
df.to_excel(sales_file, sheet_name="Sales", index=False)
print(f"✓ 创建销售数据示例: {sales_file}")
# 创建员工数据示例
employee_data = {
'Name': ['Alice Johnson', 'Bob Smith', 'Charlie Brown', 'Diana Prince', 'Eve Davis'],
'Department': ['Sales', 'Marketing', 'IT', 'HR', 'Finance'],
'Salary': [50000, 55000, 65000, 60000, 58000],
'Years': [3, 5, 2, 7, 4]
}
df = pd.DataFrame(employee_data)
employee_file = test_data_dir / "employee_example.xlsx"
df.to_excel(employee_file, sheet_name="Employees", index=False)
print(f"✓ 创建员工数据示例: {employee_file}")
return True
def main():
"""主测试函数"""
print("=== Excel MCP Server 测试套件 ===")
try:
# 创建示例数据
create_sample_data()
# 测试基本功能
if not test_basic_functionality():
print("\n❌ 基本功能测试失败")
return False
# 测试MCP工具
if not test_mcp_tools():
print("\n❌ MCP工具测试失败")
return False
print("\n🎊 所有测试都通过了!Excel MCP Server 已准备就绪。")
print("\n接下来的步骤:")
print("1. 按照 INSTALL.md 中的说明配置Claude Desktop")
print("2. 重启Claude Desktop")
print("3. 在Claude中测试Excel功能")
return True
except Exception as e:
print(f"\n❌ 测试过程中发生错误: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
main()