Jetxl describes itself as an experimental xlsx writer. Writing without optional parameters is well covered. Combining several formatting parameters may hit bugs, and existing parameter behavior is subject to change. Pin an exact version.
There’s no reader. Jetxl can’t open a spreadsheet, inspect one, or modify an existing workbook. Every call produces a file from scratch. For reading, use openpyxl.
Excel stops at 1,048,576 rows and 16,384 columns. Jetxl checks both before writing and raises rather than producing a truncated file. The row limit counts the header row.
NaN and infinity are written as empty cells, because neither is representable in the spreadsheet format. Control characters other than tab, newline and carriage return are stripped from text for the same reason. Neither conversion raises, so the file writes successfully and the difference appears only when you open it. See Data types.
Jetxl accepts six or eight hex digits and strips a leading #. Anything else, including named colors such as "red" and three-digit shorthand such as "F00", is dropped. The file writes successfully with default coloring instead of raising an error, so check your output when a color doesn’t appear.
Jetxl catches the obvious mistakes. An empty format code, or one made entirely of letters such as "accounting", raises an OSError naming the bad code. Anything else passes through to Excel unchecked, so a malformed code still produces a file that Excel complains about when you open it.Passing a raw code that matches a built-in, such as "$#,##0.00" instead of "currency", writes the file and prints a warning suggesting the built-in name.Excel caps format codes at roughly 255 characters, and color names inside a code are limited to Excel’s built-in set.
Despite the source describing it as bold plus gray, styled_headers applies bold with no fill. Use cell_styles on the header row for a background color.
An unrecognized comparison operator in a conditional format becomes greater_than rather than raising, so a typo produces a working file with the wrong rule. An unrecognized rule_type is worse: the whole rule is dropped and nothing is written. A table missing a required key such as name is dropped the same way.Errors that do raise arrive from the Rust core as OSError, not ValueError.
Six types: column, bar, line, pie, scatter, area. Anything else, including combo charts, waterfalls, treemaps and sparklines, isn’t available. Rendering an image and embedding it is the workaround, at the cost of a static picture.Chart style numbers don’t all work with all chart types, and rendering varies between Excel versions.
write_sheet_arrow annotates cell_styles as List[CellStyleMap], while write_sheet_arrow_to_bytes annotates it as List[CellStyleDict], a name with no corresponding definition in the stub. The runtime behavior appears to be the same; the annotation differs.
Issues and discussions live on GitHub. Reports that include the Jetxl version, the DataFrame library and version, and a minimal failing example are the ones that get fixed.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jetxl","description":"A fast Excel writer for Python, built in Rust","colors":{"primary":"#2D5BFF","light":"#7C97FF","dark":"#1B3BB8"},"logo":{"light":"https://mintcdn.com/jetxl/4Z8ykv-4uqUaJd3C/logo/light.svg?fit=max\u0026auto=format\u0026n=4Z8ykv-4uqUaJd3C\u0026q=85\u0026s=823652e6ae127d1c04ed0e478da31fea","dark":"https://mintcdn.com/jetxl/4Z8ykv-4uqUaJd3C/logo/dark.svg?fit=max\u0026auto=format\u0026n=4Z8ykv-4uqUaJd3C\u0026q=85\u0026s=85a403531419bb94a4b9eb58105da732"},"favicon":"https://mintcdn.com/jetxl/4Z8ykv-4uqUaJd3C/favicon.svg?fit=max\u0026auto=format\u0026n=4Z8ykv-4uqUaJd3C\u0026q=85\u0026s=f189fa7ff8d419b71608b47103e0b639","appearance":{"default":"system"},"navbar":{"links":[{"href":"https://pypi.org/project/jetxl/","label":"PyPI"}],"primary":{"type":"github","href":"https://github.com/omarirfa/Jetxl"}},"footer":{"socials":{"github":"https://github.com/omarirfa/Jetxl"},"links":[{"header":"Documentation","items":[{"label":"Quickstart","href":"/quickstart"},{"label":"Conventions","href":"/guides/conventions"},{"label":"Reference","href":"/reference/write-sheet-arrow"}]},{"header":"Project","items":[{"label":"GitHub","href":"https://github.com/omarirfa/Jetxl"},{"label":"PyPI","href":"https://pypi.org/project/jetxl"},{"label":"Issues","href":"https://github.com/omarirfa/Jetxl/issues"}]}]},"seo":{"indexing":"all"},"icons":{"library":"fontawesome"},"banner":{"content":"Jetxl is pre-1.0. Plain writes are well covered; combining several formatting parameters is where bugs are most likely. Pin an exact version.","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/omarirfa/Jetxl"},{"anchor":"PyPI","icon":"python","href":"https://pypi.org/project/jetxl/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jetxl","hasAudioNarration":false,"actualSubdomain":"jetxl","customDomains":[],"gitSource":{"type":"github","owner":"mintlify-community","repo":"docs-personal-73bd8e29-c33dab26","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aa1f49388ad29f9fc2aa039","collectionId":"a1bf5037-4362-4a1a-a779-462a877e1f1a","liveDeploymentHistoryId":"6aa1f49388ad29f9fc2aa039","schemaVersion":"v3"},"entitlements":{},"buildId":"6aa1f49388ad29f9fc2aa039","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Get started","count":5},{"language":"default","tag":"Reference","count":5},{"language":"default","tag":"About","count":3},{"language":"default","tag":"Recipes","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"about/limitations","slug":"/about/limitations","pageMetadata":{"title":"Limitations","description":"What Jetxl doesn't do, and what to watch for","icon":"triangle-exclamation","href":"/about/limitations"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"What Jetxl doesn’t do, and what to watch for\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`Jetxl describes itself as an experimental xlsx writer. Writing without optional parameters is well covered. Combining several formatting parameters may hit bugs, and existing parameter behavior is subject to change. Pin an exact version.`})}),`\n`,_jsx(Heading,{level:`2`,id:`write-only`,children:`Write-only`}),`\n`,_jsxs(_components.p,{children:[`There’s no reader. Jetxl can’t open a spreadsheet, inspect one, or modify an existing workbook. Every call produces a file from scratch. For reading, use `,_jsx(_components.code,{children:`openpyxl`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`inconsistent-indexing`,children:`Inconsistent indexing`}),`\n`,_jsx(_components.p,{children:`This is the most common source of off-by-one bugs.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Structure`}),_jsx(_components.th,{children:`Rows`}),_jsx(_components.th,{children:`Columns`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cell_styles`})}),_jsx(_components.td,{children:`1-based`}),_jsx(_components.td,{children:`0-based`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`header_content`})}),_jsx(_components.td,{children:`1-based`}),_jsx(_components.td,{children:`0-based`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Table range`}),_jsx(_components.td,{children:`1-based`}),_jsx(_components.td,{children:`0-based`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Chart data range`}),_jsx(_components.td,{children:`1-based`}),_jsx(_components.td,{children:`0-based`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Chart position`}),_jsx(_components.td,{children:`0-based`}),_jsx(_components.td,{children:`0-based`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Image position`}),_jsx(_components.td,{children:`0-based`}),_jsx(_components.td,{children:`0-based`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`grid-limits`,children:`Grid limits`}),`\n`,_jsx(_components.p,{children:`Excel stops at 1,048,576 rows and 16,384 columns. Jetxl checks both before writing and raises rather than producing a truncated file. The row limit counts the header row.`}),`\n`,_jsx(Heading,{level:`2`,id:`values-that-change-silently`,children:`Values that change silently`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`NaN`}),` and infinity are written as empty cells, because neither is representable in the spreadsheet format. Control characters other than tab, newline and carriage return are stripped from text for the same reason. Neither conversion raises, so the file writes successfully and the difference appears only when you open it. See `,_jsx(_components.a,{href:`/guides/data-types`,children:`Data types`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`unusable-colors-disappear-silently`,children:`Unusable colors disappear silently`}),`\n`,_jsxs(_components.p,{children:[`Jetxl accepts six or eight hex digits and strips a leading `,_jsx(_components.code,{children:`#`}),`. Anything else, including named colors such as `,_jsx(_components.code,{children:`\"red\"`}),` and three-digit shorthand such as `,_jsx(_components.code,{children:`\"F00\"`}),`, is dropped. The file writes successfully with default coloring instead of raising an error, so check your output when a color doesn’t appear.`]}),`\n`,_jsx(Heading,{level:`2`,id:`number-format-checking-is-partial`,children:`Number format checking is partial`}),`\n`,_jsxs(_components.p,{children:[`Jetxl catches the obvious mistakes. An empty format code, or one made entirely of letters such as `,_jsx(_components.code,{children:`\"accounting\"`}),`, raises an `,_jsx(_components.code,{children:`OSError`}),` naming the bad code. Anything else passes through to Excel unchecked, so a malformed code still produces a file that Excel complains about when you open it.`]}),`\n`,_jsxs(_components.p,{children:[`Passing a raw code that matches a built-in, such as `,_jsx(_components.code,{children:`\"$#,##0.00\"`}),` instead of `,_jsx(_components.code,{children:`\"currency\"`}),`, writes the file and prints a warning suggesting the built-in name.`]}),`\n`,_jsx(_components.p,{children:`Excel caps format codes at roughly 255 characters, and color names inside a code are limited to Excel’s built-in set.`}),`\n`,_jsx(Heading,{level:`2`,id:`percentage-formats-multiply`,children:`Percentage formats multiply`}),`\n`,_jsxs(_components.p,{children:[`The built-in percentage formats map to Excel’s own percent formats, which multiply by 100 for display. Store `,_jsx(_components.code,{children:`0.15`}),` for 15 percent, not `,_jsx(_components.code,{children:`15`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`styled_headers-is-bold-only`,children:`styled_headers is bold only`}),`\n`,_jsxs(_components.p,{children:[`Despite the source describing it as bold plus gray, `,_jsx(_components.code,{children:`styled_headers`}),` applies bold with no fill. Use `,_jsx(_components.code,{children:`cell_styles`}),` on the header row for a background color.`]}),`\n`,_jsx(Heading,{level:`2`,id:`some-mistakes-fail-quietly`,children:`Some mistakes fail quietly`}),`\n`,_jsxs(_components.p,{children:[`An unrecognized comparison `,_jsx(_components.code,{children:`operator`}),` in a conditional format becomes `,_jsx(_components.code,{children:`greater_than`}),` rather than raising, so a typo produces a working file with the wrong rule. An unrecognized `,_jsx(_components.code,{children:`rule_type`}),` is worse: the whole rule is dropped and nothing is written. A table missing a required key such as `,_jsx(_components.code,{children:`name`}),` is dropped the same way.`]}),`\n`,_jsxs(_components.p,{children:[`Errors that do raise arrive from the Rust core as `,_jsx(_components.code,{children:`OSError`}),`, not `,_jsx(_components.code,{children:`ValueError`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`charts`,children:`Charts`}),`\n`,_jsxs(_components.p,{children:[`Six types: column, bar, line, pie, scatter, area. Anything else, including combo charts, waterfalls, treemaps and sparklines, isn’t available. Rendering an image and `,_jsx(_components.a,{href:`/guides/images`,children:`embedding it`}),` is the workaround, at the cost of a static picture.`]}),`\n`,_jsx(_components.p,{children:`Chart style numbers don’t all work with all chart types, and rendering varies between Excel versions.`}),`\n`,_jsx(Heading,{level:`2`,id:`tables`,children:`Tables`}),`\n`,_jsx(_components.p,{children:`Ranges must not overlap. Excel rejects a workbook whose tables collide, and it surfaces when someone opens the file rather than at write time.`}),`\n`,_jsx(Heading,{level:`2`,id:`validation-is-advisory`,children:`Validation is advisory`}),`\n`,_jsx(_components.p,{children:`Rules constrain typing. Pasted values can bypass them, and recipients can delete them. Validate again when the file comes back.`}),`\n`,_jsx(Heading,{level:`2`,id:`memory-on-the-bytes-functions`,children:`Memory on the bytes functions`}),`\n`,_jsx(_components.p,{children:`Jetxl holds the whole workbook in memory before returning it. At a million rows that approaches a gigabyte. Write to a file for very large exports.`}),`\n`,_jsx(Heading,{level:`2`,id:`type-stub-inconsistency`,children:`Type-stub inconsistency`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`write_sheet_arrow`}),` annotates `,_jsx(_components.code,{children:`cell_styles`}),` as `,_jsx(_components.code,{children:`List[CellStyleMap]`}),`, while `,_jsx(_components.code,{children:`write_sheet_arrow_to_bytes`}),` annotates it as `,_jsx(_components.code,{children:`List[CellStyleDict]`}),`, a name with no corresponding definition in the stub. The runtime behavior appears to be the same; the annotation differs.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reporting-problems`,children:`Reporting problems`}),`\n`,_jsxs(_components.p,{children:[`Issues and discussions live on `,_jsx(_components.a,{href:`https://github.com/omarirfa/Jetxl`,children:`GitHub`}),`. Reports that include the Jetxl version, the DataFrame library and version, and a minimal failing example are the ones that get fixed.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Limitations","description":"What Jetxl doesn't do, and what to watch for","icon":"triangle-exclamation","href":"/about/limitations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Write-only","slug":"write-only","depth":2,"children":[]},{"title":"Inconsistent indexing","slug":"inconsistent-indexing","depth":2,"children":[]},{"title":"Grid limits","slug":"grid-limits","depth":2,"children":[]},{"title":"Values that change silently","slug":"values-that-change-silently","depth":2,"children":[]},{"title":"Unusable colors disappear silently","slug":"unusable-colors-disappear-silently","depth":2,"children":[]},{"title":"Number format checking is partial","slug":"number-format-checking-is-partial","depth":2,"children":[]},{"title":"Percentage formats multiply","slug":"percentage-formats-multiply","depth":2,"children":[]},{"title":"styled_headers is bold only","slug":"styled_headers-is-bold-only","depth":2,"children":[]},{"title":"Some mistakes fail quietly","slug":"some-mistakes-fail-quietly","depth":2,"children":[]},{"title":"Charts","slug":"charts","depth":2,"children":[]},{"title":"Tables","slug":"tables","depth":2,"children":[]},{"title":"Validation is advisory","slug":"validation-is-advisory","depth":2,"children":[]},{"title":"Memory on the bytes functions","slug":"memory-on-the-bytes-functions","depth":2,"children":[]},{"title":"Type-stub inconsistency","slug":"type-stub-inconsistency","depth":2,"children":[]},{"title":"Reporting problems","slug":"reporting-problems","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"jetxl","siteName":"Jetxl","title":"Limitations - Jetxl","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-09T23:57:57.024Z","originalFileLocation":"about/limitations.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"What Jetxl doesn\u0026#x27;t do, and what to watch for\">\u003cmeta data-mint-head name=\"application-name\" content=\"Jetxl\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Limitations - Jetxl\">\u003cmeta data-mint-head property=\"og:description\" content=\"What Jetxl doesn\u0026#x27;t do, and what to watch for\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Jetxl\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://jetxl.mintlify.app/about/limitations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jetxl.mintlify.app/_mintlify/api/og/v2?division=About\u0026amp;title=Limitations\u0026amp;description=What+Jetxl+doesn%27t+do%2C+and+what+to+watch+for\u0026amp;theme=024fbdb6b997ac992983728a\u0026amp;signature=b250ef782c87170ecebc04a25df9d20280e6ac2e9b4178ec07e3beda15241ae8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Limitations - Jetxl\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What Jetxl doesn\u0026#x27;t do, and what to watch for\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jetxl.mintlify.app/_mintlify/api/og/v2?division=About\u0026amp;title=Limitations\u0026amp;description=What+Jetxl+doesn%27t+do%2C+and+what+to+watch+for\u0026amp;theme=024fbdb6b997ac992983728a\u0026amp;signature=b250ef782c87170ecebc04a25df9d20280e6ac2e9b4178ec07e3beda15241ae8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/jetxl/PB4_qEvrJRzzSjLk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Jetxl\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2D5BFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://jetxl.mintlify.app/about/limitations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/about/limitations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://jetxl.mintlify.app/#organization\",\"name\":\"Jetxl\",\"url\":\"https://jetxl.mintlify.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jetxl/4Z8ykv-4uqUaJd3C/logo/light.svg?fit=max\u0026auto=format\u0026n=4Z8ykv-4uqUaJd3C\u0026q=85\u0026s=823652e6ae127d1c04ed0e478da31fea\"}},{\"@type\":\"WebSite\",\"@id\":\"https://jetxl.mintlify.app#website\",\"name\":\"Jetxl\",\"url\":\"https://jetxl.mintlify.app\",\"publisher\":{\"@id\":\"https://jetxl.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://jetxl.mintlify.app/about/limitations#webpage\",\"url\":\"https://jetxl.mintlify.app/about/limitations\",\"name\":\"Limitations\",\"description\":\"What Jetxl doesn't do, and what to watch for\",\"dateModified\":\"2026-09-09T23:57:57.024Z\",\"isPartOf\":{\"@id\":\"https://jetxl.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://jetxl.mintlify.app/about/limitations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://jetxl.mintlify.app/about/limitations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"About\",\"item\":\"https://jetxl.mintlify.app/about/troubleshooting\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Limitations\",\"item\":\"https://jetxl.mintlify.app/about/limitations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://jetxl.mintlify.app/about/limitations#article\",\"headline\":\"Limitations\",\"name\":\"Limitations\",\"description\":\"What Jetxl doesn't do, and what to watch for\",\"url\":\"https://jetxl.mintlify.app/about/limitations\",\"mainEntityOfPage\":{\"@id\":\"https://jetxl.mintlify.app/about/limitations#webpage\"},\"dateModified\":\"2026-09-09T23:57:57.024Z\",\"publisher\":{\"@id\":\"https://jetxl.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://jetxl.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Jetxl\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Jetxl","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/omarirfa/Jetxl"},{"anchor":"PyPI","icon":"python","href":"https://pypi.org/project/jetxl/"}]},"groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Jetxl","sidebarTitle":"Introduction","icon":"plane","href":"/index"},{"title":"Installation","icon":"download","href":"/installation"},{"title":"Quickstart","icon":"rocket","href":"/quickstart"},{"title":"Which function do I call?","sidebarTitle":"Choosing an API","icon":"signs-post","href":"/choosing-an-api"},{"title":"Migrating from other libraries","sidebarTitle":"Migrating","icon":"right-left","href":"/migrating"}]},{"group":"Guides","icon":"compass","pages":[{"title":"Conventions","icon":"ruler-combined","href":"/guides/conventions"},{"title":"Data types","icon":"shapes","href":"/guides/data-types"},{"title":"Charts","icon":"chart-column","href":"/guides/charts"},{"title":"Formatting basics","icon":"wand-magic-sparkles","href":"/guides/formatting-basics"},{"title":"Number formats","icon":"hashtag","href":"/guides/number-formats"},{"title":"Cell styles","icon":"palette","href":"/guides/cell-styles"},{"title":"Excel tables","icon":"table-cells","href":"/guides/tables"},{"title":"Images","icon":"image","href":"/guides/images"},{"title":"Data validation","icon":"circle-check","href":"/guides/data-validation"},{"title":"Conditional formatting","icon":"wand-sparkles","href":"/guides/conditional-formatting"},{"title":"Formulas, links and merges","icon":"square-root-variable","href":"/guides/formulas-links-merges"},{"title":"Sheet appearance","icon":"display","href":"/guides/sheet-appearance"},{"title":"Multiple sheets","icon":"layer-group","href":"/guides/multi-sheet"},{"title":"In-memory output","icon":"memory","href":"/guides/in-memory"}]},{"group":"Recipes","icon":"book-open","pages":[{"title":"Monthly sales report","icon":"file-invoice-dollar","href":"/recipes/sales-report"},{"title":"Executive dashboard","icon":"gauge-high","href":"/recipes/dashboard"},{"title":"Data-entry template","icon":"keyboard","href":"/recipes/data-entry-template"}]},{"group":"Reference","icon":"code","pages":[{"title":"write_sheet_arrow","icon":"file-export","href":"/reference/write-sheet-arrow"},{"title":"write_sheets_arrow","icon":"layer-group","href":"/reference/multi-sheet-functions"},{"title":"Bytes functions","icon":"memory","href":"/reference/bytes-api"},{"title":"Dictionary functions","icon":"box-archive","href":"/reference/dict-api"},{"title":"Type reference","icon":"brackets-curly","href":"/reference/types"}]},{"group":"About","icon":"circle-info","pages":[{"title":"Troubleshooting","icon":"bug","href":"/about/troubleshooting"},{"title":"Performance","description":"Published benchmarks and where the speed comes from","icon":"gauge-high","href":"/about/performance"},{"title":"Limitations","icon":"triangle-exclamation","href":"/about/limitations"}]}]},"title":"Limitations - Jetxl","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}