add_table
Insert structured tables into Word documents by specifying file path, dimensions, headers, and data content for organized information presentation.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | ||
| rows | Yes | ||
| cols | Yes | ||
| headers | No | ||
| data | No |
Implementation Reference
- src/services/DocumentService.ts:95-125 (handler)Core handler function that creates a DOCX document containing a table with the specified number of rows and columns, populates it with provided data, and writes it to the filePath.async addTable(filePath: string, options: TableOptions): Promise<APIResponse> { try { const doc = new Document({ sections: [{ children: [ new Table({ rows: Array(options.rows).fill(0).map((_, rowIndex) => { return new TableRow({ children: Array(options.cols).fill(0).map((_, colIndex) => { const text = options.data?.[rowIndex]?.[colIndex] || ''; return new TableCell({ children: [new Paragraph({ text })], }); }), }); }), }), ], }], }); await Packer.toBuffer(doc).then((buffer) => { return fs.writeFile(filePath, buffer); }); return { success: true }; } catch (error) { const err = error as Error; return { success: false, error: `添加表格失败: ${err.message}` }; } }
- src/mcp-server.ts:94-120 (registration)MCP server tool registration for 'add_table', including Zod input schema validation and wrapper handler that delegates to DocumentService.addTable.server.tool( "add_table", { filePath: z.string(), rows: z.number(), cols: z.number(), headers: z.array(z.string()).optional(), data: z.array(z.array(z.string())).optional(), }, async (params) => { const result = await docService.addTable(params.filePath, { rows: params.rows, cols: params.cols, headers: params.headers, data: params.data, }); return { content: [ { type: "text", text: result.success ? "表格已添加" : result.error!, }, ], isError: !result.success, }; } );
- src/types/index.ts:29-35 (schema)TypeScript interface defining the input parameters for the addTable function.export interface TableOptions { rows: number; cols: number; headers?: string[]; data?: string[][]; style?: string; }