TExcel 2.0.7

dotnet add package TExcel --version 2.0.7
                    
NuGet\Install-Package TExcel -Version 2.0.7
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TExcel" Version="2.0.7" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TExcel" Version="2.0.7" />
                    
Directory.Packages.props
<PackageReference Include="TExcel" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TExcel --version 2.0.7
                    
#r "nuget: TExcel, 2.0.7"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TExcel@2.0.7
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TExcel&version=2.0.7
                    
Install as a Cake Addin
#tool nuget:?package=TExcel&version=2.0.7
                    
Install as a Cake Tool

<h1 align="center">TExcel - 高性能 .NET Excel 读写库</h1>

<div align="center">

License NuGet .NET

轻量级、高性能、低内存占用的 Excel 读写库,支持 AOT 编译

ThingsGateway 生态系统中的 Excel 组件

</div>


中文

项目简介

TExcel 是一个为 .NET 平台设计的轻量级、高性能 Excel 读写库。它提供了简洁流畅的 API,支持流式操作,无需任何第三方依赖,并针对高性能场景进行了深度优化,完美支持 AOT 编译。

核心特性

  • AOT 支持:完美支持 AOT 编译,适用于原生应用场景
  • 零依赖:无需任何第三方 Excel 库依赖
  • 高性能:流式读写,低内存占用
  • 多格式支持:支持实体列表、字典、多列数据等多种数据格式
  • 多 Sheet 支持:支持读取和写入多个 Sheet
  • 异步支持:完整的同步/异步 API

性能测试

TExcel 与 MiniExcel 的性能对比测试结果:


BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
Intel Core Ultra 9 285H 2.90GHz, 1 CPU, 16 logical and 16 physical cores
.NET SDK 10.0.201
  [Host]     : .NET 8.0.25 (8.0.25, 8.0.2526.11203), X64 RyuJIT x86-64-v3
  Job-YFEFPZ : .NET 8.0.25 (8.0.25, 8.0.2526.11203), X64 RyuJIT x86-64-v3
  ShortRun   : .NET 8.0.25 (8.0.25, 8.0.2526.11203), X64 RyuJIT x86-64-v3

WarmupCount=3  

Method Job IterationCount LaunchCount Mean Error StdDev Min Max Gen0 Gen1 Gen2 Allocated
'TExcel - Write 100 rows' Job-YFEFPZ 10 Default 971.2 μs 30.72 μs 20.32 μs 945.8 μs 1,000.9 μs 91.7969 84.9609 81.0547 1794.87 KB
'MiniExcel - Write 100 rows' Job-YFEFPZ 10 Default 3,801.9 μs 108.07 μs 71.48 μs 3,679.4 μs 3,889.1 μs 488.2813 464.8438 460.9375 15687.84 KB
'TExcel - Write 10,000 rows' Job-YFEFPZ 10 Default 20,090.7 μs 252.06 μs 166.72 μs 19,844.6 μs 20,320.1 μs 500.0000 312.5000 218.7500 6946.49 KB
'MiniExcel - Write 10,000 rows' Job-YFEFPZ 10 Default 33,360.0 μs 2,214.50 μs 1,464.76 μs 31,381.8 μs 35,491.9 μs 2687.5000 1062.5000 968.7500 36439.35 KB
'TExcel - Write 100,000 rows' Job-YFEFPZ 10 Default 182,865.7 μs 6,622.49 μs 3,463.69 μs 179,116.0 μs 189,278.1 μs 3000.0000 1000.0000 750.0000 41031.66 KB
'MiniExcel - Write 100,000 rows' Job-YFEFPZ 10 Default 237,299.2 μs 14,094.96 μs 9,322.95 μs 216,521.8 μs 244,466.2 μs 18333.3333 666.6667 666.6667 232293.94 KB
'TExcel - Read 100 rows' Job-YFEFPZ 10 Default 193.8 μs 6.92 μs 4.58 μs 186.9 μs 202.4 μs 11.7188 0.9766 - 151 KB
'MiniExcel - Read 100 rows' Job-YFEFPZ 10 Default 1,894.0 μs 550.76 μs 364.29 μs 1,600.1 μs 2,621.3 μs 58.5938 27.3438 - 720.82 KB
'TExcel - Read 10,000 rows' Job-YFEFPZ 10 Default 22,787.3 μs 1,580.78 μs 1,045.59 μs 19,837.1 μs 23,317.1 μs 687.5000 281.2500 62.5000 8571.34 KB
'MiniExcel - Read 10,000 rows' Job-YFEFPZ 10 Default 52,307.6 μs 1,629.63 μs 1,077.90 μs 50,875.4 μs 53,518.6 μs 4400.0000 1200.0000 - 55438.66 KB
'TExcel - Read 100,000 rows' Job-YFEFPZ 10 Default 238,770.2 μs 25,584.39 μs 16,922.49 μs 191,120.1 μs 249,130.5 μs 6000.0000 2000.0000 - 87858.84 KB
'MiniExcel - Read 100,000 rows' Job-YFEFPZ 10 Default 503,109.0 μs 6,303.34 μs 3,751.02 μs 499,808.6 μs 509,326.7 μs 45000.0000 8000.0000 - 558096.67 KB
'TExcel - Read as Dictionary 10,000 rows' Job-YFEFPZ 10 Default 26,208.3 μs 705.36 μs 419.75 μs 25,558.4 μs 26,742.0 μs 968.7500 937.5000 218.7500 10054.47 KB
'MiniExcel - Read as Dictionary 10,000 rows' Job-YFEFPZ 10 Default 63,052.7 μs 3,268.95 μs 1,945.30 μs 60,449.1 μs 66,596.5 μs 4500.0000 1250.0000 - 56573.87 KB
'TExcel - Write Dictionary 10,000 rows' Job-YFEFPZ 10 Default 17,376.3 μs 1,386.86 μs 917.32 μs 16,605.1 μs 19,035.0 μs 406.2500 312.5000 234.3750 5773.77 KB
'MiniExcel - Write Dictionary 10,000 rows' Job-YFEFPZ 10 Default 33,335.1 μs 2,590.43 μs 1,713.41 μs 31,595.8 μs 36,625.5 μs 2538.4615 923.0769 923.0769 35241.51 KB
'TExcel - Streaming Read 100,000 rows (count only)' Job-YFEFPZ 10 Default 223,261.2 μs 21,424.81 μs 14,171.19 μs 183,013.7 μs 228,764.7 μs 6000.0000 1000.0000 - 85822.9 KB
'MiniExcel - Streaming Read 100,000 rows (count only)' Job-YFEFPZ 10 Default 375,842.3 μs 20,388.42 μs 13,485.68 μs 360,171.5 μs 391,911.4 μs 45000.0000 - - 556055.82 KB
'TExcel - Write 100 rows' ShortRun 3 1 1,014.1 μs 883.78 μs 48.44 μs 981.8 μs 1,069.8 μs 87.8906 82.0313 78.1250 1794.88 KB
'MiniExcel - Write 100 rows' ShortRun 3 1 4,467.9 μs 327.49 μs 17.95 μs 4,447.5 μs 4,481.4 μs 507.8125 484.3750 484.3750 15705.71 KB
'TExcel - Write 10,000 rows' ShortRun 3 1 19,259.6 μs 2,610.56 μs 143.09 μs 19,160.2 μs 19,423.6 μs 500.0000 312.5000 218.7500 6946.56 KB
'MiniExcel - Write 10,000 rows' ShortRun 3 1 31,256.7 μs 1,170.84 μs 64.18 μs 31,184.2 μs 31,306.3 μs 2687.5000 1062.5000 968.7500 36509.27 KB
'TExcel - Write 100,000 rows' ShortRun 3 1 187,436.4 μs 20,152.59 μs 1,104.63 μs 186,161.0 μs 188,083.3 μs 3000.0000 1000.0000 750.0000 40994.56 KB
'MiniExcel - Write 100,000 rows' ShortRun 3 1 241,877.4 μs 35,593.83 μs 1,951.02 μs 239,882.3 μs 243,781.2 μs 18333.3333 666.6667 666.6667 232293.77 KB
'TExcel - Read 100 rows' ShortRun 3 1 191.2 μs 111.42 μs 6.11 μs 184.1 μs 195.0 μs 11.7188 0.9766 - 151 KB
'MiniExcel - Read 100 rows' ShortRun 3 1 2,551.3 μs 8,995.01 μs 493.05 μs 2,019.0 μs 2,992.4 μs 58.5938 27.3438 - 720.83 KB
'TExcel - Read 10,000 rows' ShortRun 3 1 22,862.5 μs 831.35 μs 45.57 μs 22,819.1 μs 22,910.0 μs 687.5000 281.2500 62.5000 8572.03 KB
'MiniExcel - Read 10,000 rows' ShortRun 3 1 52,561.7 μs 15,407.39 μs 844.53 μs 51,586.7 μs 53,064.6 μs 4400.0000 1200.0000 - 55544.43 KB
'TExcel - Read 100,000 rows' ShortRun 3 1 208,351.2 μs 455,226.66 μs 24,952.51 μs 190,083.4 μs 236,781.3 μs 6000.0000 2000.0000 - 87873.95 KB
'MiniExcel - Read 100,000 rows' ShortRun 3 1 437,025.1 μs 181,166.13 μs 9,930.33 μs 426,880.5 μs 446,726.3 μs 45000.0000 8000.0000 - 558134.32 KB
'TExcel - Read as Dictionary 10,000 rows' ShortRun 3 1 26,069.1 μs 9,933.84 μs 544.51 μs 25,626.1 μs 26,677.0 μs 968.7500 937.5000 218.7500 10056.21 KB
'MiniExcel - Read as Dictionary 10,000 rows' ShortRun 3 1 60,103.5 μs 10,449.48 μs 572.77 μs 59,737.2 μs 60,763.6 μs 4500.0000 1250.0000 - 56483.33 KB
'TExcel - Write Dictionary 10,000 rows' ShortRun 3 1 19,684.5 μs 60,452.62 μs 3,313.61 μs 15,869.7 μs 21,847.4 μs 375.0000 281.2500 218.7500 5733.06 KB
'MiniExcel - Write Dictionary 10,000 rows' ShortRun 3 1 32,546.5 μs 44,142.91 μs 2,419.62 μs 30,728.2 μs 35,292.7 μs 2500.0000 937.5000 937.5000 35241.41 KB
'TExcel - Streaming Read 100,000 rows (count only)' ShortRun 3 1 202,586.2 μs 490,380.75 μs 26,879.42 μs 180,069.0 μs 232,344.4 μs 6000.0000 1000.0000 - 85795.63 KB
'MiniExcel - Streaming Read 100,000 rows (count only)' ShortRun 3 1 477,040.6 μs 171,858.41 μs 9,420.14 μs 466,183.3 μs 483,041.8 μs 45000.0000 - - 556047.02 KB

TExcel 在读写速度和内存占用方面均表现优异,内存占用仅为 MiniExcel 的 1/5 到 1/3。

快速开始

安装 NuGet 包
dotnet add package TExcel
写入 Excel

实体列表写入:

using TExcel;

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

var users = new List<User>
{
    new User { Id = 1, Name = "张三", Age = 25 },
    new User { Id = 2, Name = "李四", Age = 30 }
};

Excel.SaveAs("output.xlsx", users);

字典列表写入:

var data = new List<Dictionary<string, object?>>
{
    new Dictionary<string, object?> { ["Id"] = 1, ["Name"] = "张三" },
    new Dictionary<string, object?> { ["Id"] = 2, ["Name"] = "李四" }
};

Excel.SaveAs("output.xlsx", data);

多 Sheet 写入:

using var writer = Excel.CreateWriter("output.xlsx");
writer.WriteSheet(users, "Users");
writer.WriteSheet(orders, "Orders");
writer.Complete();
读取 Excel

实体列表读取:

var users = Excel.Query<User>("input.xlsx").ToList();

字典列表读取:

var data = Excel.QueryAsDictionary("input.xlsx").ToList();

流式读取(大数据量场景):

foreach (var user in Excel.Query<User>("large_file.xlsx"))
{
    // 逐行处理,低内存占用
}

异步读取:

await foreach (var user in Excel.QueryAsync<User>("input.xlsx"))
{
    // 异步逐行处理
}
获取 Sheet 信息
var sheets = Excel.GetSheets("input.xlsx");
foreach (var sheet in sheets)
{
    Console.WriteLine($"Sheet[{sheet.Index}]: {sheet.Name}");
}

列特性配置

使用 ExcelColumnAttribute 自定义列名和顺序:

public class User
{
    [ExcelColumn("用户ID", Order = 0)]
    public int Id { get; set; }

    [ExcelColumn("用户名", Order = 1)]
    public string Name { get; set; }

    [ExcelColumn("创建时间", Format = "yyyy-MM-dd HH:mm:ss")]
    public DateTime CreateTime { get; set; }

    [ExcelColumn(Ignore = true)]
    public string? Password { get; set; }
}

API 概览

方法 说明
Excel.SaveAs(path, data) 保存数据到 Excel 文件
Excel.Query<T>(path) 从 Excel 读取实体列表
Excel.QueryAsDictionary(path) 从 Excel 读取字典列表
Excel.GetSheets(path) 获取所有 Sheet 信息
Excel.CreateWriter(path) 创建写入器(支持多 Sheet)
Excel.CreateReader(path) 创建读取器

所有方法均支持异步版本和 Stream 参数。

项目结构

TExcel/
├── src/TExcel/
│   ├── Core/
│   │   ├── Excel.cs              # 静态便捷方法
│   │   ├── ExcelReader.cs        # 读取器实现
│   │   ├── ExcelWriter.cs        # 写入器实现
│   │   ├── IExcelReader.cs       # 读取器接口
│   │   ├── IExcelWriter.cs       # 写入器接口
│   │   ├── SheetInfo.cs          # Sheet 信息
│   │   └── ExcelColumnAttribute.cs # 列特性
│   └── Internal/
│       ├── CellReferenceHelper.cs
│       ├── OpenXmlConstants.cs
│       └── SharedStringsTable.cs
├── benchmark/TExcel.Benchmark/   # 性能测试
└── test/TExcel.Test/             # 单元测试

运行性能测试

cd benchmark/TExcel.Benchmark
dotnet run -c Release

许可证

Apache License 2.0

相关链接

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on TExcel:

Package Downloads
ThingsGatewayRuntime.Admin

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.7 182 4/27/2026
2.0.1 84 4/20/2026
1.9.44 88 4/16/2026
1.9.42 90 4/13/2026
1.9.41 90 4/12/2026
1.9.34 86 4/11/2026
1.9.33 84 4/11/2026