跳到正文
cccskills
免费在 GitHub 公开

sheet-generation-api

Generate CSV, Markdown, and XLSX spreadsheets from structured tabular data.

中文简介正在准备中。当前显示原文说明。

集成工具Excel
查看安装方法

包含的文件(1)

  • SKILL.md17.3 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Sheet Generation API

Generate CSV, Markdown, and XLSX spreadsheets from structured tabular data.

Cost: 1 credits per request

Prerequisites

You need an Iteration Layer API key. Get one at platform.iterationlayer.com during the 7-day trial.

For full integration guidance (SDKs, auth, MCP, error handling), see the Iteration Layer Integration Guide.

API Reference

Generate CSV, Markdown, and XLSX spreadsheets from a single API call. Send column definitions and row data as structured JSON, and receive the rendered spreadsheet as base64-encoded JSON in the response.

Key Features

  • Three Output Formats -- Generate CSV, Markdown tables, or XLSX from one unified input structure.
  • Positional Rows -- Rows are arrays of cells matching column order. No key mapping needed.
  • Cell Formatting -- Format types: text, number, decimal, currency, percentage, date, datetime, time, custom.
  • Currency Support -- ISO 4217 currency codes with configurable number separator styles.
  • Rich Styling -- Base styles for headers and body, with per-cell overrides for font, color, alignment, and more (XLSX).
  • Custom Fonts -- Upload font files (base64-encoded) with weight and style metadata (XLSX).
  • Multiple Sheets -- XLSX supports multiple worksheets. Markdown renders each sheet as a headed table. CSV supports a single sheet.
  • Merged Cells -- Combine cells across rows and columns using from/to ranges on individual cells (XLSX).
  • Formulas -- Any cell value starting with = is treated as a formula. Native in XLSX, server-evaluated for CSV and Markdown.

Overview

The Sheet Generation API creates spreadsheets from a JSON definition. You send a format, column definitions, row data, and optional styles, and receive the rendered spreadsheet as base64-encoded JSON.

Endpoint: POST /sheet-generation/v1/generate

Supported output formats: CSV, Markdown, XLSX

Request Format

<!-- tabs -->
curl -X POST \
  https://api.iterationlayer.com/sheet-generation/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "xlsx",
    "sheets": [
      {
        "name": "Invoices",
        "columns": [
          {
            "name": "Company",
            "width": 20
          },
          {
            "name": "Total",
            "width": 15
          }
        ],
        "rows": [
          [
            {
              "value": "Acme Corp"
            },
            {
              "value": 1500.50,
              "format": "currency",
              "currency_code": "EUR"
            }
          ]
        ]
      }
    ]
  }'
import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({
  apiKey: "YOUR_API_KEY",
});

const result = await client.generateSheet({
  format: "xlsx",
  sheets: [
    {
      name: "Invoices",
      columns: [
        {
          name: "Company",
          width: 20,
        },
        {
          name: "Total",
          width: 15,
        },
      ],
      rows: [
        [
          {
            value: "Acme Corp",
          },
          {
            value: 1500.50,
            format: "currency",
            currency_code: "EUR",
          },
        ],
      ],
    },
  ],
});
// result.buffer is a Uint8Array
// result.mime_type is "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
from iterationlayer import IterationLayer
client = IterationLayer(api_key="YOUR_API_KEY")

result = client.generate_sheet(
    format="xlsx",
    sheets=[
        {
            "name": "Invoices",
            "columns": [
                {
                    "name": "Company",
                    "width": 20
                },
                {
                    "name": "Total",
                    "width": 15
                },
            ],
            "rows": [
                [
                    {
                        "value": "Acme Corp"
                    },
                    {
                        "value": 1500.50,
                        "format": "currency",
                        "currency_code": "EUR",
                    },
                ],
            ],
        },
    ],
)
# result["buffer"] is bytes
# result["mime_type"] is "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
import il "github.com/iterationlayer/sdk-go"
client := il.NewClient("YOUR_API_KEY")

result, err := client.GenerateSheet(
	il.GenerateSheetRequest{
		Format: "xlsx",
		Sheets: []il.Sheet{
			{
				Name: "Invoices",
				Columns: []il.SheetColumn{
					{
						Name:  "Company",
						Width: 20,
					},
					{
						Name:  "Total",
						Width: 15,
					},
				},
				Rows: [][]il.SheetCell{
					{
						{
							Value: "Acme Corp",
						},
						{
							Value:        1500.50,
							Format:       "currency",
							CurrencyCode: "EUR",
						},
					},
				},
			},
		},
	},
)
// result.Buffer is []byte
// result.MimeType is "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
<!-- response -->
{
  "success": true,
  "data": {
    "buffer": "UEsDBBQAAAAIAA...",
    "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  }
}
<!-- /tabs -->

Request Structure

The top-level request has the following fields:

FieldTypeRequiredDescription
formatstringYesOutput format: csv, markdown, or xlsx
sheetsarrayYesArray of sheet definitions (see below)
stylesobjectNoBase styles for headers and body cells
fontsarrayNoCustom font definitions (base64-encoded font files, XLSX only)
webhook_urlstringNoHTTPS URL to receive results asynchronously. If provided, returns 201 immediately. See Webhooks.

Async Mode

Add a webhook_url parameter to process the request in the background. The API returns 201 Accepted immediately and delivers the result to your webhook URL when processing completes. See Webhooks for payload format and retry behavior.

Sheets

Each sheet definition contains:

FieldTypeRequiredDescription
namestringNoSheet name (default: "Sheet1")
columnsarrayYesColumn definitions (see below)
rowsarrayNoPositional array of rows. Each row is an array of cells matching column order.

Columns

FieldTypeRequiredDescription
namestringYesDisplay header name (min 1 character)
widthnumberNoColumn width (XLSX only, must be greater than 0)

Rows and Cells

Each row is an array of cells, where each cell's position corresponds to the column at the same index. A cell can be a bare value (string, number, boolean, or null) or a structured object with formatting:

Bare value:

[
  "Acme Corp",
  1500.50
]

Structured cells with format and styles:

[
  {
    "value": "Acme Corp"
  },
  {
    "value": 1500.50,
    "format": "currency",
    "currency_code": "EUR",
    "styles": {
      "is_bold": true,
      "font_color": "#008000"
    }
  }
]

You can mix bare values and structured cells in the same row. A row may have fewer cells than columns -- trailing cells default to empty.

Cell Fields

FieldTypeRequiredDescription
valueanyNoCell value. Strings starting with = are treated as formulas.
formatstringNoCell format (default: text). See Cell Formats below.
currency_codestringNoISO 4217 currency code (default: USD). Used with currency format.
number_stylestringNoNumber separator style (default: comma_period). Used with number, decimal, and currency formats.
date_stylestringNoExcel date format code (e.g., dd/mm/yyyy). Used with date, datetime, and time formats. See Date Styles below.
stylesobjectNoPer-cell style overrides (XLSX only). See Cell Styles below.
from_colintegerNoStart column for merge range (0-based). See Merged Cells.
to_colintegerNoEnd column for merge range (0-based). See Merged Cells.
from_rowintegerNoStart row for merge range (0-based). See Merged Cells.
to_rowintegerNoEnd row for merge range (0-based). See Merged Cells.

Cell Formats

FormatDescriptionCSV/Markdown ExampleXLSX Format Code
textPlain text (default)Acme Corp--
numberInteger with thousands separator1,500#,##0
decimalTwo decimal places1,500.50#,##0.00
currencyCurrency symbol with decimals$1,500.50$#,##0.00
percentageMultiplied by 100 with %75.00%0.00%
dateDate string2026-01-15yyyy-mm-dd (default, customizable via date_style)
datetimeDate and time string2026-01-15 10:30:00yyyy-mm-dd hh:mm:ss (default, customizable via date_style)
timeTime string10:30:00hh:mm:ss (default, customizable via date_style)
customCustom Excel format code(as-is)Via number_format in styles

Cell Styles

Cell-level style overrides (XLSX only, ignored for CSV/Markdown):

FieldTypeDescription
font_familystringFont family name
font_size_in_ptnumberFont size in points (>= 1)
is_boldbooleanBold text
is_italicbooleanItalic text
font_colorstringFont color as hex (e.g., #FF0000)
background_colorstringCell background color as hex
horizontal_alignmentstringOne of: left, center, right
number_formatstringCustom Excel number format code (used with format: "custom")

Styles

The top-level styles object defines base styles for header and body cells:

{
  "styles": {
    "header": {
      "font_family": "Helvetica",
      "font_size_in_pt": 12,
      "is_bold": true,
      "background_color": "#4472C4",
      "font_color": "#FFFFFF"
    },
    "body": {
      "font_family": "Helvetica",
      "font_size_in_pt": 11,
      "font_color": "#000000"
    }
  }
}

Header styles apply to the column header row. Body styles apply to all data cells. Per-cell styles overrides take precedence.

Custom Fonts

Upload custom fonts as base64-encoded buffers (XLSX only). Each font definition requires a name, weight, style, and the font file data.

FieldTypeRequiredDescription
namestringYesFont family name (min 1 character)
weightstringYesOne of: thin, extralight, light, regular, medium, semibold, bold, extrabold, black
stylestringYesOne of: normal, italic
bufferstringYesBase64-encoded font file (TTF, OTF, WOFF, or WOFF2)

Merged Cells

Merge a range of cells by setting from_col, to_col, from_row, and to_row on the cell itself (XLSX only). The merge range is 0-based and inclusive. The cell's value is displayed in the merged area.

{
  "format": "xlsx",
  "sheets": [
    {
      "name": "Report",
      "columns": [
        {
          "name": "A",
          "width": 20
        },
        {
          "name": "B",
          "width": 20
        },
        {
          "name": "C",
          "width": 20
        }
      ],
      "rows": [
        [
          {
            "value": "Summary",
            "from_col": 0,
            "to_col": 2,
            "from_row": 0,
            "to_row": 0,
            "styles": {
              "is_bold": true,
              "horizontal_alignment": "center"
            }
          }
        ],
        [
          "Detail A",
          "Detail B",
          "Detail C"
        ]
      ]
    }
  ]
}

In this example, the first row's single cell spans all three columns (columns 0 through 2). The second row has three separate cells.

Formulas

Any cell whose value is a string starting with = is treated as a formula. No separate formula array is needed -- formulas are just cells.

{
  "format": "xlsx",
  "sheets": [
    {
      "name": "Totals",
      "columns": [
        {
          "name": "Item",
          "width": 20
        },
        {
          "name": "Amount",
          "width": 15
        }
      ],
      "rows": [
        [
          "Widget A",
          {
            "value": 100.00,
            "format": "currency"
          }
        ],
        [
          "Widget B",
          {
            "value": 250.00,
            "format": "currency"
          }
        ],
        [
          {
            "value": "Total",
            "styles": {
              "is_bold": true
            }
          },
          {
            "value": "=SUM(B2:B3)",
            "format": "currency"
          }
        ]
      ]
    }
  ]
}

For XLSX, formulas are written natively and evaluated by Excel. For CSV and Markdown, simple aggregation formulas (SUM, AVERAGE, COUNT, MIN, MAX) are evaluated server-side. Unsupported formulas are written as raw strings.

Multiple Sheets

XLSX and Markdown support multiple sheets. CSV supports only one sheet.

XLSX: Each sheet becomes a separate worksheet in the workbook.

Markdown: Each sheet is rendered as a ## Sheet Name heading followed by a markdown table:

## Invoices

| Company | Total |
| --- | --- |
| Acme Corp | EUR 1,500.50 |

## Payments

| Date | Amount |
| --- | --- |
| 2026-01-15 | $500.00 |

CSV: If more than one sheet is provided, the API returns a 400 error.

Currency Codes

The currency_code field accepts any ISO 4217 currency code. It is used with the currency format to determine the currency symbol displayed in the cell. Defaults to USD if not specified.

[
  {
    "value": 1500.50,
    "format": "currency",
    "currency_code": "EUR"
  },
  {
    "value": 2400.00,
    "format": "currency",
    "currency_code": "JPY"
  },
  {
    "value": 899.99,
    "format": "currency",
    "currency_code": "GBP"
  }
]

Number Styles

The number_style field controls the thousands and decimal separators for number, decimal, and currency formats. Defaults to comma_period if not specified.

StyleThousands SeparatorDecimal SeparatorExample
comma_period,.1,500.50
period_comma.,1.500,50
space_comma ,1 500,50
space_period .1 500.50
[
  {
    "value": 1500.50,
    "format": "decimal",
    "number_style": "period_comma"
  }
]

Date Styles

The date_style field accepts an Excel date format code string to control how date, datetime, and time values are displayed. The format code is passed directly to XLSX as the cell number format, and interpreted for CSV/Markdown rendering.

TokenDescriptionExample
yyyy4-digit year2026
yy2-digit year26
mmmmFull month nameMarch
mmmAbbreviated month nameMar
mm2-digit month (or minutes after hh/h)03
mMonth without leading zero (or minutes after hh/h)3
dd2-digit day21
dDay without leading zero21
hh2-digit hour14
hHour without leading zero2
ss2-digit seconds05
sSeconds without leading zero5

Default values if date_style is not specified:

  • date: yyyy-mm-dd
  • datetime: yyyy-mm-dd hh:mm:ss
  • time: hh:mm:ss
[
  {
    "value": "2026-03-21",
    "format": "date",
    "date_style": "dd/mm/yyyy"
  },
  {
    "value": "2026-03-21 14:30:00",
    "format": "datetime",
    "date_style": "d mmmm yyyy hh:mm:ss"
  },
  {
    "value": "14:30:00",
    "format": "time",
    "date_style": "hh:mm"
  }
]

Feature Comparison by Format

FeatureXLSXCSVMarkdown
Multiple Sheets✅❌✅
Cell Formatting✅❌❌
Custom Fonts✅❌❌
Merged Cells✅❌❌
Formulas✅ (native)✅ (server-evaluated)✅ (server-evaluated)
Number Formats✅ (native)✅ (string rendering)✅ (string rendering)
Currency Codes✅✅✅
Number Styles✅✅✅
Date Styles✅✅✅
Column Widths✅❌❌
Header/Body Styles✅❌❌

Recipes

For complete, runnable examples see the Recipes page.

Error Responses

StatusDescription
400Invalid request (validation errors, missing required fields, CSV with multiple sheets)
401Missing or invalid API key
422Processing error (spreadsheet rendering failure)
429Rate limit exceeded

Links

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Resize, sharpen, and compress an image to fit email platform size limits in a single pipeline.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

Compress an image to fit within a specific file size in bytes using quality-first compression.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

Convert a contract PDF to clean markdown for clause extraction or LLM analysis.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

Convert external documents — specs, contracts, reports — to markdown for knowledge base ingestion.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

Convert a document to clean markdown suitable for chunking and embedding in a RAG pipeline.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

Convert an image between PNG, JPEG, and WebP formats with quality control for web optimization.

中文简介正在准备中。当前显示原文说明。

iterationlayer/skills42026年6月9日 更新

查看 iterationlayer 的全部技能

报告此技能的问题