{"id":"147b78ff-44d3-4da1-b5d5-525bfecbbd27","shortId":"4xKEdY","kind":"skill","title":"flexcel-net","tagline":"Use when writing C# / VB.NET / F# code that reads, writes, manipulates, or exports Excel (.xlsx / .xls) files, generates PDF or HTML from Excel, or produces data-driven reports with FlexCel Studio for .NET (TMS Software). Triggers include Excel/xlsx from C#, XlsFile, FlexCelRepor","description":"# FlexCel Studio for .NET\n\nThis skill helps write **C# / VB.NET / F#** code that uses **FlexCel** — the TMS Software library for working with Excel `.xlsx` / `.xls` files, exporting to PDF / HTML / SVG / images, and generating data-driven reports from templates. Works with .NET Framework 4.6+, .NET Core / .NET 5+, .NET Standard 2.0+, .NET MAUI, Xamarin, and .NET 9 Native AOT (with caveats — see below).\n\n## When to use this skill\n\nActivate whenever the user wants to, from .NET code:\n\n- **Read** an Excel file (`.xlsx` or `.xls`) — cell values, formulas, formatting.\n- **Create or modify** an Excel file programmatically.\n- **Generate reports** by merging data into Excel templates.\n- **Export** an Excel file to **PDF**, **HTML**, **SVG**, or images.\n- **Autofit** rows/columns, render sheets, or measure cells.\n- Target **.NET Framework, .NET Core / .NET 5+, .NET MAUI, Xamarin, Blazor server, ASP.NET Core**, or **Native AOT**.\n\nFlexCel does **not** require Excel or any Office installation on the target machine. No OLE/COM, no interop. Fully managed — works on Windows, Linux, macOS, iOS, and Android.\n\n## Two ways to create Excel files — pick one\n\nBefore writing code, decide which API fits the task:\n\n| If the user wants to… | Use | Why |\n|-----------------------|-----|-----|\n| Read existing files, or build files cell-by-cell in code | **`XlsFile` API** (`FlexCel.XlsAdapter`) | Full programmatic control; no designer required; Native-AOT-safe. |\n| Produce the same report repeatedly from changing data, with a styled layout | **`FlexCelReport` + Excel template** (`FlexCel.Report`) | Non-programmers can edit the template in Excel; code only provides data. |\n\nWhen the user says \"generate a report with company logo / nice formatting / many rows from a database\", prefer **Reports**. When they say \"read this file and extract values\" or \"create an Excel file with these calculations\", prefer the **API**.\n\nYou can combine both: run a report to produce an in-memory `XlsFile`, then manipulate it with the API, then export to PDF.\n\n## Package and namespace reference\n\n**NuGet package:** `TMS.FlexCel` (includes almost all functionality). Install via `dotnet add package TMS.FlexCel` **after configuring the TMS NuGet source** — FlexCel is hosted at TMS's own NuGet feed, not on nuget.org. See `guides/installation-guide.md` in the doc source for feed setup.\n\nOptional companion packages:\n- `TMS.FlexCel.WinForms` — WinForms preview / grid components.\n- `TMS.FlexCel.WebForms` — legacy WebForms viewer (rarely needed).\n\n**Namespaces — add per task:**\n\n| Task | `using` |\n|------|---------|\n| Any FlexCel code | `using FlexCel.Core;` |\n| Read / write xls/xlsx | `using FlexCel.XlsAdapter;` |\n| PDF / HTML / image export, autofitting | `using FlexCel.Render;` |\n| Low-level PDF access (sign, PDF/A, standalone PDF) | `using FlexCel.Pdf;` |\n| Template-based reports | `using FlexCel.Report;` |\n| WinForms components | `using FlexCel.Winforms;` |\n| ASP.NET helpers | `using FlexCel.AspNet;` |\n\n**Note:** Unlike the VCL edition, `.NET` has **no platform-support unit/assembly** to register in the entry point — all platform integration ships with the core package. Just reference `TMS.FlexCel` and you're done.\n\n## Critical gotchas (read this every time)\n\n1. **1-based indexing** for rows, columns, and sheets. `xls.SetCellValue(1, 1, ...)` writes to `A1`. XF (format) indices are the single exception — they are **0-based**.\n2. **No `T` prefix on class names.** VCL has `TXlsFile`, `TFlexCelReport`, `TFlexCelPdfExport`. .NET has **`XlsFile`**, **`FlexCelReport`**, **`FlexCelPdfExport`**. However value-type structs keep the `T` — `TFormula`, `TFlxFormat`, `TCellAddress`, `TRichString`, `TExcelFileFormat`, `TFlxFormulaErrorValue`.\n3. **`GetCellValue` returns `object`.** There is no `TCellValue` discriminated union in .NET. Dispatch with `is` pattern matching:\n   ```csharp\n   if (cell == null)                       { /* empty */ }\n   else if (cell is string s)              { /* plain text */ }\n   else if (cell is TRichString rs)        { /* rich text */ }\n   else if (cell is double d)              { /* number (dates too!) */ }\n   else if (cell is bool b)                { /* boolean */ }\n   else if (cell is TFlxFormulaErrorValue) { /* #DIV/0 etc. */ }\n   else if (cell is TFormula f)            { /* formula */ }\n   ```\n4. **Never iterate with `ColCount`** — it scans the whole sheet. Use `ColCountInRow(row)` + `GetCellValueIndexed(row, colIdx, ref XF)` + `ColFromIndex(row, colIdx)` — this is sparse-aware and dramatically faster on real files.\n5. **Dates are `double`.** Excel stores dates as numbers with a date format. Cell returns `double`. Check the cell's XF number-format to know it's a date (or use `TFlxNumberFormat.FormatValue` helpers).\n6. **Memory.** `XlsFile`, `FlexCelReport`, and the export classes hold the full workbook in memory. They are fully managed — GC handles cleanup. However, the export classes (`FlexCelPdfExport`, `FlexCelHtmlExport`, `FlexCelImgExport`) and `FlexCelReport` **implement `IDisposable`**; wrap them in `using`. `XlsFile` does **not** require `using`, but don't hold big workbooks as long-lived statics.\n7. **Use APIMate.** For anything Excel-specific (\"how do I add a data validation / a conditional format / a chart / a pivot table?\"), the canonical answer is: build it in Excel → open the file in **APIMate** (ships with FlexCel, also available for Linux and macOS) → copy the generated C# or VB.NET code. Tell the user this.\n8. **Native AOT** (.NET 9+): `XlsFile` and the exporters are fully supported. `FlexCelReport` uses reflection on your POCO types — annotate them with `[DynamicallyAccessedMembers(...)]` or reports fail silently after trimming. See `references/pitfalls.md`.\n\n## Quick-start recipes\n\nAll examples are C#. For VB.NET, translate syntactically — APIs are identical.\n\n### Recipe 1 — Create an Excel file\n\n```csharp\nusing System;\nusing System.IO;\nusing FlexCel.Core;\nusing FlexCel.XlsAdapter;\n\nclass Program\n{\n    static void Main()\n    {\n        // Empty workbook: 1 sheet, Excel-2019 default formatting.\n        var xls = new XlsFile(1, TExcelFileFormat.v2019, true);\n\n        xls.SetCellValue(1, 1, \"Hello from FlexCel!\");       // A1 text\n        xls.SetCellValue(2, 1, 7);                           // A2 number (stored as double)\n        xls.SetCellValue(3, 1, 11.3);                        // A3 number\n        xls.SetCellValue(4, 1, new TFormula(\"=Sum(A2:A3)\")); // A4 formula\n\n        xls.Save(Path.Combine(\n            Environment.GetFolderPath(Environment.SpecialFolder.Personal),\n            \"test.xlsx\"));\n    }\n}\n```\n\nKey points:\n- Indices are **1-based**: `(1, 1)` = `A1`.\n- File format is inferred from the extension (`.xlsx` → OOXML, `.xls` → BIFF8). Override via `xls.Save(stream, TFileFormats.Xlsx)` when saving to streams.\n- `SetCellValue(1, 1, \"7\")` writes a **string** `\"7\"`; `SetCellValue(1, 1, 7)` writes a **number** `7`. Type dispatch happens through method overloads.\n\n### Recipe 2 — Read an Excel file\n\n```csharp\nusing System;\nusing System.IO;\nusing FlexCel.Core;\nusing FlexCel.XlsAdapter;\n\nvoid ReadExcel(string path)\n{\n    var xls = new XlsFile(path);\n    xls.ActiveSheetByName = \"Sheet1\";   // or: xls.ActiveSheet = 1..xls.SheetCount\n\n    for (int row = 1; row <= xls.RowCount; row++)\n    {\n        // Use ColCountInRow, NOT ColCount — much faster. See performance guide.\n        for (int colIndex = 1; colIndex <= xls.ColCountInRow(row); colIndex++)\n        {\n            int XF = -1;\n            object cell = xls.GetCellValueIndexed(row, colIndex, ref XF);\n            var addr = new TCellAddress(row, xls.ColFromIndex(row, colIndex));\n\n            string kind =\n                cell == null                    ? \"empty\"\n              : cell is TRichString             ? \"rich string\"\n              : cell is string                  ? \"string\"\n              : cell is double                  ? \"number\"\n              : cell is bool                    ? \"bool\"\n              : cell is TFlxFormulaErrorValue   ? \"error\"\n              : cell is TFormula                ? \"formula\"\n              :                                   \"unknown\";\n\n            Console.WriteLine($\"Cell {addr.CellRef} {kind}: {cell}\");\n        }\n    }\n}\n```\n\nKey points:\n- **Iterate with `ColCountInRow` + `GetCellValueIndexed` + `ColFromIndex`**. The three together skip empty cells and give you the real column number of each non-empty cell.\n- `GetCellValueIndexed` takes XF **by `ref`** and writes the cell's format index into it.\n- `cell == null` means the cell is empty (never allocated). A cell containing an empty string is a different thing.\n\n### Recipe 3 — Export Excel to PDF\n\n```csharp\nusing FlexCel.Core;\nusing FlexCel.XlsAdapter;\nusing FlexCel.Render;\n\nvoid XlsxToPdf(string src, string dst)\n{\n    var xls = new XlsFile(src);\n    using var pdf = new FlexCelPdfExport(xls, true);  // true = allow overwrite\n    pdf.Export(dst);                                  // all visible sheets, honoring Excel page setup\n}\n```\n\nFor PDF/A, font subsetting, digital signatures, multi-workbook PDFs, or tuning fonts on Linux/Docker see `references/pdf-html-export.md`.\n\n### Recipe 4 — Run a report from a template\n\nAssume an Excel template `invoice-template.xlsx` already exists, with tags like `<#Customers.Name>` inside a named range `__Customers__` spanning the repeating row(s).\n\n```csharp\nusing System;\nusing System.Data;\nusing FlexCel.Core;\nusing FlexCel.XlsAdapter;\nusing FlexCel.Report;\n\nvoid RunReport(DataTable customers)\n{\n    using var report = new FlexCelReport(true);   // true = allow overwrite\n\n    // Supply data sources\n    report.AddTable(\"Customers\", customers);      // DataTable / DataSet / IEnumerable<T>\n\n    // Scalar values\n    report.SetValue(\"ReportDate\", DateTime.Now);\n    report.SetValue(\"CompanyName\", \"Acme Corp\");\n\n    report.Run(\"invoice-template.xlsx\", \"invoice-output.xlsx\");\n}\n```\n\n**AddTable overloads** (the most common):\n\n```csharp\nreport.AddTable(\"Customers\", customerList);          // IEnumerable<T> / List<T> / IQueryable<T>\nreport.AddTable(\"Customers\", customerDataTable);     // DataTable\nreport.AddTable(customerDataSet);                    // DataSet — each contained DataTable by name\nreport.AddTable(myCustomerList);                     // single-arg: band name inferred from type name\n```\n\n**To output directly to PDF** — run the report into a fresh `XlsFile`, then pipe that through `FlexCelPdfExport`:\n\n```csharp\nvar outXls = new XlsFile();\nreport.Run(\"template.xlsx\", outXls);\nusing var pdf = new FlexCelPdfExport(outXls, true);\npdf.Export(\"report.pdf\");\n```\n\nFor the full tag language and template-design conventions see `references/reports-cheatsheet.md`.\n\n## When to consult the references\n\nLoad a reference file only when the task actually needs it — keeps context lean for simple tasks.\n\n- **`references/api-cheatsheet.md`** — deeper `XlsFile` / `ExcelFile` usage: formatting, fonts, colors, merging, row/column sizing, comments, images, charts, data validation, protection, named ranges, `InsertAndCopyRange` / `DeleteRange` / `MoveRange`, sheet management, streams, recalc, virtual mode.\n- **`references/reports-cheatsheet.md`** — full tag reference, named-range conventions for bands, master-detail, config sheets, user functions, events.\n- **`references/pdf-html-export.md`** — `FlexCelPdfExport`, `FlexCelHtmlExport`, `FlexCelImgExport` options: PDF/A, font embedding, digital signing, HTML5, image embedding, multi-workbook PDFs.\n- **`references/pitfalls.md`** — extended gotchas, Native AOT specifics, Docker/Linux fonts, locale, barcodes, conditional formats, strict xlsx.\n\n## When you need authoritative detail\n\nThe cheatsheets cover the common path. For anything deeper, fetch from the public documentation source:\n\n- **Markdown source (raw):** `https://raw.githubusercontent.com/tmssoftware/TMS-FlexCel.NET-doc-src/main/<path>.md`\n  - Guides: `guides/api-developer-guide.md`, `guides/reports-developer-guide.md`, `guides/reports-tag-reference.md`, `guides/pdf-exporting-guide.md`, `guides/html-exporting-guide.md`, `guides/performance-guide.md`, `guides/multiplatform-guide.md`\n  - Tips: `tips/<topic>.md` (one file per tip — includes `native-aot.md`)\n  - API reference: `api/FlexCel.XlsAdapter/XlsFile/<MemberName>.md`, `api/FlexCel.Report/FlexCelReport/<MemberName>.md`, etc.\n- **Rendered docs:** `https://doc.tmssoftware.com/flexcel/net/index.html`\n- **Official sample repository (C# + VB.NET, desktop + mobile):** `https://github.com/tmssoftware/TMS-FlexCel.NET-demos`\n\nUse `WebFetch` on the raw markdown URL when you need to confirm a signature or pull an official example. Prefer the raw markdown over the rendered HTML.\n\n## Style expectations for generated code\n\n- Use `using` declarations / blocks for `FlexCelReport`, `FlexCelPdfExport`, `FlexCelHtmlExport`, `FlexCelImgExport`. They're `IDisposable`.\n- `XlsFile` does **not** implement `IDisposable`; don't wrap it in `using`. Let it go out of scope and GC will collect it.\n- Use 1-based literals explicitly (`SetCellValue(1, 1, ...)`) — never pretend indices are 0-based.\n- Use `is` pattern matching (or switch expressions on type) for `GetCellValue` results — don't cast blindly.\n- When providing PDF font folders, fall back gracefully: on Linux/macOS/Docker the fonts used by the workbook may not exist on the target. Use `FlexCelPdfExport.GetFontFolder` or `GetFontData` events.\n- For **Native AOT**: always annotate POCOs passed to `FlexCelReport.AddTable` with `[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicMethods)]`. Without it, trimming will silently strip property accessors.\n- Don't invent method names. If unsure, check the API markdown under `api/<namespace>/<class>/<member>.md` in the doc source, or tell the user to verify with APIMate.","tags":["flexcel","net","skills","tmssoftware","agent-skills","claude-code-skill","claude-code-skills","claude-skills"],"capabilities":["skill","source-tmssoftware","skill-flexcel-net","topic-agent-skills","topic-claude-code-skill","topic-claude-code-skills","topic-claude-skills"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tmssoftware/skills/flexcel-net","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tmssoftware/skills","source_repo":"https://github.com/tmssoftware/skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (13,842 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:27.858Z","embedding":null,"createdAt":"2026-04-29T07:00:08.772Z","updatedAt":"2026-05-18T19:07:27.858Z","lastSeenAt":"2026-05-18T19:07:27.858Z","tsv":"'-1':1023 '-2019':868 '/flexcel/net/index.html':1503 '/tmssoftware/tms-flexcel.net-demos':1513 '/tmssoftware/tms-flexcel.net-doc-src/main/':1473 '0':522,1592 '1':498,499,508,509,844,865,875,879,880,888,897,903,920,922,923,946,947,954,955,995,1000,1016,1581,1586,1587 '11.3':898 '2':524,887,968 '2.0':98 '3':555,896,1135 '4':623,902,1195 '4.6':91 '5':95,174,655 '6':689 '7':741,889,948,952,956,960 '8':797 '9':104,801 'a1':512,884,924 'a2':890,907 'a3':899,908 'a4':909 'access':438 'accessor':1657 'acm':1263 'activ':116 'actual':1362 'add':367,412,752 'addr':1032 'addr.cellref':1072 'addtabl':1268 'alloc':1123 'allow':1166,1245 'almost':361 'alreadi':1207 'also':780 'alway':1640 'android':211 'annot':816,1641 'answer':766 'anyth':745,1460 'aot':106,184,259,799,1438,1639 'api':225,249,328,348,840,1492,1667,1670 'api/flexcel.report/flexcelreport':1496 'api/flexcel.xlsadapter/xlsfile':1494 'apim':743,776,1683 'arg':1296 'asp.net':180,455 'assum':1202 'authorit':1451 'autofit':161,431 'avail':781 'awar':648 'b':607 'back':1616 'band':1297,1408 'barcod':1443 'base':447,500,523,921,1582,1593 'biff8':935 'big':734 'blazor':178 'blind':1609 'block':1549 'bool':606,1059,1060 'boolean':608 'build':240,768 'c':7,44,55,789,835,1507 'calcul':325 'canon':765 'cast':1608 'caveat':108 'cell':132,167,243,245,574,579,587,595,604,611,618,668,673,1025,1041,1044,1049,1053,1057,1061,1065,1071,1074,1087,1100,1109,1115,1119,1125 'cell-by-cel':242 'chang':267 'chart':760,1384 'cheatsheet':1454 'check':671,1665 'class':529,696,713,858 'cleanup':709 'code':10,58,124,222,247,286,419,792,1545 'colcount':627,1007 'colcountinrow':634,1005,1079 'colfromindex':641,1081 'colidx':638,643 'colindex':1015,1017,1020,1028,1038 'collect':1578 'color':1378 'column':504,1093 'combin':331 'comment':1382 'common':1272,1457 'compani':298 'companion':398 'companynam':1262 'compon':404,452 'condit':757,1444 'config':1412 'configur':371 'confirm':1525 'console.writeline':1070 'consult':1351 'contain':1126,1288 'context':1366 'control':253 'convent':1346,1406 'copi':786 'core':93,172,181,483 'corp':1264 'cover':1455 'creat':136,215,319,845 'critic':492 'csharp':572,849,973,1140,1223,1273,1320 'custom':1217,1237,1251,1252,1275,1281 'customerdataset':1285 'customerdatat':1282 'customerlist':1276 'customers.name':1212 'd':598 'data':30,82,147,268,289,754,1248,1385 'data-driven':29,81 'databas':306 'dataset':1254,1286 'datat':1236,1253,1283,1289 'date':600,656,661,666,684 'datetime.now':1260 'decid':223 'declar':1548 'deeper':1372,1461 'default':869 'deleterang':1391 'design':255,1345 'desktop':1509 'detail':1411,1452 'differ':1132 'digit':1181,1425 'direct':1305 'discrimin':563 'dispatch':567,962 'div/0':614 'doc':392,1500,1674 'doc.tmssoftware.com':1502 'doc.tmssoftware.com/flexcel/net/index.html':1501 'docker/linux':1440 'document':1466 'done':491 'dotnet':366 'doubl':597,658,670,894,1055 'dramat':650 'driven':31,83 'dst':1152,1169 'dynamicallyaccessedmemb':819,1647 'dynamicallyaccessedmembertypes.publicmethods':1649 'dynamicallyaccessedmembertypes.publicproperties':1648 'edit':281,463 'els':577,585,593,602,609,616 'embed':1424,1429 'empti':576,863,1043,1086,1099,1121,1128 'entri':475 'environment.getfolderpath':913 'environment.specialfolder.personal':914 'error':1064 'etc':615,1498 'event':1416,1636 'everi':496 'exampl':833,1532 'excel':17,26,69,127,140,149,153,189,216,274,285,321,659,747,771,847,867,971,1137,1174,1204 'excel-specif':746 'excel/xlsx':42 'excelfil':1374 'except':519 'exist':237,1208,1628 'expect':1542 'explicit':1584 'export':16,73,151,350,430,695,712,805,1136 'express':1600 'extend':1435 'extens':931 'extract':316 'f':9,57,621 'fail':822 'fall':1615 'faster':651,1009 'feed':384,395 'fetch':1462 'file':20,72,128,141,154,217,238,241,314,322,654,774,848,925,972,1357,1487 'fit':226 'flexcel':2,34,47,61,185,376,418,779,883 'flexcel-net':1 'flexcel.aspnet':458 'flexcel.core':421,855,979,1142,1229 'flexcel.pdf':444 'flexcel.render':433,1146 'flexcel.report':276,450,1233 'flexcel.winforms':454 'flexcel.xlsadapter':250,426,857,981,1144,1231 'flexcelhtmlexport':715,1419,1553 'flexcelimgexport':716,1420,1554 'flexcelpdfexport':540,714,1162,1319,1332,1418,1552 'flexcelpdfexport.getfontfolder':1633 'flexcelrepor':46 'flexcelreport':273,539,692,718,809,1242,1551 'flexcelreport.addtable':1645 'folder':1614 'font':1179,1189,1377,1423,1441,1613,1621 'format':135,301,514,667,678,758,870,926,1111,1376,1445 'formula':134,622,910,1068 'framework':90,170 'fresh':1313 'full':251,699,1339,1400 'fulli':202,705,807 'function':363,1415 'gc':707,1576 'generat':21,80,143,294,788,1544 'getcellvalu':556,1604 'getcellvalueindex':636,1080,1101 'getfontdata':1635 'github.com':1512 'github.com/tmssoftware/tms-flexcel.net-demos':1511 'give':1089 'go':1571 'gotcha':493,1436 'grace':1617 'grid':403 'guid':1012,1475 'guides/api-developer-guide.md':1476 'guides/html-exporting-guide.md':1480 'guides/installation-guide.md':389 'guides/multiplatform-guide.md':1482 'guides/pdf-exporting-guide.md':1479 'guides/performance-guide.md':1481 'guides/reports-developer-guide.md':1477 'guides/reports-tag-reference.md':1478 'handl':708 'happen':963 'hello':881 'help':53 'helper':456,688 'hold':697,733 'honor':1173 'host':378 'howev':541,710 'html':24,76,157,428,1540 'html5':1427 'ident':842 'idispos':720,1557,1562 'ienumer':1255,1277 'imag':78,160,429,1383,1428 'implement':719,1561 'in-memori':339 'includ':41,360,1490 'index':501,1112 'indic':515,918,1590 'infer':928,1299 'insertandcopyrang':1390 'insid':1213 'instal':193,364 'int':998,1014,1021 'integr':479 'interop':201 'invent':1660 'invoice-output.xlsx':1267 'invoice-template.xlsx':1206,1266 'io':209 'iquery':1279 'iter':625,1077 'keep':546,1365 'key':916,1075 'kind':1040,1073 'know':680 'languag':1341 'layout':272 'lean':1367 'legaci':406 'let':1569 'level':436 'librari':65 'like':1211 'linux':207,783 'linux/docker':1191 'linux/macos/docker':1619 'list':1278 'liter':1583 'live':739 'load':1354 'local':1442 'logo':299 'long':738 'long-liv':737 'low':435 'low-level':434 'machin':197 'maco':208,785 'main':862 'manag':203,706,1394 'mani':302 'manipul':14,344 'markdown':1468,1519,1536,1668 'master':1410 'master-detail':1409 'match':571,1597 'maui':100,176 'may':1626 'md':1474,1485,1495,1497,1671 'mean':1117 'measur':166 'memori':341,690,702 'merg':146,1379 'method':965,1661 'mobil':1510 'mode':1398 'modifi':138 'moverang':1392 'much':1008 'multi':1184,1431 'multi-workbook':1183,1430 'mycustomerlist':1293 'name':530,1215,1291,1298,1302,1388,1404,1662 'named-rang':1403 'namespac':355,411 'nativ':105,183,258,798,1437,1638 'native-aot-saf':257 'native-aot.md':1491 'need':410,1363,1450,1523 'net':3,37,50,89,92,94,96,99,103,123,169,171,173,175,464,536,566,800 'never':624,1122,1588 'new':873,904,988,1033,1155,1161,1241,1323,1331 'nice':300 'non':278,1098 'non-empti':1097 'non-programm':277 'note':459 'nuget':357,374,383 'nuget.org':387 'null':575,1042,1116 'number':599,663,677,891,900,959,1056,1094 'number-format':676 'object':558,1024 'offic':192 'offici':1504,1531 'ole/com':199 'one':219,1486 'ooxml':933 'open':772 'option':397,1421 'output':1304 'outxl':1322,1327,1333 'overload':966,1269 'overrid':936 'overwrit':1167,1246 'packag':353,358,368,399,484 'page':1175 'pass':1643 'path':985,990,1458 'path.combine':912 'pattern':570,1596 'pdf':22,75,156,352,427,437,442,1139,1160,1307,1330,1612 'pdf.export':1168,1335 'pdf/a':440,1178,1422 'pdfs':1186,1433 'per':413,1488 'perform':1011 'pick':218 'pipe':1316 'pivot':762 'plain':583 'platform':468,478 'platform-support':467 'poco':814,1642 'point':476,917,1076 'prefer':307,326,1533 'prefix':527 'pretend':1589 'preview':402 'produc':28,261,337 'program':859 'programm':279 'programmat':142,252 'properti':1656 'protect':1387 'provid':288,1611 'public':1465 'pull':1529 'quick':829 'quick-start':828 'rang':1216,1389,1405 'rare':409 'raw':1470,1518,1535 'raw.githubusercontent.com':1472 'raw.githubusercontent.com/tmssoftware/tms-flexcel.net-doc-src/main/':1471 're':490,1556 'read':12,125,236,312,422,494,969 'readexcel':983 'real':653,1092 'recalc':1396 'recip':831,843,967,1134,1194 'ref':639,1029,1105 'refer':356,486,1353,1356,1402,1493 'references/api-cheatsheet.md':1371 'references/pdf-html-export.md':1193,1417 'references/pitfalls.md':827,1434 'references/reports-cheatsheet.md':1348,1399 'reflect':811 'regist':472 'render':163,1499,1539 'repeat':265,1220 'report':32,84,144,264,296,308,335,448,821,1198,1240,1310 'report.addtable':1250,1274,1280,1284,1292 'report.pdf':1336 'report.run':1265,1325 'report.setvalue':1258,1261 'reportd':1259 'repositori':1506 'requir':188,256,728 'result':1605 'return':557,669 'rich':591,1047 'row':303,503,635,637,642,999,1001,1003,1019,1027,1035,1037,1221 'row/column':1380 'rows/columns':162 'rs':590 'run':333,1196,1308 'runreport':1235 'safe':260 'sampl':1505 'save':942 'say':293,311 'scalar':1256 'scan':629 'scope':1574 'see':109,388,826,1010,1192,1347 'server':179 'setcellvalu':945,953,1585 'setup':396,1176 'sheet':164,506,632,866,1172,1393,1413 'sheet1':992 'ship':480,777 'sign':439,1426 'signatur':1182,1527 'silent':823,1654 'simpl':1369 'singl':518,1295 'single-arg':1294 'size':1381 'skill':52,115 'skill-flexcel-net' 'skip':1085 'softwar':39,64 'sourc':375,393,1249,1467,1469,1675 'source-tmssoftware' 'span':1218 'spars':647 'sparse-awar':646 'specif':748,1439 'src':1150,1157 'standalon':441 'standard':97 'start':830 'static':740,860 'store':660,892 'stream':939,944,1395 'strict':1446 'string':581,951,984,1039,1048,1051,1052,1129,1149,1151 'strip':1655 'struct':545 'studio':35,48 'style':271,1541 'subset':1180 'sum':906 'suppli':1247 'support':469,808 'svg':77,158 'switch':1599 'syntact':839 'system':851,975,1225 'system.data':1227 'system.io':853,977 'tabl':763 'tag':1210,1340,1401 'take':1102 'target':168,196,1631 'task':228,414,415,1361,1370 'tcelladdress':551,1034 'tcellvalu':562 'tell':793,1677 'templat':86,150,275,283,446,1201,1205,1344 'template-bas':445 'template-design':1343 'template.xlsx':1326 'test.xlsx':915 'texcelfileformat':553 'texcelfileformat.v2019':876 'text':584,592,885 'tfileformats.xlsx':940 'tflexcelpdfexport':535 'tflexcelreport':534 'tflxformat':550 'tflxformulaerrorvalu':554,613,1063 'tflxnumberformat.formatvalue':687 'tformula':549,620,905,1067 'thing':1133 'three':1083 'time':497 'tip':1483,1484,1489 'tms':38,63,373,380 'tms.flexcel':359,369,487 'tms.flexcel.webforms':405 'tms.flexcel.winforms':400 'togeth':1084 'topic-agent-skills' 'topic-claude-code-skill' 'topic-claude-code-skills' 'topic-claude-skills' 'translat':838 'trichstr':552,589,1046 'trigger':40 'trim':825,1652 'true':877,1164,1165,1243,1244,1334 'tune':1188 'two':212 'txlsfile':533 'type':544,815,961,1301,1602 'union':564 'unit/assembly':470 'unknown':1069 'unlik':460 'unsur':1664 'url':1520 'usag':1375 'use':4,60,113,234,416,420,425,432,443,449,453,457,633,686,724,729,742,810,850,852,854,856,974,976,978,980,1004,1141,1143,1145,1158,1224,1226,1228,1230,1232,1238,1328,1514,1546,1547,1568,1580,1594,1622,1632 'user':119,231,292,795,1414,1679 'valid':755,1386 'valu':133,317,543,1257 'value-typ':542 'var':871,986,1031,1153,1159,1239,1321,1329 'vb.net':8,56,791,837,1508 'vcl':462,531 'verifi':1681 'via':365,937 'viewer':408 'virtual':1397 'visibl':1171 'void':861,982,1147,1234 'want':120,232 'way':213 'webfetch':1515 'webform':407 'whenev':117 'whole':631 'window':206 'winform':401,451 'without':1650 'work':67,87,204 'workbook':700,735,864,1185,1432,1625 'wrap':721,1565 'write':6,13,54,221,423,510,949,957,1107 'xamarin':101,177 'xf':513,640,675,1022,1030,1103 'xls':19,71,131,872,934,987,1154,1163 'xls.activesheet':994 'xls.activesheetbyname':991 'xls.colcountinrow':1018 'xls.colfromindex':1036 'xls.getcellvalueindexed':1026 'xls.rowcount':1002 'xls.save':911,938 'xls.setcellvalue':507,878,886,895,901 'xls.sheetcount':996 'xls/xlsx':424 'xlsfile':45,248,342,538,691,725,802,874,989,1156,1314,1324,1373,1558 'xlsx':18,70,129,932,1447 'xlsxtopdf':1148","prices":[{"id":"85a8b0c5-e854-4f6f-853a-6511fd9f7f51","listingId":"147b78ff-44d3-4da1-b5d5-525bfecbbd27","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tmssoftware","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-29T07:00:08.772Z"}],"sources":[{"listingId":"147b78ff-44d3-4da1-b5d5-525bfecbbd27","source":"github","sourceId":"tmssoftware/skills/flexcel-net","sourceUrl":"https://github.com/tmssoftware/skills/tree/main/skills/flexcel-net","isPrimary":false,"firstSeenAt":"2026-04-29T07:00:08.772Z","lastSeenAt":"2026-05-18T19:07:27.858Z"}],"details":{"listingId":"147b78ff-44d3-4da1-b5d5-525bfecbbd27","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tmssoftware","slug":"flexcel-net","github":{"repo":"tmssoftware/skills","stars":12,"topics":["agent-skills","claude-code-skill","claude-code-skills","claude-skills"],"license":null,"html_url":"https://github.com/tmssoftware/skills","pushed_at":"2026-04-15T21:13:22Z","description":"Official collection of agent skills from TMS Software","skill_md_sha":"163a6a40bd98227ddc1e649c304f85028aca74ba","skill_md_path":"skills/flexcel-net/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tmssoftware/skills/tree/main/skills/flexcel-net"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"flexcel-net","description":"Use when writing C# / VB.NET / F# code that reads, writes, manipulates, or exports Excel (.xlsx / .xls) files, generates PDF or HTML from Excel, or produces data-driven reports with FlexCel Studio for .NET (TMS Software). Triggers include Excel/xlsx from C#, XlsFile, FlexCelReport, FlexCelPdfExport, FlexCelHtmlExport, FlexCelImgExport, ExcelFile, PdfWriter, .NET Excel export, ASP.NET Excel generation, .NET MAUI Excel, Native AOT + Excel, and Excel reporting from .NET."},"skills_sh_url":"https://skills.sh/tmssoftware/skills/flexcel-net"},"updatedAt":"2026-05-18T19:07:27.858Z"}}