开放代码社区 › MiniExcel

MiniExcel

开发工具C#

该项目属于 .NET 基金会 ,并根据其 行为准则 运作。 您的 Star 、 赞助 和 购买视频 能帮助 MiniExcel 成长 1群 : 813100564 / 2群 : 579033769 / 3群 : 625362917 / 4群 : 907750429 MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 MiniExcel Rust MiniExcel 现已支持 Rust,提供更底层的控制和高效的 XLSX 处理。详见 MiniExcel-Rust 与 Rust/.NET 压力测试。

AI/机器学习Web后端前端工具部署/运维
作者:用户6868语言:C#更新:2026-10-27
仓库地址
https://gitee.com/dotnetchina/MiniExcel.git

前往原仓库

README

<div align="center">
<p><a href="https://www.nuget.org/packages/MiniExcel"><img src="https://img.shields.io/nuget/v/MiniExcel.svg" alt="NuGet"></a>  <a href="https://www.nuget.org/packages/MiniExcel"><img src="https://img.shields.io/nuget/dt/MiniExcel.svg" alt=""></a>
<a href="https://gitee.com/dotnetchina/MiniExcel"><img src="https://gitee.com/dotnetchina/MiniExcel/badge/star.svg" alt="star"></a> <a href="https://github.com/mini-software/MiniExcel" rel="nofollow"><img src="https://img.shields.io/github/stars/mini-software/MiniExcel?logo=github" alt="GitHub stars"></a>
<a href="https://www.nuget.org/packages/MiniExcel"><img src="https://img.shields.io/badge/.NET-%3E%3D%204.5-red.svg" alt="version"></a>
<a href="https://deepwiki.com/mini-software/MiniExcel"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
<a href="https://doi.org/10.5281/zenodo.22054705"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.22054705.svg" alt="DOI"></a>
</p>
</div>

---

[<img align="right" src="https://github.com/dotnet-foundation/swag/blob/main/logo/dotnetfoundation_v4.png?raw=true" width="100" />](https://www.dotnetfoundation.org/)

<div align="center">
<p>该项目属于 <a href="https://www.dotnetfoundation.org/">.NET 基金会</a> ,并根据其<a href="https://www.dotnetfoundation.org/code-of-conduct">行为准则</a> 运作。</p>
</div>

---

<div align="center">
<p> 您的 <a href="https://github.com/mini-software/miniexcel">Star</a>、<a href="https://miniexcel.github.io">赞助</a> 和 <a href="https://edu.51cto.com/course/32914.html">购买视频</a> 能帮助 MiniExcel 成长 </p>
</div>

---

<div align="center">
<p>
  QQ群 - 
  1群 : <a href="https://qm.qq.com/q/33VXm1bMQ8" target="_blank">813100564</a> / 
  2群 : <a href="https://qm.qq.com/q/TaGjA1sPaq" target="_blank">579033769</a> / 
  3群 : <a href="https://qm.qq.com/q/QOtWF0fAEq" target="_blank">625362917</a> / 
  4群 : <a href="https://qm.qq.com/q/iKYWzIZ33y" target="_blank">907750429</a>
</p>
</div>

----

### 简介

MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。

### MiniExcel Rust

MiniExcel 现已支持 Rust,提供更底层的控制和高效的 XLSX 处理。详见 [MiniExcel-Rust](https://github.com/mini-software/MiniExcel-Rust/blob/main/README.zh-CN.md) 与 [Rust/.NET 压力测试](#rust-与-net-压力测试)。

目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。

![image](https://user-images.githubusercontent.com/12729184/113120478-33d59980-9244-11eb-8675-a49651c8af67.png)

### 特点
- 低内存耗用,避免OOM、频繁 Full GC 情况
- 支持`即时`操作每行数据
- 兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询
- 轻量,不需要安装 Microsoft Office、COM+,DLL小于150KB
- 简便操作的 API 风格



### 快速开始

- [导入、读取 Excel](#getstart1)
- [导出 、创建 Excel](#getstart2)
- [模板填充、创建 Excel](#getstart3)
- [Excel Column Name/Index/Ignore Attribute](#getstart4)
- [例子](#getstart5)

### 安装

请查看 [NuGet](https://www.nuget.org/packages/MiniExcel)

### 命令行工具

通过 .NET Tool 安装 MiniExcel CLI:

```shell
dotnet tool install --global MiniExcel.Cli
```

也可以从 [GitHub Releases](https://github.com/mini-software/MiniExcel/releases) 下载 Windows、Linux 或 macOS 的 NativeAOT 程序,无需安装 .NET 运行时。

Python、Node.js、Rust、Go、Java、PHP 等任何能启动进程的语言都可以调用 NativeAOT CLI。它通过文件路径接收输入,并将查询结果以 JSON 输出,因此不需要 .NET 语言绑定。这里提供的是命令行进程集成,不是原生库 FFI API。

将 Excel 或 CSV 查询为 JSON:

```shell
miniexcel query --input input.xlsx --sheet Sheet1
```

在 Excel 与 CSV 之间转换:

```shell
miniexcel convert --input input.csv --output output.xlsx
miniexcel convert --input input.xlsx --output output.csv --overwrite
```

运行 `miniexcel <command> --help` 查看全部选项。

### 更新日志

请查看 [Release Notes](https://gitee.com/dotnetchina/MiniExcel/blob/master/docs)

### TODO

请查看 [TODO](https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true)

### 性能比较、测试

Benchmarks  逻辑可以在 [MiniExcel.Benchmarks](https://gitee.com/dotnetchina/MiniExcel/blob/master/benchmarks/MiniExcel.Benchmarks/Program.cs) 查看或是提交 PR,运行指令

```bash
dotnet run -p .\benchmarks\MiniExcel.Benchmarks\ -c Release -f netcoreapp3.1 -- -f * --join
```

最后一次运行规格、结果 :

```bash
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
Intel Core i7-7700 CPU 3.60GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
  [Host]     : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT
  Job-ZYYABG : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT
IterationCount=3  LaunchCount=3  WarmupCount=3
```

Benchmark History :  [Link](https://github.com/mini-software/MiniExcel/issues/276)

#### Rust 与 .NET 压力测试

本测试比较动态流式 Query 性能:.NET 使用 `OpenXmlImporter.Query`,Rust 使用 `MiniExcel::query`,不包含 Save 性能。将 `MiniExcel` 与 `MiniExcel-Rust` 放在同级目录后,可使用同一份 100,000 行 XLSX 工作簿测试两种实现:

```powershell
pwsh ./benchmarks/compare-rust-dotnet.ps1
```

默认每轮完整流式读取 3 次,并对每个运行时重复测试 3 轮。脚本会校验两端读取行数一致,并输出耗时与峰值工作集。结果会受硬件、操作系统、文件缓存及运行时版本影响,可通过 `-Passes` 和 `-Iterations` 调整压力。

测试环境:AMD Ryzen 5 5600X、Windows 10 22H2、.NET SDK 10.0.103、Rust 1.85.0。

| 运行时 | 方法 | 每轮读取行数 | 平均耗时 | 平均峰值工作集 | 最大峰值工作集 |
|--------|------|-------------:|---------:|---------------:|---------------:|
| .NET   | `OpenXmlImporter.Query` | 300,000 | 6,282.31 ms | 70.65 MB | 70.71 MB |
| Rust   | `MiniExcel::query` | 300,000 | 3,814.61 ms | 9.79 MB | 9.83 MB |

以上结果仅供同机环境参考,不代表所有环境下的性能表现。


#### 导入、查询 Excel 比较
逻辑 : 以 [**Test1,000,000x10.xlsx**](https://gitee.com/dotnetchina/MiniExcel/blob/master/benchmarks/MiniExcel.Benchmarks/Test1%2C000%2C000x10.xlsx) 做基准与主流框架做性能测试,总共 1,000,000 行 * 10 列笔 "HelloWorld",文件大小 23 MB


| Library      | Method                       | 最大内存耗用 |         平均时间 |
| ---------------------------- | -------------: | ---------------: | ---------------: |
| MiniExcel | 'MiniExcel QueryFirst'       |       0.109 MB | 0.0007264 sec |
| ExcelDataReader | 'ExcelDataReader QueryFirst' |       15.24 MB | 10.66421 sec |
| MiniExcel  | 'MiniExcel Query'            |        17.3 MB | 14.17933 sec |
| ExcelDataReader | 'ExcelDataReader Query'      |        17.3 MB | 22.56508 sec |
| Epplus    | 'Epplus QueryFirst'          |       1,452 MB | 18.19801 sec |
| Epplus        | 'Epplus Query'               |       1,451 MB | 23.64747 sec |
| OpenXmlSDK | 'OpenXmlSDK Query'           |       1,412 MB | 52.00327 sec