# amirmahdiyar/exceler architecture

> Architecture diagram of the GitHub repository amirmahdiyar/exceler, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/amirmahdiyar/exceler
- Repository: https://github.com/amirmahdiyar/exceler

## Overview

Exceler is a .NET spreadsheet import/export library. Applications configure typed profiles and register services, then pass workbook streams to import rows lazily (or in chunks) through parsing, validation, and processing, or export model streams through a selected writer engine. The OpenXML engine streams workbook output and supports styling and dropdown validation sheets; EPPlus provides an alternative DOM writer and backs reading. The README also documents async processors, converters, RTL, and EF Core streaming extensions. Some capabilities are documented but their implementation paths were not sampled.

Main entry points: [`src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs) (OpenXML engine), [`src/Exceler/Core/DefaultReader.cs`](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultReader.cs) (Default reader), [`src/Exceler/Core/DefaultWriter.cs`](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultWriter.cs) (Default writer), [`src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs`](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs) (Service registration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Configuration &amp; registration"]
  node_profile["Typed profiles<br/>[ExcelProfile.cs]"]
  node_columns["Column mapping<br/>[ColumnBuilder.cs]"]
  node_styles["Style rules<br/>[ColumnStyle.cs]"]
  node_di["Service registration"]
end

subgraph group_import["Spreadsheet import"]
  node_reader["Default reader<br/>[DefaultReader.cs]"]
  node_readcontext["Row context<br/>[ReadContext.cs]"]
  node_parse["Row parsing<br/>[ParseHandler.cs]"]
  node_validate["Row validation<br/>[ValidateHandler.cs]"]
  node_process["Domain processing<br/>[ProcessHandler.cs]"]
  node_results["Row results<br/>[ExcelRowResult.cs]"]
  node_converter["Safe conversion<br/>[SafeConverter.cs]"]
end

subgraph group_export["Spreadsheet export"]
  node_extensions["Export extensions"]
  node_writer["Default writer<br/>[DefaultWriter.cs]"]
  node_writecontext["Write context<br/>[WriteContext.cs]"]
  node_writehandlers["Write handlers"]
end

subgraph group_engines["Workbook engines"]
  node_openxml["OpenXML engine"]
  node_streamer["Row streaming"]
  node_package["Package assembly"]
  node_coordinator["Worksheet coordination"]
  node_stylemanager["Style compilation"]
  node_validationdata["Dropdown reference sheet"]
  node_epplus["EPPlus writer"]
end

node_app(("Application"))
node_excel["Excel workbook"]

node_app -.->|"registers"| node_di
node_app -.->|"configures"| node_profile
node_di -->|"registers"| node_reader
node_di -->|"selects"| node_openxml
node_di -->|"selects"| node_epplus
node_profile -->|"builds"| node_columns
node_columns -->|"configures"| node_styles
node_reader -->|"resolves"| node_profile
node_reader -->|"creates"| node_readcontext
node_reader -->|"starts chain"| node_parse
node_parse -->|"dispatches"| node_validate
node_validate -->|"dispatches"| node_process
node_parse -->|"uses"| node_readcontext
node_validate -->|"uses"| node_readcontext
node_process -->|"uses"| node_readcontext
node_reader -->|"yields"| node_results
node_reader -.->|"converts values"| node_converter
node_app -.->|"imports workbook"| node_reader
node_app -.->|"streams data"| node_extensions
node_extensions -->|"delegates"| node_writer
node_writer -->|"creates"| node_writecontext
node_writer -->|"runs"| node_writehandlers
node_writehandlers -->|"uses"| node_writecontext
node_writer -.->|"writes workbook"| node_excel
node_openxml -->|"compiles styles"| node_stylemanager
node_openxml -->|"creates streamer"| node_streamer
node_openxml -->|"builds package"| node_package
node_openxml -->|"writes worksheet"| node_coordinator
node_openxml -->|"writes references"| node_validationdata
node_openxml -->|"returns bytes"| node_excel
node_epplus -->|"delegates"| node_writer

click node_profile "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ExcelProfile.cs"
click node_columns "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ColumnBuilder.cs"
click node_styles "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ColumnStyle.cs"
click node_di "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs"
click node_reader "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultReader.cs"
click node_readcontext "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/ReadContext.cs"
click node_parse "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ParseHandler.cs"
click node_validate "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ValidateHandler.cs"
click node_process "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ProcessHandler.cs"
click node_results "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Abstractions/ExcelRowResult.cs"
click node_converter "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/Converter/SafeConverter.cs"
click node_extensions "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Extensions/ExcelerExtensions.cs"
click node_writer "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultWriter.cs"
click node_writecontext "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Write/WriteContext.cs"
click node_writehandlers "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Write/Handlers/DataWriterHandler.cs"
click node_openxml "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs"
click node_streamer "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlRowStreamer.cs"
click node_package "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlPackageBuilder.cs"
click node_coordinator "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlWorksheetCoordinator.cs"
click node_stylemanager "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlStyleManager.cs"
click node_validationdata "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlValidationReferenceSheetWriter.cs"
click node_epplus "https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/EPPlus/EPPlusWriterEngine.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_profile,node_columns,node_styles,node_di toneBlue
class node_reader,node_readcontext,node_parse,node_validate,node_process,node_results,node_converter toneAmber
class node_extensions,node_writer,node_writecontext,node_writehandlers toneMint
class node_openxml,node_streamer,node_package,node_coordinator,node_stylemanager,node_validationdata,node_epplus toneRose
class node_app,node_excel toneIndigo
```

## Components

### Configuration & registration

- [Typed profiles](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ExcelProfile.cs): `src/Exceler/Configuration/ExcelProfile.cs`
- [Column mapping](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ColumnBuilder.cs): `src/Exceler/Configuration/ColumnBuilder.cs`
- [Style rules](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Configuration/ColumnStyle.cs): `src/Exceler/Configuration/ColumnStyle.cs`
- [Service registration](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs): `src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs`

### Spreadsheet import

- [Default reader](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultReader.cs): `src/Exceler/Core/DefaultReader.cs`
- [Row context](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/ReadContext.cs): `src/Exceler/Pipeline/Read/ReadContext.cs`
- [Row parsing](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ParseHandler.cs): `src/Exceler/Pipeline/Read/Handlers/ParseHandler.cs`
- [Row validation](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ValidateHandler.cs): `src/Exceler/Pipeline/Read/Handlers/ValidateHandler.cs`
- [Domain processing](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Read/Handlers/ProcessHandler.cs): `src/Exceler/Pipeline/Read/Handlers/ProcessHandler.cs`
- [Row results](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Abstractions/ExcelRowResult.cs): `src/Exceler/Abstractions/ExcelRowResult.cs`
- [Safe conversion](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/Converter/SafeConverter.cs): `src/Exceler/Core/Converter/SafeConverter.cs`

### Spreadsheet export

- [Export extensions](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Extensions/ExcelerExtensions.cs): `src/Exceler/Extensions/ExcelerExtensions.cs`
- [Default writer](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/DefaultWriter.cs): `src/Exceler/Core/DefaultWriter.cs`
- [Write context](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Write/WriteContext.cs): `src/Exceler/Pipeline/Write/WriteContext.cs`
- [Write handlers](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Pipeline/Write/Handlers/DataWriterHandler.cs): `src/Exceler/Pipeline/Write/Handlers/DataWriterHandler.cs`

### Workbook engines

- [OpenXML engine](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs): `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`
- [Row streaming](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlRowStreamer.cs): `src/Exceler/Core/OpenXml/OpenXmlRowStreamer.cs`
- [Package assembly](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlPackageBuilder.cs): `src/Exceler/Core/OpenXml/OpenXmlPackageBuilder.cs`
- [Worksheet coordination](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlWorksheetCoordinator.cs): `src/Exceler/Core/OpenXml/OpenXmlWorksheetCoordinator.cs`
- [Style compilation](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlStyleManager.cs): `src/Exceler/Core/OpenXml/OpenXmlStyleManager.cs`
- [Dropdown reference sheet](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/OpenXml/OpenXmlValidationReferenceSheetWriter.cs): `src/Exceler/Core/OpenXml/OpenXmlValidationReferenceSheetWriter.cs`
- [EPPlus writer](https://github.com/amirmahdiyar/exceler/blob/main/src/Exceler/Core/EPPlus/EPPlusWriterEngine.cs): `src/Exceler/Core/EPPlus/EPPlusWriterEngine.cs`

### Other components

- **Application**
- **Excel workbook**

## Connections

- Application → Service registration: registers
- Application → Typed profiles: configures
- Service registration → Default reader: registers (evidence: `src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs`)
- Service registration → OpenXML engine: selects (evidence: `src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs`)
- Service registration → EPPlus writer: selects (evidence: `src/Exceler/DependencyInjection/ExcelerServiceCollectionExtensions.cs`)
- Typed profiles → Column mapping: builds (evidence: `src/Exceler/Configuration/ExcelProfile.cs`)
- Column mapping → Style rules: configures (evidence: `src/Exceler/Configuration/ColumnBuilder.cs`)
- Default reader → Typed profiles: resolves (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Default reader → Row context: creates (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Default reader → Row parsing: starts chain (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Row parsing → Row validation: dispatches (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Row validation → Domain processing: dispatches (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Row parsing → Row context: uses (evidence: `src/Exceler/Pipeline/Read/Handlers/ParseHandler.cs`)
- Row validation → Row context: uses (evidence: `src/Exceler/Pipeline/Read/Handlers/ValidateHandler.cs`)
- Domain processing → Row context: uses (evidence: `src/Exceler/Pipeline/Read/Handlers/ProcessHandler.cs`)
- Default reader → Row results: yields (evidence: `src/Exceler/Core/DefaultReader.cs`)
- Default reader → Safe conversion: converts values
- Application → Default reader: imports workbook
- Application → Export extensions: streams data
- Export extensions → Default writer: delegates (evidence: `src/Exceler/Extensions/ExcelerExtensions.cs`)
- Default writer → Write context: creates (evidence: `src/Exceler/Core/DefaultWriter.cs`)
- Default writer → Write handlers: runs (evidence: `src/Exceler/Core/DefaultWriter.cs`)
- Write handlers → Write context: uses (evidence: `src/Exceler/Pipeline/Write/Handlers/DataWriterHandler.cs`)
- Default writer → Excel workbook: writes workbook
- OpenXML engine → Style compilation: compiles styles (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- OpenXML engine → Row streaming: creates streamer (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- OpenXML engine → Package assembly: builds package (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- OpenXML engine → Worksheet coordination: writes worksheet (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- OpenXML engine → Dropdown reference sheet: writes references (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- OpenXML engine → Excel workbook: returns bytes (evidence: `src/Exceler/Core/OpenXml/OpenXmlWriterEngine.cs`)
- EPPlus writer → Default writer: delegates (evidence: `src/Exceler/Core/EPPlus/EPPlusWriterEngine.cs`)
