{
  "category": "Text functions",
  "display_name": "TEXTSPLIT",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.TEXTSPLIT",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20527"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 3,
      "other_mismatch": 0,
      "refused": 2,
      "rows": 5,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Of 51 recorded answers (5 in the answer bank and 46 workbook cells), 2 do not match: 2 are refused.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "differs",
    "state_label": "Known larger differences",
    "summary": "Refuses 2 of 51 recorded calls; the rest match",
    "workbook_corpus": {
      "cells": 46,
      "matched": 46
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/text_format.rs#L934-L934",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/text_format.rs#L247-L255",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/text_format.rs#L257-L310",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/text_more.rs#L717-L766"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/text_format::read_value",
        "catalogue/text_format::value",
        "catalogue/text_format::profile",
        "catalogue/text_format::rendered",
        "catalogue/text_format::text",
        "catalogue/text_format::given",
        "catalogue/text_format::binary_flag",
        "catalogue/text_format::delimiters",
        "decimal::low32",
        "decimal::Natural::zero",
        "decimal::Natural::from_u64",
        "decimal::Natural::pow10",
        "decimal::Natural::normalize",
        "decimal::Natural::is_zero",
        "decimal::Natural::mul_add_small",
        "decimal::Natural::times_pow10",
        "decimal::Natural::times_pow5",
        "decimal::Natural::times_pow2",
        "decimal::ExactDecimal::read",
        "decimal::ExactDecimal::binary",
        "format/datetime::has_invalid_exponent",
        "format/datetime::looks_like_datetime_format",
        "format/datetime::without_subseconds",
        "format/datetime::render_with_datetime_tokens",
        "format/datetime::tokenize_datetime_format",
        "format/datetime::elapsed_token_at",
        "format/datetime::classify_minute_tokens",
        "format/datetime::token_kind",
        "format/datetime::is_time_neighbor",
        "format/datetime::push_literal",
        "format/datetime::render_datetime_literal",
        "format/datetime::format_elapsed",
        "format/datetime::TimeParts::from_serial",
        "format::measured_host",
        "format::currency_literal",
        "format::digits",
        "format::fifteen",
        "format::split",
        "format::grouped",
        "format::general",
        "format::significant",
        "format::sections",
        "format::bracket",
        "format::is_condition",
        "format::is_elapsed",
        "format::condition_holds",
        "format::condition_of",
        "format::strip_tokens",
        "format::choose",
        "format::items",
        "format::numeric",
        "format::literal_text",
        "format::integer_part",
        "format::fraction_part",
        "format::scientific",
        "format::fraction_code",
        "format::FractionCode::render",
        "format::mixed_fraction_under_space_grouping",
        "format::convergent",
        "format::text_declared_date_locale",
        "format::text",
        "format::text_of_text",
        "format/names::month_name",
        "format/names::weekday_name",
        "format/names::locale_names",
        "locale::LocaleId::from_bcp47_language_tag",
        "locale::LocaleId::from_excel_lcid",
        "locale::short_date_order",
        "locale::short_date_pattern",
        "locale::currency_placement",
        "locale::currency_spacing",
        "locale::currency_negative_pattern",
        "locale::format_profile",
        "locale::days_from_civil",
        "locale::civil_from_days",
        "locale::ymd_from_excel_serial",
        "number_text::decimal",
        "number_text::first_precision",
        "number_text::near_tie",
        "number_text::first_rounding",
        "number_text::rounded",
        "number_text::increment",
        "number_text::ascii",
        "ported/date_kernels::days_from_civil",
        "ported/date_kernels::civil_from_days",
        "ported/date_kernels::serial_unbounded_1900",
        "ported/date_kernels::ymd_1900",
        "ported/date_kernels::is_leap",
        "ported/date_kernels::days_in_month",
        "ported/date_kernels::whole_serial",
        "ported/date_kernels::whole",
        "ported/date_kernels::weekday_sunday_one_based",
        "ported/date_kernels::remap_weekday",
        "ported/date_kernels::weekday_of",
        "ported/date_kernels::weekday",
        "ported/text_kernels::text",
        "ported/text_kernels::text_from_str",
        "ported/text_kernels::date_integer_floor",
        "ported/text_kernels::push_singleton_or_original",
        "ported/text_kernels::push_upper",
        "ported/text_kernels::upper",
        "ported/text_more::fold_ascii_case",
        "ported/text_more::units_match",
        "value_text::measured_host_reader",
        "value_text::measured_space",
        "value_text::read",
        "value_text::number",
        "value_text::decimal",
        "value_text::fraction",
        "value_text::tokens",
        "value_text::month_named",
        "value_text::time_at",
        "value_text::full_year",
        "value_text::valid_day",
        "value_text::this_year",
        "value_text::serial_1900",
        "value_text::date_of",
        "value_text::date_time"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/text_format.rs#L934-L934",
      "state": "differs",
      "suite": null,
      "summary": "Refuses 2 of 51 recorded calls; the rest match"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.TEXTSPLIT.json",
  "name": "TEXTSPLIT",
  "notes": [
    {
      "basis": "Three recorded readings, with blank-cell and logical companions in the same run.",
      "documentation": null,
      "evidence": [
        {
          "commit": "080a6f2f7b65e750400837841f9db3d3822d8ec3",
          "locator": "empty_text_delimiter_errors_match_the_recorded_excel_values",
          "note": "recorded readings pinned",
          "path": "crates/calc-func/tests/f2_text.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.TEXTAFTER",
        "FUNC.TEXTBEFORE",
        "FUNC.TEXTSPLIT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXTSPLIT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXTBEFORE(\"\",\"-\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00274-textbefore-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=TEXTAFTER(\"\",\"-\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00266-textafter-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=TEXTSPLIT(\"\",\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00282-textsplit-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "An empty string as text gives #N/A (delimiter not found) from TEXTBEFORE and TEXTAFTER, but #VALUE! from TEXTSPLIT.",
      "status": "measured",
      "title": "Empty text gives #N/A from TEXTBEFORE and TEXTAFTER, #VALUE! from TEXTSPLIT"
    },
    {
      "basis": "22 recorded TEXTSPLIT and REGEXEXTRACT readings, questions 049 to 093.",
      "documentation": null,
      "evidence": [
        {
          "commit": "78b470c77271d6af938e16d5493882b8300cee62",
          "locator": "roots 078 and 079",
          "note": "REGEXEXTRACT results in the product",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.REGEXEXTRACT",
        "FUNC.TEXTSPLIT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXTSPLIT-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXTSPLIT({\"a,b,c\",\"d,e\"},\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"a\",\"d\"}",
            "kind": "array"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q049, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXTSPLIT({\"a,b\"},\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "a",
            "kind": "text"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q093, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=REGEXEXTRACT(\"a12b34\",\"[0-9]+\",{0,1,2})",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"12\",\"12\",#VALUE!}",
            "kind": "array"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q079, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MAP({\"a,b\",\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q088, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=BYROW({\"a,b\";\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"a\";\"c\"}",
            "kind": "array"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q089, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "When TEXTSPLIT's text is an array, even a 1 by 1 array, the call lifts over the elements and each returns only its first piece. MAP over the same lambda gives #CALC!, while BYROW gives the first pieces. REGEXEXTRACT lifted over return_mode does the same, and mode 2 on a pattern with no capture group gives #VALUE!.",
      "status": "measured",
      "title": "Over an array, TEXTSPLIT and REGEXEXTRACT keep only the first piece of each element"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- `TEXTJOIN` — the inverse operation. `TEXTJOIN` collapses an array into one delimited string;\n  `TEXTSPLIT` expands one string into an array. They are not exact inverses: joining loses the\n  distinction between an empty field and an absent one, so a round trip through `ignore_empty` is\n  lossy.\n- [`TEXTAFTER`](FUNC.TEXTAFTER.md) and [`TEXTBEFORE`](FUNC.TEXTBEFORE.md) — the selective members\n  of the same idea: one chosen occurrence rather than all of them. `INDEX(TEXTSPLIT(t,d), n)` and\n  `TEXTAFTER(t, d, n-1)` answer related questions differently.\n- [`ARRAYTOTEXT`](FUNC.ARRAYTOTEXT.md) — shares an implementation module upstream and is the usual\n  way to make a `TEXTSPLIT` result inspectable as a single string.\n- `SUBSTITUTE` plus `FIND` plus `MID` was the classic pre-dynamic-array splitting idiom, along with\n  the Text to Columns command. Neither is superseded in the formal sense; both remain available.\n- Confusable with `SPLIT` from VBA and with Power Query's split-column step. Neither shares this\n  function's padding or `ignore_empty` semantics.\n\n\n",
    "how-to-implement": "\n### Notes for implementers\n\n- **Decide the order of `ignore_empty` and rectangularisation, and record it.** Dropping empty\n  fields before computing `max(c_i)` and dropping them after give different column counts for the\n  same input. The documentation does not say which happens.\n- **Overlapping delimiters need a policy**, as in the rest of this family. Splitting `\"aaa\"` on\n  `\"aa\"` depends on whether the scan advances one character or past the match.\n- **An array of delimiters needs a precedence rule at a shared position.** If `col_delimiter` is\n  `{\"ab\",\"a\"}` and the text contains `\"ab\"`, longest-first and first-listed give different splits.\n  Nothing documented settles this.\n- **A delimiter that is the empty string** has no defined cut points under the model above. Treat\n  it as an explicit case rather than letting an empty-match loop run away.\n- **Row and column delimiters can collide.** If the same string is passed for both, the outer\n  split consumes every occurrence and the inner split finds none. That is a consequence of\n  outer-first ordering, and it is worth a test.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nThe return kind is `Array` — genuinely, not by lifting. `TEXTSPLIT` is one of the functions whose\nkernel produces a grid, so the host-side adaptation step described in\n[the call pipeline](../model/03-call-pipeline.md) anchors that grid as a dynamic-array spill. Two\nconsequences belong to the engine, not to this function, and are covered by that chapter: a\nblocked spill region publishes `#SPILL!`, and a spilled result is addressable through its anchor\nwith the `#` operator.\n\nSpecific to this function:\n\n- **A one-cell result is still an array.** `TEXTSPLIT(\"abc\", \",\")` yields a 1×1 array whose single\n  element is `\"abc\"`. The engine collapses that on publication, but a consuming function sees an\n  array, and [coercion and lifting](../model/02-coercion-and-lifting.md) explains why a 1×1 array\n  argument is deliberately not flattened to a bare scalar on lift positions.\n- **Fields are always text.** `TEXTSPLIT(\"1,2\", \",\")` produces the strings `\"1\"` and `\"2\"`, not\n  numbers. Wrap the result in `VALUE` or `--` if you want numbers, and see\n  [`VALUE`](FUNC.VALUE.md) for how locale-dependent that conversion is.\n- **The padding value is a value, not a format.** `pad_with` can be text, a number, or an error;\n  it occupies the cell exactly as given.\n- **Error inputs propagate** ahead of any splitting.\n- **Array-valued `text` lifts.** The upstream slice contract admits scalar text only, but Excel\n  lifts `TEXTSPLIT` over an array-valued `text`, even a 1 by 1 array, and each element returns only\n  its first piece rather than an array of arrays, which the value universe does not admit\n  (FN-TEXTSPLIT-002).\n\n\n\n### Errors\n\n\nMicrosoft's page does not publish an error table for `TEXTSPLIT` (see Sources). What it does state\nis that unfilled cells of an uneven result show `#N/A` unless `pad_with` is supplied, and it\nrecommends `IFNA` or `pad_with` to handle that. Note the framing: `#N/A` here is a *padding value*\noccupying data cells, not a failure of the call.\n\nBeyond that, the errors this function can be involved in are the ordinary ones:\n\n- an error value arriving in any argument propagates, per\n  [coercion and lifting](../model/02-coercion-and-lifting.md);\n- `#SPILL!` when the result cannot be published into the sheet — an engine outcome described in\n  [the call pipeline](../model/03-call-pipeline.md), not a `TEXTSPLIT` semantic;\n- `#VALUE!` for arguments outside their admitted domains. Which domains, exactly, is not stated on\n  Microsoft's page, and this Handbook has established only one: empty `text`, as\n  `TEXTSPLIT(\"\",\",\")` is `#VALUE!` (FN-TEXTSPLIT-001).\n\nThat last row is a real gap and is listed below rather than papered over.\n\n\n",
    "sources": "- Microsoft Support, TEXTSPLIT function —\n  <https://support.microsoft.com/en-us/office/textsplit-function-b1ca414e-4c21-4ca0-b1b7-bdecace8a6e7>\n  (retrieved for this page; source of the signature, argument meanings, and the padding note. It\n  publishes no error table.)\n- Handbook `content/model/01-value-universe.md` (arrays are rectangular; `#N/A` and `#SPILL!`),\n  `02-coercion-and-lifting.md`, `03-call-pipeline.md` (host-side adaptation and spill).\n\n",
    "version-differences": "No comparison between specific Excel builds is recorded here yet. This does not establish that all builds behave alike.",
    "what-it-does": "\n`TEXTSPLIT` is the inverse of joining. It takes one string and returns a rectangular array of the\npieces between delimiter occurrences.\n\nThe rule is a two-level tokenisation, applied outer-first:\n\n1. **Rows.** If `row_delimiter` is supplied, split the text at every occurrence of it, producing\n   `r` row-segments in order. If it is omitted, there is exactly one row-segment: the whole text.\n2. **Columns.** Split each row-segment independently at every occurrence of `col_delimiter`,\n   producing `c_1, c_2, …, c_r` fields.\n3. **Rectangle.** The result has `r` rows and `max(c_i)` columns. Row `i` supplies its `c_i` fields\n   left to right; the remaining `max(c_i) − c_i` cells of that row are filled with the padding\n   value.\n\nTwo properties of that rule deserve to be said out loud, because they are the source of most\nsurprises:\n\n- **Splitting is total, not selective.** Every occurrence is a cut. `n` occurrences of a delimiter\n  in a segment produce `n+1` fields, including empty ones at the ends and between adjacent\n  delimiters. `\"a,,b\"` split on `\",\"` is three fields, the middle one empty. `ignore_empty`\n  exists precisely to opt out of that.\n- **The result is ragged-then-padded, not ragged.** Excel's value universe has no ragged arrays;\n  an `Array` is rectangular by definition (see [the value universe](../model/01-value-universe.md)).\n  So a text whose rows have different field counts cannot be represented faithfully, and the\n  padding value is how the function admits that. The default padding is `#N/A`, which is the\n  honest choice: those cells contain no data, and `#N/A` is Excel's word for that.\n\nBoth delimiter arguments accept an *array* of delimiters rather than a single one, in which case\nany element of the array is a cut point. That makes `TEXTSPLIT(t, {\",\",\";\"})` a single-pass split\non either character — which is not the same as splitting on the two-character string `\",;\"`.\n\n\n\n### Arguments\n\n\n`TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])`\n\n| Argument | Required | Meaning (as documented by Microsoft) |\n|---|---|---|\n| `text` | yes | The string to split. |\n| `col_delimiter` | yes | The text marking where to split across columns. May be an array constant. |\n| `row_delimiter` | no | The text marking where to split down rows. May be an array constant. Omitted means a single row. |\n| `ignore_empty` | no | `TRUE` ignores consecutive delimiters (drops empty fields). Defaults to `FALSE`. |\n| `match_mode` | no | `0` (default) case-sensitive delimiter matching; `1` case-insensitive. |\n| `pad_with` | no | The value used to fill short rows. Defaults to `#N/A`. |\n\nTwo positions are routinely misunderstood.\n\n`col_delimiter` is required even when you only want to split into rows. To split a\nnewline-separated list into a column you must still supply something for position two; passing an\nempty string is not the same as omitting it, and the two behave differently.\n\n`ignore_empty` is a *field* filter, not a *delimiter* filter, and its name invites the wrong\nmental model. It does not merge adjacent delimiters before splitting; it removes empty fields from\nthe result — which also removes leading and trailing empties, and can therefore change how many\ncolumns the rectangle has.\n\n`match_mode` affects only how delimiter occurrences are found. It never changes the case of the\nreturned fields.\n\n\n"
  },
  "signature": {
    "display": "TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])",
    "parameters": [
      {
        "description": null,
        "name": "text",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "col_delimiter",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "row_delimiter",
        "optional": true,
        "repeats": false
      },
      {
        "description": null,
        "name": "ignore_empty",
        "optional": true,
        "repeats": false
      },
      {
        "description": null,
        "name": "match_mode",
        "optional": true,
        "repeats": false
      },
      {
        "description": null,
        "name": "pad_with",
        "optional": true,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 6,
        "min": 2
      },
      "category": "Text functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "A text split into rows and columns at delimiters",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Splits text strings by using column and row delimiters",
        "microsoft_url": "https://support.microsoft.com/en-us/office/textsplit-function-b1ca414e-4c21-4ca0-b1b7-bdecace8a6e7"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "bg-BG",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "cs-CZ",
          "name": "ROZDĚLIT.TEXT"
        },
        {
          "locale": "da-DK",
          "name": "TEKSTSPLIT"
        },
        {
          "locale": "de-DE",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "el-GR",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "en-AU",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "en-GB",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "en-US",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "es-ES",
          "name": "DIVIDIRTEXTO"
        },
        {
          "locale": "et-EE",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "fi-FI",
          "name": "TEKSTINJAKO"
        },
        {
          "locale": "fr-FR",
          "name": "FRACTIONNER.TEXTE*"
        },
        {
          "locale": "he-IL",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "hr-HR",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "hu-HU",
          "name": "SZÖVEGFELOSZTÁS"
        },
        {
          "locale": "id-ID",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "it-IT",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "ja-JP",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "ko-KR",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "lt-LT",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "lv-LV",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "nb-NO",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "nl-NL",
          "name": "TEKST.SPLITSEN"
        },
        {
          "locale": "pl-PL",
          "name": "PODZIEL.TEKST"
        },
        {
          "locale": "pt-BR",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "pt-PT",
          "name": "DIVIDIRTEXTO"
        },
        {
          "locale": "ro-RO",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "ru-RU",
          "name": "ТЕКСТРАЗД"
        },
        {
          "locale": "sk-SK",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "sl-SI",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "sv-SE",
          "name": "DELATEXT"
        },
        {
          "locale": "th-TH",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "tr-TR",
          "name": "METİNBÖL"
        },
        {
          "locale": "uk-UA",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "vi-VN",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "zh-CN",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "zh-HK",
          "name": "TEXTSPLIT"
        },
        {
          "locale": "zh-TW",
          "name": "TEXTSPLIT"
        }
      ],
      "signature": {
        "display": "TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])",
        "parameters": [
          {
            "description": null,
            "name": "text",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "col_delimiter",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "row_delimiter",
            "optional": true,
            "repeats": false
          },
          {
            "description": null,
            "name": "ignore_empty",
            "optional": true,
            "repeats": false
          },
          {
            "description": null,
            "name": "match_mode",
            "optional": true,
            "repeats": false
          },
          {
            "description": null,
            "name": "pad_with",
            "optional": true,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "TEXTSPLIT",
      "version_marker": null,
      "xlcall": null
    },
    "microsoft": "https://support.microsoft.com/en-us/office/textsplit-function-b1ca414e-4c21-4ca0-b1b7-bdecace8a6e7"
  },
  "try_it": {
    "formula": "=TEXTSPLIT(\"a,b,c\",\",\")"
  },
  "url": "https://handbook.dnacalc.com/functions/TEXTSPLIT.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "=TEXTSPLIT({\"a,b,c\",\"d,e\"},\",\") returned {\"a\",\"d\"}. =TEXTSPLIT({\"a,b\"},\",\") returned a. 2 further recorded controls are attached. Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0.20527.20088",
      "observations": [
        {
          "call": "=TEXTSPLIT({\"a,b,c\",\"d,e\"},\",\")",
          "excel": {
            "bits": null,
            "display": "{\"a\",\"d\"}",
            "kind": "array"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        },
        {
          "call": "=TEXTSPLIT({\"a,b\"},\",\")",
          "excel": {
            "bits": null,
            "display": "a",
            "kind": "text"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        },
        {
          "call": "=MAP({\"a,b\",\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        },
        {
          "call": "=BYROW({\"a,b\";\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "excel": {
            "bits": null,
            "display": "{\"a\";\"c\"}",
            "kind": "array"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        }
      ],
      "platform": "Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-TEXTSPLIT-002.json"
      ]
    }
  ]
}