← Back to skills
extension
Category: Productivity & OfficeAPI key requirement unconfirmed

万象插件技能版

Excel 操作技能(TableMagic),通过 MCP 协议提供 111 个工具:工作簿/工作表/单元格/区域读写、格式样式、图表、数据分析、数据库连接、API 调用、邮件发送、文件操作、二维码生成、发票处理、正则表达式、目录管理、定时任务、PDF 导出等。基于 ClosedXML,无需安装 Excel。触发词:Excel操作, 表格操作, tablemagic, 工作簿, 工作表, 单元格, Excel自动化, MCP Excel

personAuthor: aken721hubModelScope

TableMagic Skill

元数据

  • 名称: tablemagic
  • 版本: 2.5.1
  • 描述: Excel 操作技能,提供工作簿/工作表/单元格/区域/格式/图表/分析/数据库/API/邮件/文件/二维码/发票/正则/目录/定时/PDF等 111 个工具
  • 协议: MCP (Model Context Protocol) 2024-11-05
  • 传输: stdio
  • 运行时: .NET 8.0(self-contained,无需用户安装 .NET)
  • 依赖: 无需安装 Excel(使用 ClosedXML)
  • 技能市场: skillhub.cn(本仓库仅含文本文件,二进制通过 Gitee 链接下载)

安装

二进制文件获取(Agent 首次使用前必须执行)

skillhub.cn 不允许上传二进制文件,因此本仓库不包含 tablemagic.exe 和 LatoFont/ 字体。Agent 在首次调用本技能前,必须在技能安装目录下执行以下 PowerShell 脚本。脚本内置环境预检查、幂等检查、SHA-256 完整性校验,不满足时会返回明确错误并退出,不得在预检查失败时继续调用本技能。

下载源说明:tablemagic.exe(约 55MB)通过 Gitee Release 附件下载(gitee raw 对大文件有大小限制,Release 附件不受此限制);LatoFont/ 字体(每个 < 1MB)通过 gitee raw 下载(锁定 commit hash,不可变)。参照 dual-layer-pdf 技能的安全模式。

$ErrorActionPreference = "Stop"

# ① 平台预检查:仅支持 Windows x64
$onWindows = ($null -eq $PSVersionTable.Platform) -or ($PSVersionTable.Platform -eq "Win32NT")
if (-not $onWindows) {
    Write-Error "TableMagic 预编译二进制仅支持 Windows x64,当前平台为 $($PSVersionTable.Platform)。Linux/macOS 需从源码构建:dotnet publish TableMagic.Cli -c Release -r <RID> --self-contained"
    exit 1
}
$arch = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture
if ($arch -ne [System.Runtime.InteropServices.Architecture]::X64) {
    Write-Error "TableMagic 预编译二进制仅支持 x64 架构,当前为 $arch。ARM64/x86 需从源码构建对应 RID 的 self-contained 包"
    exit 1
}

# ② 幂等检查:已安装则跳过
if (Test-Path "./prebuilt/tablemagic.exe") {
    Write-Host "tablemagic.exe 已存在,跳过下载。如需重装请先删除 prebuilt/ 目录。"
} else {
    New-Item -ItemType Directory -Force -Path "./prebuilt/LatoFont" | Out-Null

    # ③ 下载 tablemagic.exe(Gitee Release 附件,不受 raw 大小限制)
    $exeUrl = "https://gitee.com/aken721/table-magic/releases/download/v2.5.1.1/tablemagic.exe"
    try {
        Invoke-WebRequest -Uri $exeUrl -OutFile "./prebuilt/tablemagic.exe" -UseBasicParsing
    } catch {
        Write-Error "下载 tablemagic.exe 失败: $($_.Exception.Message)。请确认 Gitee release v2.5.1.1 已发布且含 tablemagic.exe 附件"
        exit 1
    }

    # ④ SHA-256 完整性校验
    $expectedHash = "5b6ffc90b8bb529e986f1e638489c33bbc54e020c4ab0a92a97b72b794b8aa1a"
    $actualHash = (Get-FileHash -Path "./prebuilt/tablemagic.exe" -Algorithm SHA256).Hash.ToLower()
    if ($actualHash -ne $expectedHash) {
        Remove-Item "./prebuilt/tablemagic.exe" -Force
        Write-Error "SHA-256 校验失败:预期 $expectedHash,实际 $actualHash。下载可能被篡改或中断,已删除文件。"
        exit 1
    }

    # ⑤ 下载 LatoFont 字体(gitee raw,锁定 commit hash,文件小不受限制)
    $commit = "3960b429dbfa2d944fff317a794c57b4c2379b3c"
    $fontBase = "https://gitee.com/aken721/table-magic/raw/$commit/prebuilt/LatoFont"
    @("Lato-Black","Lato-BlackItalic","Lato-Bold","Lato-BoldItalic","Lato-ExtraBold","Lato-ExtraBoldItalic","Lato-ExtraLight","Lato-ExtraLightItalic","Lato-Italic","Lato-Light","Lato-LightItalic","Lato-Medium","Lato-MediumItalic","Lato-Regular","Lato-SemiBold","Lato-SemiBoldItalic","Lato-Thin","Lato-ThinItalic") | ForEach-Object {
        Invoke-WebRequest -Uri "$fontBase/$_.ttf" -OutFile "./prebuilt/LatoFont/$_.ttf" -UseBasicParsing
    }
    Invoke-WebRequest -Uri "$fontBase/OFL.txt" -OutFile "./prebuilt/LatoFont/OFL.txt" -UseBasicParsing

    # ⑥ 字体完整性验证
    $fontCount = (Get-ChildItem "./prebuilt/LatoFont" -Filter "*.ttf" -ErrorAction SilentlyContinue | Measure-Object).Count
    if ($fontCount -ne 18) { Write-Error "LatoFont 不完整,仅 $fontCount/18 个 ttf,请重新执行本脚本"; exit 1 }
}

# ⑦ 可执行性验证
try { & "./prebuilt/tablemagic.exe" list-tools | Select-Object -First 1 | Out-Null }
catch {
    Write-Error "tablemagic.exe 无法执行:$($_.Exception.Message)。可能被杀毒软件/SmartScreen 拦截,请添加信任后重试"
    exit 1
}
Write-Host "TableMagic 安装完成" -ForegroundColor Green

前置条件

  • 无需安装 .NET SDK 或运行时(self-contained,已内嵌 .NET 运行时)
  • 无需安装 Excel(使用 ClosedXML)
  • 无需安装打印机驱动(PDF 导出使用 QuestPDF + LatoFont)
  • 仅支持 Windows x64(预编译二进制为 win-x64 目标)
  • Linux / macOS / Windows ARM64 / Windows x86 需从源码自行构建对应 RID 的 self-contained 包

Agent 配置

在 Agent 的 MCP 配置文件中添加以下内容。command 指向技能安装目录下 prebuilt/tablemagic.exe 的完整路径。

标准配置(mcp-config.json)

本技能已附带 mcp-config.json,内容如下,Agent 可自动发现并注册:

{
  "mcpServers": {
    "tablemagic": {
      "command": "./prebuilt/tablemagic.exe",
      "args": ["mcp"]
    }
  }
}

绝对路径配置示例

例如技能安装到 C:\Skills\table-magic,则配置为:

{
  "mcpServers": {
    "tablemagic": {
      "command": "C:/Skills/table-magic/prebuilt/tablemagic.exe",
      "args": ["mcp"]
    }
  }
}

各 Agent 配置位置

| Agent | 配置文件路径 | |-------|-------------| | OpenClaw | ~/.openclaw/mcp.json | | Hermes | ~/.hermes/mcp_config.json | | WorkBuddy | ~/.workbuddy/mcp.json | | QClaw | 项目根目录 qclaw.mcp.json | | Trae Work | 项目根目录 .trae/mcp.json |

行为约束

可执行文件路径(重要)

必须使用技能安装目录下 prebuilt/tablemagic.exe,即 MCP 配置中 command 字段所指向的相对路径 ./prebuilt/tablemagic.exe。

  • 禁止使用任何源码构建产物路径(如含 bin\、obj\、源码仓库目录的路径)
  • 禁止使用绝对路径硬编码到特定用户目录
  • mcp-config.json 中已配置为 ./prebuilt/tablemagic.exe,Agent 应直接采用该配置,不得改写

参数引导

当用户 prompt 不明确或缺少必需参数时,必须向用户追问缺失的参数,不要猜测或使用默认值。具体规则:

  1. 必需参数缺失:返回错误信息,明确列出缺失的参数名称和描述,引导用户补充
  2. 参数值模糊:如用户说"创建一个表格"但未指定文件名,应追问"请提供工作簿文件名"
  3. 参数类型错误:如行号传入了字符串,应提示"row 参数应为整数"
  4. 一次只追问最关键的缺失参数,避免一次列出过多问题让用户困惑

性能优化(重要)

必须使用以下策略以获得最佳性能:

  1. 优先使用复合工具,避免多次单独调用:

    • 创建工作簿+多工作表 → 用 create_workbook_with_sheets(一次调用),而非 create_workbook + N次 create_worksheet
    • 写入完整表格 → 用 write_table_data(一次调用),而非 N次 set_cell_value
    • 读取完整表格 → 用 read_table_data(一次调用),而非 N次 get_cell_value
    • 批量执行不同工具 → 用 batch_call(一次调用),而非多次 tools/call
  2. 禁止使用 tablemagic.exe call 命令行方式逐个调用工具,这会为每次调用启动新进程,极其缓慢

  3. 必须通过 MCP 协议(tools/call)调用工具,MCP 模式下单进程持久运行,无启动开销

鲁棒性与错误处理

Agent 在调用本技能的任意阶段遇到以下情况时,必须按对应策略处理,不得静默失败或编造结果。

1. 环境与平台(安装/启动阶段)

| 异常场景 | 检测方式 | Agent 必须采取的行动 | |---------|---------|---------------------| | 非 Windows 平台(Linux/macOS) | 执行下载脚本时预检查失败,或 MCP 启动返回非零退出码 | 停止调用,向用户明确提示:"TableMagic 预编译二进制仅支持 Windows x64,当前平台不支持。如需在 Linux/macOS 使用,请从源码构建:dotnet publish TableMagic.Cli -c Release -r linux-x64 --self-contained" | | 非 x64 架构(ARM64/x86) | 预检查失败 | 同上,提示构建对应 RID 的 self-contained 包 | | prebuilt/tablemagic.exe 不存在 | 调用前 Test-Path 为 false | 自动执行"安装"章节的下载脚本;若下载脚本再次失败,向用户报告并请求人工介入 | | LatoFont/ 字体缺失或不完整(<18 个 ttf) | Get-ChildItem 计数 | 提示"PDF 导出所需字体缺失,正在重新下载…"并重新执行下载脚本 | | 可执行文件路径非 prebuilt/tablemagic.exe | command 路径含 bin\ 或 obj\ 或源码目录或绝对路径硬编码 | 拒绝执行,提示必须使用技能安装目录下的 prebuilt/tablemagic.exe(即 mcp-config.json 中的相对路径) |

2. 下载与文件完整性

| 异常场景 | 检测方式 | Agent 必须采取的行动 | |---------|---------|---------------------| | Gitee 不可达 / 网络中断 | Invoke-WebRequest 抛异常 | 提示"无法连接 Gitee,请检查网络或代理设置",提供手动下载链接,不重试超过 2 次 | | 下载文件损坏(执行返回异常退出码) | list-tools 非零退出 | 删除 prebuilt/ 重新下载一次;仍失败则提示用户检查磁盘空间/权限 | | 磁盘空间不足 | 下载异常信息含 "space"/"磁盘" | 提示用户清理磁盘后重试 | | 杀毒软件 / SmartScreen 拦截 | exe 存在但执行抛 Win32Exception 或被终止 | 提示用户将 prebuilt/tablemagic.exe 加入杀毒软件白名单 / 解除 SmartScreen 阻止 |

3. MCP 启动与运行时

| 异常场景 | 检测方式 | Agent 必须采取的行动 | |---------|---------|---------------------| | MCP 服务器启动失败(stdio 无响应) | 首次 tools/list 超时或连接错误 | 检查 command 路径是否正确 → 检查 exe 是否可独立运行(tablemagic.exe list-tools)→ 向用户报告完整错误 | | 进程意外退出(MCP 连接中断) | 后续调用收到 EOF/连接重置 | 自动重启 MCP 进程一次;若仍失败,提示用户并停止重试 | | 工具执行返回结构化错误 | result.Success = false | 解析 result.Error 与 result.MissingParams,按下方"工具执行错误"规则处理 |

4. 工具执行错误

  • 必需参数缺失(result.MissingRequiredParams = true):必须向用户追问缺失参数,一次只问最关键的,不猜测默认值
  • 参数类型错误(如 row 传入字符串):提示"row 参数应为整数",请用户修正
  • 文件不存在 / 路径无效:提示用户确认路径,不自动创建无关文件
  • 工作表/区域越界:提示有效范围,请用户调整
  • 数据库连接失败:提示检查连接字符串、网络、驱动,不重试
  • 外部依赖缺失(PaddleOCR):ocr_invoice 返回安装指南时,原样转达给用户,不替代执行 OCR
  • 其他执行失败:向用户说明错误描述与处理建议,询问是否尝试其他方式

5. 通用原则

  1. 不编造结果:任何工具失败时,不得伪造返回值或猜测数据,必须如实向用户报告错误
  2. 有限重试:同一操作最多重试 2 次(下载、MCP 重启),超过则请求人工介入
  3. 错误信息透传:将工具返回的错误描述、处理建议原样转达给用户,不截断不改写
  4. 降级而非中断:单个工具失败不应导致整个会话中断,应报告错误后继续响应用户后续指令
  5. 幂等安装:重复执行下载脚本应安全(覆盖写入),不因已存在而报错

工具清单

基础操作 (ExcelBase)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | get_worksheet_names | 获取所有工作表名称 | 无 | fileName | | get_open_workbooks | 获取打开的工作簿列表 | 无 | 无 | | get_workbook_metadata | 获取工作簿元数据 | 无 | fileName | | batch_call | 批量执行多个工具调用(一次MCP调用执行多步操作) | calls | 无 | | create_workbook_with_sheets | 创建工作簿并批量创建多个工作表 | fileName | sheetNames, sheetNamePrefix, sheetCount | | write_table_data | 一次性写入完整表格(表头+数据) | fileName, sheetName, headers, data | startRow, startColumn, headerStyle, autoFit | | read_table_data | 一次性读取完整表格 | fileName, sheetName | range, includeHeaders |

工作簿操作 (ExcelWorkbook)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | create_workbook | 创建新工作簿 | fileName | sheetName | | open_workbook | 打开工作簿 | fileName | 无 | | close_workbook | 关闭工作簿 | 无 | fileName | | save_workbook | 保存工作簿 | 无 | fileName | | save_workbook_as | 另存为新文件 | newFileName | fileName | | delete_workbook | 删除工作簿文件 | fileName | 无 |

工作表操作 (ExcelSheet)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | activate_worksheet | 激活/切换工作表 | sheetName | fileName | | create_worksheet | 创建新工作表 | sheetName | fileName | | rename_worksheet | 重命名工作表 | oldSheetName, newSheetName | fileName | | delete_worksheet | 删除工作表 | sheetName | fileName | | copy_worksheet | 复制工作表 | sourceSheetName, targetSheetName | fileName | | move_worksheet | 移动工作表位置 | sheetName, position | fileName | | set_worksheet_visible | 设置工作表可见性 | sheetName, visible | fileName | | get_worksheet_index | 获取工作表索引 | sheetName | fileName | | freeze_panes | 冻结窗格 | 无 | fileName, sheetName, row, column | | unfreeze_panes | 取消冻结窗格 | 无 | fileName, sheetName |

单元格操作 (ExcelCell)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | set_cell_value | 设置单元格值 | row, column, value | fileName, sheetName | | get_cell_value | 获取单元格值 | row, column | fileName, sheetName | | set_cell_formula | 设置单元格公式 | cellAddress, formula | fileName, sheetName | | get_cell_formula | 获取单元格公式 | cellAddress | fileName, sheetName |

区域操作 (ExcelRange)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | set_range_values | 批量设置区域值 | rangeAddress, data | fileName, sheetName | | get_range_values | 获取区域值 | rangeAddress | fileName, sheetName | | copy_range | 复制区域 | sourceRange, targetRange | fileName, sheetName | | clear_range | 清除区域内容 | rangeAddress | fileName, sheetName, clearType | | get_used_range | 获取已使用范围 | 无 | fileName, sheetName | | get_last_row | 获取最后行号 | 无 | fileName, sheetName |

格式设置 (ExcelFormat)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | set_cell_format | 设置单元格格式 | rangeAddress | fileName, sheetName, fontColor, backgroundColor, fontSize, bold, italic, horizontalAlignment, verticalAlignment | | set_border | 设置边框 | rangeAddress, borderType | fileName, sheetName, lineStyle | | merge_cells | 合并单元格 | rangeAddress | fileName, sheetName | | unmerge_cells | 取消合并 | rangeAddress | fileName, sheetName | | set_cell_text_wrap | 设置自动换行 | rangeAddress, wrap | fileName, sheetName | | set_row_height | 设置行高 | rowNumber, height | fileName, sheetName | | set_column_width | 设置列宽 | columnNumber, width | fileName, sheetName | | insert_rows | 插入行 | rowIndex | fileName, sheetName, count | | insert_columns | 插入列 | columnIndex | fileName, sheetName, count | | delete_rows | 删除行 | rowIndex | fileName, sheetName, count | | delete_columns | 删除列 | columnIndex | fileName, sheetName, count |

图表与分析 (ExcelChart/ExcelPivot/ExcelAnalysis/ExcelFinance)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | create_chart | 创建图表 | dataRange | fileName, sheetName, chartType, title | | create_pivot_table | 创建数据透视表 | sourceRange, pivotSheetName | fileName, sheetName, rowFields, columnFields, valueFields | | analyze_data | 分析数据 | range | fileName, sheetName | | get_range_statistics | 获取统计信息 | range | fileName, sheetName | | calculate_financial_ratio | 计算财务比率 | revenueRange, costRange | fileName, sheetName | | calculate_profit_margin | 计算利润率 | revenueRange, profitRange | fileName, sheetName |

参数说明

通用可选参数

大多数工具支持以下可选参数,不指定时使用当前活跃的工作簿/工作表:

| 参数 | 类型 | 说明 | |------|------|------| | fileName | string | 工作簿文件名 | | sheetName | string | 工作表名称 |

数据格式约定

  • 行列号:从 1 开始,与 Excel 一致
  • 范围地址:标准 Excel 格式,如 A1:D10、B:B
  • 颜色:支持中文名称(红色、蓝色)和十六进制(#FF0000)
  • 批量数据:JSON 二维数组,如 [["姓名","年龄"],["张三",25]]
  • 图表类型:column / line / pie / bar / area / scatter

数据处理 (ExcelData)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | split_sheet_by_column | 按列分表 | columnName | fileName, sheetName, dataStartRow | | split_and_export | 分表并导出独立文件 | columnName, outputFolder | fileName, sheetName, fileFormat | | merge_sheets | 合并多个工作表 | 无 | fileName, sheetNames, outputSheetName, includeHeader | | merge_workbooks | 合并多个工作簿 | folderPath | fileName, includeSubfolders, skipEmptySheets | | export_sheets | 批量导出工作表 | outputFolder | fileName, sheetNames, fileFormat | | delete_sheets | 批量删除工作表 | sheetNames | fileName | | transpose_columns | 宽表转长表 | startColumn, fieldName | fileName, sheetName | | create_multiple_sheets | 批量创建工作表 | count | fileName, baseName | | generate_payslips | 生成工资条 | 无 | fileName, sheetName, outputSheetName |

数据库 (ExcelDatabase)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | connect_database | 连接数据库获取表列表 | dbType, connectionString | 无 | | execute_query | 执行SQL查询写入Excel | dbType, connectionString, query | outputFileName, outputSheetName | | export_table_to_excel | 导出数据库表到Excel | dbType, connectionString, tableName | outputFileName, outputSheetName | | get_table_structure | 获取表结构信息 | dbType, connectionString, tableName | 无 |

支持数据库类型:sqlserver、mysql、postgresql、sqlite

API接口 (ExcelApi)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | fetch_api_data | 调用REST API获取数据 | url | method, headers, body, outputFileName, outputSheetName, dataPath | | test_api_connection | 测试API连接 | url | method, headers |

增强图表 (ExcelChartEnhance)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | create_word_cloud | 根据文本列生成词云图片 | textColumn | fileName, sheetName, maxWords, width, height, outputPath | | create_dynamic_chart | 创建动态图表(数据透视+基础图表) | categoryColumn, valueColumn | fileName, sheetName, chartType, title | | create_comparison_chart | 创建多系列对比图 | categoryColumn, valueColumns | fileName, sheetName, chartType, title | | create_pareto_chart | 创建帕累托图(二八分析) | categoryColumn, valueColumn | fileName, sheetName | | create_histogram | 创建直方图 | valueColumn | fileName, sheetName, binCount | | create_box_plot | 创建箱线图(五数概括) | valueColumns | fileName, sheetName |

词云使用 SkiaSharp 渲染为 PNG 图片;帕累托/直方图/箱线图通过数据预处理+基础图表实现。

邮件群发 (ExcelMail)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | configure_smtp | 配置SMTP服务器 | host, port, username, password | enableSsl, fromAddress | | send_email | 发送单封邮件 | to, subject, body | cc, bcc, isHtml, attachments | | batch_send | 批量发送邮件 | emailColumn, subjectColumn, bodyColumn | fileName, sheetName, ccColumn, isHtml | | test_smtp | 测试SMTP连接 | host, port, username, password | enableSsl | | preview_email | 预览邮件 | to, subject, body | cc, isHtml |

文件操作 (ExcelFile)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | list_files | 列出文件信息 | folderPath | pattern, includeSubfolders | | batch_rename | 批量重命名文件 | oldNameColumn, newNameColumn | folderPath, fileName, sheetName | | batch_copy | 批量复制文件 | fileNameColumn, targetFolder | sourceFolder, fileName, sheetName | | batch_move | 批量移动文件 | fileNameColumn, targetFolder | sourceFolder, fileName, sheetName | | batch_delete | 批量删除文件 | fileNameColumn | folderPath, fileName, sheetName | | create_folder | 创建文件夹 | folderPath | 无 | | get_file_info | 获取文件详细信息 | filePath | 无 | | open_folder | 打开文件夹 | folderPath | 无 |

二维码/条形码 (ExcelQR)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | generate_qr_code | 为指定列数据生成二维码图片 | columnNames, outputFolder | fileName, sheetName, size | | generate_barcode | 为指定列数据生成条形码图片(Code128) | columnName, outputFolder | fileName, sheetName, width, height | | scan_qr_code | 扫描图片中的二维码返回内容 | imagePaths | outputFileName, outputSheetName | | scan_qr_code_folder | 批量扫描文件夹中所有图片的二维码 | folderPath | includeSubfolders, outputFileName, outputSheetName |

使用 ZXing.Net + SkiaSharp 实现,无需安装额外运行时。columnNames 为 JSON 数组格式如 ["网址","编号"]。

发票识别 (ExcelInvoice)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | import_xml_invoice | 导入XML电子发票到Excel | xmlPath | outputFileName, outputSheetName | | batch_import_invoices | 批量导入文件夹中XML发票 | folderPath | outputFileName, outputSheetName, includeSubfolders | | get_invoice_fields | 获取发票可提取字段列表 | 无 | 无 | | export_invoice_summary | 导出发票汇总表 | outputFileName | outputSheetName | | ocr_invoice | OCR识别发票图片/PDF | imagePath | outputFileName, outputSheetName |

OCR 发票识别说明:

  • 自动检测系统是否安装 PaddleOCR(尝试 paddleocr --version 或 python -c "import paddleocr")
  • 已安装:调用 PaddleOCR 进行 OCR,用正则提取发票号码、日期、买卖方、金额等字段,写入 Excel
  • 未安装:返回详细安装指南(pip/conda/国内镜像三种方式)
  • 支持图片(png/jpg/bmp)和 PDF 格式
  • 安装命令:pip install paddlepaddle paddleocr,PDF 还需 pip install pymupdf

正则提取 (ExcelRegex)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | extract_by_regex | 正则提取内容到新列 | columnName | fileName, sheetName, patternType, pattern | | get_regex_patterns | 获取预定义正则模式列表 | 无 | 无 | | validate_regex | 验证正则表达式 | pattern | 无 |

目录页 (ExcelToc)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | create_toc_sheet | 创建目录表 | 无 | fileName, tocSheetName, includeHiddenSheets | | create_sheets_from_toc | 根据目录建表 | linkColumnName | fileName, createSheets | | update_toc_hyperlinks | 更新目录超链接 | columnName | fileName |

定时任务 (ExcelSchedule)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | create_task | 创建定时任务 | taskName, cronExpression, toolName | arguments, description | | list_tasks | 列出所有任务 | 无 | 无 | | delete_task | 删除任务 | taskName | 无 | | enable_task | 启用任务 | taskName | 无 | | disable_task | 禁用任务 | taskName | 无 | | run_task | 立即执行任务 | taskName | 无 |

Word文档生成 (DocumentGeneration)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | generate_documents | 批量生成Word文档 | templatePath, outputFolder | fileName, sheetName, nameColumn, format | | preview_document | 预览文档效果 | templatePath | fileName, sheetName |

PDF导出 (ExcelPdf)

| 工具 | 描述 | 必需参数 | 可选参数 | |------|------|---------|---------| | export_sheet_to_pdf | 导出工作表为PDF | pdfPath | fileName, sheetName | | export_workbook_to_pdf | 导出工作簿为PDF | pdfPath | fileName | | batch_export_to_pdf | 批量导出为PDF | outputFolder | fileName, sheetNames | | export_range_to_pdf | 导出区域为PDF | pdfPath, rangeAddress | fileName, sheetName |

使用 QuestPDF(Community License)实现,无需安装 Excel 或打印机驱动。导出为 A4 横向带表格边框的 PDF,使用 LatoFont 字体。

使用示例

用户: 创建一个销售数据表
Agent: 调用 create_workbook(fileName: "销售数据.xlsx", sheetName: "销售")

用户: 在A1写入标题
Agent: 调用 set_cell_value(fileName: "销售数据.xlsx", sheetName: "销售", row: 1, column: 1, value: "销售记录")

用户: 给标题加粗居中
Agent: 调用 set_cell_format(rangeAddress: "A1", bold: true, horizontalAlignment: "center")

用户: 分析B列的数据
Agent: 调用 get_range_statistics(range: "B:B")

CLI 直接调用(仅用于调试)

# 列出工具
./prebuilt/tablemagic.exe list-tools

# 创建工作簿
./prebuilt/tablemagic.exe call create_workbook --args '{"fileName":"test.xlsx"}'

# 写入数据
./prebuilt/tablemagic.exe call set_cell_value --args '{"fileName":"test.xlsx","row":1,"column":1,"value":"Hello"}'

# 读取数据
./prebuilt/tablemagic.exe call get_range_values --args '{"fileName":"test.xlsx","rangeAddress":"A1:D10"}'

# 批量执行
./prebuilt/tablemagic.exe batch calls.json

仓库结构

table-magic-skill/
├── skill.md              # 技能描述(含下载指令 + 工具清单)
├── mcp-config.json       # MCP配置(command 指向 ./prebuilt/tablemagic.exe)
├── README.md             # 说明文档
└── prebuilt/             # 预编译二进制(不在仓库中,首次使用前从 Gitee raw 下载)
    ├── tablemagic.exe   # self-contained .NET 8 可执行文件(win-x64)
    └── LatoFont/        # QuestPDF PDF导出所需 Lato 字体(19个文件)