From 62f30b65e243fa6fa110cdc3ec4bcc8e71aa4fd5 Mon Sep 17 00:00:00 2001 From: shps951023 Date: Sun, 31 Aug 2025 12:55:29 +0800 Subject: [PATCH] Update project structure and restore core functionality - Changed target framework in `MiniExcel.Benchmarks.csproj` from `net10.0` to `net9.0`. - Removed `net10.0` from target frameworks in `Directory.Build.props`. - Updated copyright notice in `Directory.Build.props`. - Added `icon.png` and `README.md` to packaging in `Directory.Build.props`. - Reintroduced attribute classes in `Attributes.cs` for Excel columns. - Added `IConfiguration` interface and implementations in `Configuration.cs`. - Defined `ExcelType` enum in `ExcelType.cs`. - Restored `ExcelTypeHelper.cs` for determining Excel types. - Reintroduced core functionality in `MiniExcel.cs` for Excel file operations. - Added new `README.md` with project details and instructions. --- .../MiniExcel.Benchmarks.csproj | 2 +- src/Directory.Build.props | 10 +- src/MiniExcel/{Legacy => }/Attributes.cs | 0 src/MiniExcel/{Legacy => }/Configuration.cs | 0 src/MiniExcel/{Legacy => }/ExcelType.cs | 0 src/MiniExcel/{Legacy => }/ExcelTypeHelper.cs | 0 src/MiniExcel/{Legacy => }/MiniExcel.cs | 0 src/README.md | 101 ++++++++++++++++++ 8 files changed, 109 insertions(+), 4 deletions(-) rename src/MiniExcel/{Legacy => }/Attributes.cs (100%) rename src/MiniExcel/{Legacy => }/Configuration.cs (100%) rename src/MiniExcel/{Legacy => }/ExcelType.cs (100%) rename src/MiniExcel/{Legacy => }/ExcelTypeHelper.cs (100%) rename src/MiniExcel/{Legacy => }/MiniExcel.cs (100%) create mode 100644 src/README.md diff --git a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj index f2dcfd17..96054b79 100644 --- a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj +++ b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj @@ -2,7 +2,7 @@ Exe - net8.0;net10.0 + net8.0;net9.0 enable enable latest diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 7c777d29..d3036196 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,7 +1,7 @@ - netstandard2.0;net8.0;net10.0 + netstandard2.0;net8.0 2.0.0-preview.1 enable enable @@ -18,9 +18,8 @@ Issues : https://github.com/mini-software/MiniExcel/issues Todo : https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true Wei Lin, Michele Bastione, PING-HSIU SHIH, Amos(izanhzh), eynarhaji, Mini-Software team - Wei Lin, 2021 onwards + Mini-Software, 2021 onwards en - https://raw.githubusercontent.com/mini-software/MiniExcel/master/LICENSE Apache-2.0 https://github.com/mini-software/MiniExcel https://github.com/mini-software/MiniExcel @@ -38,4 +37,9 @@ ..\miniexcel.snk + + + + + \ No newline at end of file diff --git a/src/MiniExcel/Legacy/Attributes.cs b/src/MiniExcel/Attributes.cs similarity index 100% rename from src/MiniExcel/Legacy/Attributes.cs rename to src/MiniExcel/Attributes.cs diff --git a/src/MiniExcel/Legacy/Configuration.cs b/src/MiniExcel/Configuration.cs similarity index 100% rename from src/MiniExcel/Legacy/Configuration.cs rename to src/MiniExcel/Configuration.cs diff --git a/src/MiniExcel/Legacy/ExcelType.cs b/src/MiniExcel/ExcelType.cs similarity index 100% rename from src/MiniExcel/Legacy/ExcelType.cs rename to src/MiniExcel/ExcelType.cs diff --git a/src/MiniExcel/Legacy/ExcelTypeHelper.cs b/src/MiniExcel/ExcelTypeHelper.cs similarity index 100% rename from src/MiniExcel/Legacy/ExcelTypeHelper.cs rename to src/MiniExcel/ExcelTypeHelper.cs diff --git a/src/MiniExcel/Legacy/MiniExcel.cs b/src/MiniExcel/MiniExcel.cs similarity index 100% rename from src/MiniExcel/Legacy/MiniExcel.cs rename to src/MiniExcel/MiniExcel.cs diff --git a/src/README.md b/src/README.md new file mode 100644 index 00000000..6d9fb9f5 --- /dev/null +++ b/src/README.md @@ -0,0 +1,101 @@ + +This project is part of the [.NET Foundation](https://dotnetfoundation.org/projects/project-detail/miniexcel) and operates under their code of conduct. + +--- + +### Introduction + +MiniExcel is simple and efficient to avoid OOM's .NET processing Excel tool. + +At present, most popular frameworks need to load all the data into the memory to facilitate operation, but it will cause memory consumption problems. MiniExcel tries to use algorithm from a stream to reduce the original 1000 MB occupation to a few MB to avoid OOM(out of memory). + +![image](https://user-images.githubusercontent.com/12729184/113086657-ab8bd000-9214-11eb-9563-c970ac1ee35e.png) + + +### Features + +- Low memory consumption, avoid OOM (out of memory) and full GC +- Supports real time operation of each row of data +- Supports LINQ deferred execution, it can do low-consumption, fast paging and other complex queries +- Lightweight, without Microsoft Office installed, no COM+, DLL size is less than 400KB +- Easy API style to read/write/fill excel + +### Get Started + +- [Import/Query Excel](#getstart1) + +- [Export/Create Excel](#getstart2) + +- [Excel Template](#getstart3) + +- [Excel Column Name/Index/Ignore Attribute](#getstart4) + +- [Examples](#getstart5) + + + +### Installation + +You can install the package [from NuGet](https://www.nuget.org/packages/MiniExcel) + +### Release Notes + +Please Check [Release Notes](docs) + +### TODO + +Please Check [TODO](https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true) + +### Performance + +The code for the benchmarks can be found in [MiniExcel.Benchmarks](https://github.com/mini-software/MiniExcel/tree/master/benchmarks/MiniExcel.Benchmarks). +To run all the benchmarks use: + +```bash +dotnet run -project .\benchmarks\MiniExcel.Benchmarks -c Release -f net9.0 -filter * --join +``` + +Hardware and settings used are the following: +``` +BenchmarkDotNet v0.15.0, Linux Ubuntu 24.04.2 LTS (Noble Numbat) +AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores +.NET SDK 9.0.300 + [Host] : .NET 9.0.5 (9.0.525.21509), X64 RyuJIT AVX2 + ShortRun : .NET 9.0.5 (9.0.525.21509), X64 RyuJIT AVX2 +``` + +#### Import/Query Excel + +The file used to test performance is [**Test1,000,000x10.xlsx**](https://github.com/mini-software/MiniExcel/tree/master/benchmarks/MiniExcel.Benchmarks/Test1%2C000%2C000x10.xlsx), a 32MB document containing 1,000,000 rows * 10 columns whose cells are filled with the string "HelloWorld". + +| Method | Mean | StdDev | Error | Gen0 | Gen1 | Gen2 | Allocated | +|--------------------------------------|-----------------:|---------------:|-----------------:|------------:|------------:|----------:|--------------:| +| 'MiniExcel QueryFirst' | 63.70 μs | 0.337 μs | 6.144 μs | 2.9297 | 2.7669 | - | 49.67 KB | +| 'ExcelDataReader QueryFirst' | 5,010,679.51 μs | 53,245.186 μs | 971,390.400 μs | 105000.0000 | 333.3333 | - | 1717272.56 KB | +| 'MiniExcel Query' | 9,172,286.91 μs | 12,805.326 μs | 233,616.824 μs | 448500.0000 | 4666.6667 | - | 7327883.36 KB | +| 'ExcelDataReader Query' | 10,609,617.09 μs | 29,055.953 μs | 530,088.745 μs | 275666.6667 | 68666.6667 | - | 4504691.87 KB | +| 'Epplus QueryFirst' | 13,770,656.24 μs | 45,909.809 μs | 837,565.827 μs | 174333.3333 | 88833.3333 | 4333.3333 | 3700587.76 KB | +| 'Epplus Query' | 19,257,306.83 μs | 63,117.956 μs | 1,151,506.486 μs | 452333.3333 | 90500.0000 | 5333.3333 | 8223933.16 KB | +| 'ClosedXml Query' | 31,070,263.83 μs | 342,973.671 μs | 6,257,116.502 μs | 401666.6667 | 104166.6667 | 3333.3333 | 6822559.68 KB | +| 'ClosedXml QueryFirst' | 31,141,877.48 μs | 21,006.538 μs | 383,237.459 μs | 402166.6667 | 104833.3333 | 3833.3333 | 6738357.8 KB | +| 'OpenXmlSDK QueryFirst' | 31,750,686.63 μs | 263,328.569 μs | 4,804,093.357 μs | 374666.6667 | 374500.0000 | 3166.6667 | 6069266.96 KB | +| 'OpenXmlSDK Query' | 32,919,119.46 μs | 411,395.682 μs | 7,505,388.691 μs | 374666.6667 | 374500.0000 | 3166.6667 | 6078467.83 KB | + + +#### Export/Create Excel + +Logic: create a total of 10,000,000 "HelloWorld" cells Excel document + +| Method | Mean | StdDev | Error | Gen0 | Gen1 | Gen2 | Allocated | +|----------------------------------------------|---------:|---------:|---------:|------------:|------------:|----------:|----------:| +| 'MiniExcel Create Xlsx' | 4.427 s | 0.0056 s | 0.1023 s | 251666.6667 | 1833.3333 | 1666.6667 | 3.92 GB | +| 'OpenXmlSdk Create Xlsx by DOM mode' | 22.729 s | 0.1226 s | 2.2374 s | 307000.0000 | 306833.3333 | 3833.3333 | 6.22 GB | +| 'ClosedXml Create Xlsx' | 22.851 s | 0.0190 s | 0.3473 s | 195500.0000 | 54500.0000 | 4166.6667 | 4.48 GB | +| 'Epplus Create Xlsx' | 23.027 s | 0.0088 s | 0.1596 s | 89000.0000 | 17500.0000 | 6000.0000 | 2.51 GB | + +Warning: these results may be outdated. You can find the benchmarks for the latest release [here](https://github.com/mini-software/MiniExcel/tree/master/benchmarks/results). + + +### Documents + +https://github.com/mini-software/MiniExcel