NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #2382 most downloaded on NuGet
Lightweight, fast and simple .NET processing tool for importing, exporting and templating spreadsheets.
Last release 1 months ago
22 Aug 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 55 of the last 60 stable releases
16 versions withdrawn
withdrawn after publishing
127 years old
130 releases · first in 1900
This release adds streaming XLSX/XLSM-to-Markdown conversion in two formats:
This release adds streaming XLSX/XLSM-to-Markdown conversion in two formats:
MarkdownFormat.Simple produces compact GitHub-Flavored Markdown tables.MarkdownFormat.LlmFriendly produces chunked Markdown with worksheet, range, row, column-address, and formula context for LLM and RAG workflows.It also adds a .NET 10 Blazor WebAssembly Browser Lab at https://mini-software.github.io/MiniExcel/ so workbooks can be converted locally in the browser, with a direct switch to the Rust WASM implementation.
Template rendering is also more reliable: formula cells and calcChain.xml are now regenerated correctly so Excel no longer rejects rendered workbooks containing static or $= formulas.
Download MiniExcel.1.46.0.nupkg or MiniExcel.1.46.0.snupkg from the Assets section below.
gh release download 1.46.0 \
--repo mini-software/MiniExcel \
--pattern "MiniExcel.1.46.0.*nupkg"Install the downloaded package from the local directory:
dotnet add package MiniExcel --version 1.46.0 --source .After publication to nuget.org, install normally with:
dotnet add package MiniExcel --version 1.46.0Full Changelog: 1.45.0...1.46.0
One column per quarter.
This release adds .NET Framework 4.6.1 as an explicit target framework to the library. This was done because projects targeting the full framework wou
This release adds .NET Framework 4.6.1 as an explicit target framework to the library.
This was done because projects targeting the full framework would install through NuGet the closest matching version to their compilation target, said version being .NET 4.5 instead of the preferred netstandard2.0. This had the most notable effect of IAsyncEnumerables not being supported as exportable data sources.
Full Changelog: 1.44.1...1.45.0
This release is a hotfix for an oversight that prevented numerical string values to be recognized as text by Excel when explicitly exported with the "
This release is a hotfix for an oversight that prevented numerical string values to be recognized as text by Excel when explicitly exported with the "@" format.
Full Changelog: 1.44.0...1.44.1
Added proper numerical formatting for numbers, dates and times
This release addresses a long standing issue with regards to the MiniExcelFormatAttribute.
Prior to this update all values of the properties it was used upon would be converted to their string representation according to the specified format, instead of being exported as is and linked to a style element like the OpenXml specification suggests.
This prevented the results to be used as actual numerical values, e.g. in formulas, while still retaining their representation.
With this update the inconvenience has mostly been solved, as the following types will now be exported preserving their intended value:
int, long, double, decimal, etc...)DateTime, DateTimeOffset and DateOnlyTimeSpan and TimeOnlyFull Changelog: 1.43.1...1.44.0
Fixed headers being printed when using SaveAsAsync despite ExcelIgnore property set to true on DynamicExcelColumn by @michelebastione in #937
SaveAsAsync despite ExcelIgnore property set to true on DynamicExcelColumn by @michelebastione in #937Full Changelog: 1.43.0...1.43.1
This release brings the following features and fixes:
This release brings the following features and fixes:
RightToLeft parameter in OpenXmlConfiguration to make worksheets being displayed in a right-to-left layout when opened in Excel by @michelebastione in #935 (mirrors #927)ExcelHiddenAttribute that, when used to decorate a property, hides the mapped column in Excel by @michelebastione in #935 (mirrors #932)IAsyncEnumerator not being properly disposed in AsyncEnumerableWriteAdapter, leading to database connections not being released by @izanhzh and @michelebastione in #907 (mirrors #906)Dictionary or a DataTable by @michelebastione in #926 (mirrors #924)@group (like in some emails) to be mistakenly identified as template parameters by @michelebastione in #935 (mirrors #928)Full Changelog: 1.42.0...1.43.0
Nothing published for this version
Nothing published for this version
[New] Adding QuoteWhitespaces option to CsvConfiguration for adding double quotes to string containing whitespaces #790 (via @michelebastione )
[New] Adding QuoteWhitespaces option to CsvConfiguration for adding double quotes to string containing whitespaces #790 (via @michelebastione )
[Bug] Fixed bug that made the DynamicExcelColumn property "Ignore" not work when generating using an IDataReader as source #584 (via @michelebastione )
[Bug] v1.41.2 AddPicture not working #814 (via @shps951023)
[Bug] v1.41.1 AddPicture image max column and row are 2 cells #815 (via @shps951023)
[Bug] AddPicture get error same export file and second time. #817 (via @shps951023)
[New] Fixes enum behaviour and adds support for DescriptionAttribute when saving by template (via @michelebastione )
[New] Fixes enum behaviour and adds support for DescriptionAttribute when saving by template (via @michelebastione )
[Bug] SaveAsByTemplate - Excel Dimension Xml is null #459 (via @michelebastione )
[Other] Benchmarks refactoring and adaptation for making them run on Github Actions (#777) (via @michelebastione )
[Other] add deepwiki link and badge (via @isdaniel )
[New] Added sheet dimensions feature (#774) (via @michelebastione)
[New] Added sheet dimensions feature (#774) (via @michelebastione)
[Bug] Fix Saving by template introduces unintended value replication in each row #771 (via @shps951023)
[Bug] SaveAsByTemplate not working in > v1.39.0 for templates with columns past Z #773 (via @shps951023)
[Bug] Fix Excel style.xml duplicate numFmtId, system error: An item with the same key has already been added. #772 (via @shps951023)
[New] MiniExcel AddPicture #770 (via @shps951023)
[New] MiniExcel AddPicture #770 (via @shps951023)
[New] Add a configuration item in OpenXmlConfiguration to control writing the file path, enabling the corresponding cell to remain empty when importing images. (via @dotnetfans)
[New] Added support for DateOnly type in query mapping (via @michelebastione)
[New] Added support for DateOnly type in query mapping (via @michelebastione)
[New] Added StyleOptions class to OpenXmlConfiguration to allow more direct control over cell styles (#761) (via @michelebastione)
[Bug] Fix SaveAsByTemplate empty generated result (via @shps951023)
[Breaking Change] QueryRange doesn't support column name without row number #763 (via @michelebastione)
[New] Added exception to warn for sheet name too long (via @michelebastione)
[New] Added options for trimming column names and ignoring empty rows (via @michelebastione)
[New] Added IAsyncDisposable calls to ExcelOpenXmlsheetWriter.Async (via @michelebastione)
[New] Add conditional formatting support to Excel template (#745) (via @Notallthatevil)
[New] Add support for .NET 9.0 in project file (#744) (via @Notallthatevil)
[Bug] Bugfix of invalid cell values being mistakenly parsed as valid (via @michelebastione)
[Bug] Changing NotImplementedException assert in some tests to NotSupportedException (via @michelebastione)
[Bug] Moved sheet name check and fixed datetime formatting bug (via @michelebastione)
[OPT] Optimize max memory usage of SaveAsByTemplate #750 (#752) (via @shps951023)
[OPT] Optimization of SaveAsTemplate method (#749) (via @michelebastione)
[OPT] Removing DateTimeHelper.FromOADate and related code (via @michelebastione)
[OPT] Remove redundant property in csproj file (#748) (via @AZhrZho)
[Breaking Change] QueryRange doesn't support column name without row number #763 (via @michelebastione)
[New] Added support for Uri mapping (#726) (via @michelebastione)
[New] Added support for Uri mapping (#726) (via @michelebastione)
[New] Added insert sheet feature about ContentTypesXml processing (#728) (via @izanhzh)
[New] Supports the TimeSpan type, double.NaN exports invalid values, and when reading, it needs to be determined whether it is a double value. (via @wxn401)
[Bug] Fixed parsing bug in the conversion to double (#734) (via @michelebastione)
[Bug] Fixed configuration is not used when writing using IDataReader #735 (via @michelebastione)
[Bug] Fixed cancellation token not working for some async methods, enhanced export methods by returning number of rows, added active tab functionality, tests and code cleanup (#738) (via @michelebastione)
[New] feat(DynamicExcelColumn): make the CustomFormatter property more powerful (#715) (via @izanhzh)
[New] feat(DynamicExcelColumn): make the CustomFormatter property more powerful (#715) (via @izanhzh)
[New] feat(ExcelNumberFormat): extend the SectionType (#716) (via @izanhzh)
[New] feat(ExcelOpenXmlSheetWriter): adjust the location of the CustomFormatter execution (#722) (via @izanhzh)
[New] WriteEmptyStringAsNull implementation (#725) (via @jiangyi1985)
[Bug] Fix @group tag not working with certain IEnumerable types (#723) (via @JamesDSource)
[OPT] Optimized ContainsKey calls to TryGetValue (via @michelebastione)
[OPT] Changed Count() method calls to Count property (via @michelebastione)
[OPT] Materialized some IEnumerables using ToList (via @michelebastione)
[OPT] Added safe IDisposable cast to IEnumerator (via @michelebastione)
[OPT] Removed superfluous indentation and parenthesis (via @michelebastione)
[New] feat: support insert sheet (#709) (via @izanhzh)
[New] feat: support insert sheet (#709) (via @izanhzh)
[Bug] fix(MiniExcelDataReader): GetOrdinal always returns 0 (#711) (via @izanhzh)
[OPT] Generalize excel writing with a common write adapter and implement writing IAsyncEnumerable (#712) (via @Discolai , @izanhzh)
[New] feat(MiniExcelDataReaderBase): add asynchronous support (#706) (via @izanhzh , @ArgoZhang )
[New] Write auto column width (#695) (via @Discolai)
[New] Write auto column width (#695) (via @Discolai)
[New] Enhance IDataReader export with DynamicColumnFirst and Custom Formatting Delegate (#700) (via @IcedMango)
[Bug] If cellValue is string no matter that it contains only numbers will put the value as text. Preventing of losing leading zeroes (via @psyhlo)
[New] Formula attribute added to support in rows with dto or dynamic attributes (#679) (via @RaZer0k & Co-authored-by: Eulises Vargas )
[New] Formula attribute added to support in rows with dto or dynamic attributes (#679) (via @RaZer0k & Co-authored-by: Eulises Vargas )
[New] Async implementation of freezing top row (#684) (via @BaatenHannes )
[New] Upgrade to .NET 8.0 and refactor input value extraction (#681) (via @ramioh )
[Bug] Yield empty self-closing row tags as empty row during query. (#673) (via @aulickiDnv )
[New] Add MniExcelDataReaderBase class to simplify code (#651) (via @ArgoZhang )
[New] Add MniExcelDataReaderBase class to simplify code (#651) (via @ArgoZhang )
[OPT] perf csv insert (#653) (via @izanhzh )
[Bug] Fix dimension writing in FastMode (#659) (via @Discolai )
[Bug] Fix QueryAsDataTable can't read Excel with only header rows (#647) (via @Discolai )
[Bug] Fix Issue 632, refactor sheet styles (#640) (via @meld-cp)
[Bug] Fix Issue 632, refactor sheet styles (#640) (via @meld-cp)
[Bug] Fix StartSheetView for multiple selection (#641) (via @jiaguangli)
[New] Add freeze panes (#626) (via @meld-cp)
[New] Add freeze panes (#626) (via @meld-cp)
[New] Add DateTime Nullale support (via @jiaguangli)
[OPT] Reduce memory requirements when processing templates + template formulas (#638) (via @meld-cp)
[Bug] Fix problem with multi-line when using Query (#628) (via @meld-cp)
[Bug] Fix empty data reader issue. (#629) (via @duszekmestre)
[Bug] Fix Fields of type long cannot be set to text normally #627 (via @shps951023)
[New] Support Template formulas (#622) (via @meld-cp)
[New] Support Template formulas (#622) (via @meld-cp)
[New] Update DynamicConfiguration format (#595) (via @wangboshun)
[OPT] CSV enumeration and code reusage (#600) (via @duszekmestre)
[OPT] 1900 year DateTime correction #599 (via @duszekmestre)
[New] .NET5^ support image ReadOnlySpan (via @shps951023)
[New] .NET5^ support image ReadOnlySpan<byte> (via @shps951023)
[Bug] Remove bug with Portable.System.DateTimeOnly and only support DateOnly .NET6^ #594 (via @shps951023)
[New] Using DynamicConfiguration when writing data using DataTable (via @pszybiak)
[New] Using DynamicConfiguration when writing data using DataTable (via @pszybiak)
[New] Make System.DateOnly available as date in Excel (#576) (via @ofthelit)
[New] Allow ampersand in sheet names (via @ofthelit)
[OPT] Use true async processing for excel writer (#573) (via @duszekmestre)
[Bug] Fix nullable enumeration conversion failure #567) (via @PurplestViper)
[Bug] IEnumerable traversed twice #422 (via @Discolai)
[Bug] Fix Read empty string as null (via @pszybiak)
[Bug] Fix CSV Reader Query faild on specific xlsx file, throws ExcelColumnNotFoundException (via @AZhrZho)
[Bug] Fix DynamicExcelColumn configuration while saving IDictionary values (via @johannes-barta)
[Bug] Fix propInfo.Key missing (via @shps951023)
[Bug] Fix sharedStrings ref #549 (via @shps951023)
[Bug] DescriptionAttr null check(via @wulaoh)
[Bug] DescriptionAttr null check(via @wulaoh)
[Bug] Throw custom exception when CSV column not found #543 (via @pszybiak)
[Bug] SaveAsByTemplate rowInfo.IEnumerableMercell.Height null exception #553 (via @shps951023)
[New] Support automatic merge for same vertical cells between @merge and @endmerge tags (via @eynarhaji)
[New] Support automatic merge for same vertical cells between @merge and @endmerge tags (via @eynarhaji)
[New] Limit merge tagged columns with @mergelimit column. First merge limited column and then merge other columns accordingly. (via @eynarhaji)
[New] Support dynamic columns when generating sheet by IDataReader to change columns names & widths #514 (via @Laxynium)
[Bug] Fix R1C1 reference to A1 reference bug (via @ivan132)
[New] Support Fields #490 (via @jsgervais)
[New] Support Fields #490 (via @jsgervais)
[New] Support skipping null values when writing to Excel #497 (via @0MG-DEN)
[Bug] Fix calc chain.xml #491(via @ArgoZhang)
[Bug] Support some sheet /xl location error #494 (via @ArgoZhang)
[New] support if/else statements inside cell (via @eynarhaji)
[New] support grouped rows (via @eynarhaji)
[New] support grouped rows (via @eynarhaji)
[New] support automatic merge for same vertical cells (via @eynarhaji)
[New] support function to custom separator (via @hyzx86)
[New] support function to custom separator (via @hyzx86)
[New] support config for get sheet names (via @H4ad)
[New] support excel enum description string to enum #289 (via @KaneLeung)
[New] Remove .NET 5.0 support
[New] support excel enum description string to enum #289 (via @KaneLeung)
- [New] SaveAs support FastMode - [Bug] Fixed SaveAs OOM problem
[New] SaveAs support FastMode
[Bug] Fixed SaveAs OOM problem
Nothing published for this version
Nothing published for this version
[New] Support Assembly Strong Name Signature #450
[New] Support Assembly Strong Name Signature #450
[New] Support QueryRange (via @1ras1)
[Optimization] Reduce string memory allocation when template save #439 (via @cupsos)
[Optimization] Reduce string memory allocation when template save #439 (via @cupsos)
[Optimization] Remove dependency System.Memory #441 (via @ping9719)
[New] Support CSV Insert #I4X92G (via @shps951023)
[New] Support DateTimeOffset and ExcelFormat #430 (via @Lightczx , @shps951023 )
[New] Support DateTimeOffset and ExcelFormat #430 (via @Lightczx , @shps951023 )
[Optimization] SaveAs by datareader support dimension #231 (via @shps951023)
[OPT] Reduce memory allocation when using MemoryStream #427 (via @cupsos)
[OPT] Reduce memory allocation when using MemoryStream #427 (via @cupsos)
[OPT] Add System.Memory pacakge #427 (via @cupsos)
[OPT] Reduce memory allocation in GetImageFormat() #427 (via @cupsos)
[Bug] Fixed MiniExcel.SaveAsByTemplate error when value is List<Dictionary<string, object>> #413 (via @shps951023)
[OPT] Template save performance #425 (via @lileyzhao)
[New] Added DataReader AutoFilter toggle #402 #401 (via @Rollerss)
[New] Added DataReader AutoFilter toggle #402 #401 (via @Rollerss)
[New] SaveAs support empty sharedstring #405
[Bug] Using stream.SaveAs will close the Stream automatically when Specifying excelType
[Bug] Using stream.SaveAs will close the Stream automatically when Specifying excelType
[OPT] Optimize Query big file _IntMappingAlphabet.Count hot loading count (#400 via @CollapseNav)
[OPT] Export default buffersize from 1024 bytes -> 1024 * 512 bytes
[OPT] Export default buffersize from 1024 bytes -> 1024 * 512 bytes
[New] Export support custom buffersize
[New] SaveAsByTemplate number use InvariantCulture (via @psxbox)
[Bug] Fixed DynamicColumnAttribute Ignore, Index error #377
[New] DynamicColumnAttribute support Dictionary #370
[New] DynamicColumnAttribute support Dictionary #370
[Bug] Fixed MiniExcelDataReader SqlBulkCopy error (via @yfl8910)
[New] Support DynamicColumnAttribute (via @y976362357, @shps951023)
[New] Support DynamicColumnAttribute (via @y976362357, @shps951023)
[New] Support ExcelColumnAttribute to merge attributes (#357 via @Weilence)
[OPT] Only when necessary system will converts ExpandoObject type (#366 via @isdaniel)
[OPT] Optimize startsWith & EndWith performance (#365 via @isdaniel)
[New] Remove overdue ExcelNumberFormat Dependency #271
[Bug] Fixed QueryAsDataTable read big file will throw NotImplementedException #360
[New] Support SharingStrings disk cache (when this file size >= 5 MB), it can reduce reading 2GB SharingStrings only needs 1~13 MB memory #117(#346 vi
[New] Support SharingStrings disk cache (when this file size >= 5 MB), it can reduce reading 2GB SharingStrings only needs 1~13 MB memory #117(#346 via @Weilence) (via @shps951023)
[New] Async support cancellationToken (#350 via @isdaniel)
[New] SaveAs support overwriteFile parameter for enable/unable overwriting exist file #307
[Bug] SaveAs by datareader, sometime it will add one more autoFilter column #352
[Bug] Fixed multiple threads Async error 'The given key N was not present in the dictionary' #344
[Bug] Fixed multiple threads Async error 'The given key N was not present in the dictionary' #344
[Bug] Fixed when CultureInfo likes ff-Latn , datareader field type is datetime that will get error OA Date format #343
[Bug] Fiexd Query multiple same title will cause startcell to get wrong column index #I4YCLQ
[Bug] Fiexd Query multiple same title will cause startcell to get wrong column index #I4YCLQ
[OPT] Optimize Query algorithm
[Bug] Fiexd QueryAsync configulation not working #338
[Bug] Fiexd QueryAsync configulation not working #338
[Bug] Fixed QueryAsync not return dynamic type
[New] Query support strict open xml, thanks Weilence (Lowell) #335
[New] Query support strict open xml, thanks Weilence (Lowell) #335
[New] SaveAs use the configured CultureInfo to write format cell value, thanks 0xced (Cédric Luthi) #333
[New] SaveAsByTemplate default ignore template missing parameter key exception, OpenXmlConfiguration.IgnoreTemplateParameterMissing can control it. #I4WXFB
[New] SaveAsByTemplate will clean template string when parameter is IEnumerable and empty collection. #I4WM67
[New] Support System.ComponentModel.DisplayName's [DisplayName] as title #I4TXGT
[New] Support System.ComponentModel.DisplayName's [DisplayName] as title #I4TXGT
[Bug] Fix when CultureInfo like Czech will get invalid output with decimal numbers #331
Nothing published for this version
[New] Support GetReader method #328 #290 (Thanks 杨福来 Yang )
[Breaking Change] Remove Byte Array to base64 Converter
[New] SaveAs support to custom CultureInfo #316
[New] Query support to custom CultureInfo #316
[New] New efficiency byte array Converter #327
[Breaking Change] Remove Byte Array to base64 Converter
[Breaking Change] Replace ConvertByteArrayToBase64String by EnableConvertByteArray
[Bug] Fix SaveAs multiple sheet value error "Excel completed file level validation and repair. Some parts of this workbook may have been repaired or d
Your coding agent can read these notes before it upgrades. Set up the MCP server →