本文へ移動
cccskills
無料GitHub で公開

sheet-generation-api

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

インストール方法を見る

含まれるファイル(1)

  • SKILL.md17.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

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 のスキルをすべて見る

このスキルの問題を報告する