SpreadSheetTasks 0.4.0
dotnet add package SpreadSheetTasks --version 0.4.0
NuGet\Install-Package SpreadSheetTasks -Version 0.4.0
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="SpreadSheetTasks" Version="0.4.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SpreadSheetTasks" Version="0.4.0" />
<PackageReference Include="SpreadSheetTasks" />
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 SpreadSheetTasks --version 0.4.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SpreadSheetTasks, 0.4.0"
#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.
#addin nuget:?package=SpreadSheetTasks&version=0.4.0
#tool nuget:?package=SpreadSheetTasks&version=0.4.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
SpreadSheetTasks
The .NET library for fast reading and writing Excel files (.xlsx, .xlsb). Some methods/ideas based on great libraries :
- https://github.com/MarkPflug/Sylvan.Data.Excel
- https://github.com/MarkPflug/Sylvan
- https://github.com/ExcelDataReader/ExcelDataReader
Installation
https://www.nuget.org/packages/SpreadSheetTasks/
Install-Package SpreadSheetTasks
dotnet add package SpreadSheetTasks
Usage
Read
using (XlsxOrXlsbReadOrEdit excelFile = new XlsxOrXlsbReadOrEdit())
{
excelFile.Open("file.xlsx");
excelFile.ActualSheetName = "sheet1";
object[]? row = null;
while (excelFile.Read())
{
row ??= new object[excelFile.FieldCount];
excelFile.GetValues(row);
}
}
Write from IDataReader (best performance)
using (XlsbWriter xlsx = new XlsbWriter("file.xlsb"))
{
xlsx.AddSheet("sheetName");
xlsx.WriteSheet(dataReader);
}
Write from List
// Write data from Lists
List<string> headers = new List<string> { "col1", "col2" };
List<TypeCode> typeCodes = new List<TypeCode> { TypeCode.Int32, TypeCode.String };
List<object[]> data = [ [1,"x"], [2,"y"], [3,"z"], [4,null], [null,"dda"]];
using (XlsbWriter writer = new XlsbWriter("output.xlsb"))
{
writer.AddSheet("sheetName");
writer.WriteSheet(headers, typeCodes, data, doAutofilter: true);
}
Write from DataTable
// Create sample DataTable
DataTable dataTable = new DataTable();
dataTable.Columns.Add("COL1_INT", typeof(int));
dataTable.Columns.Add("COL2_TXT", typeof(string));
dataTable.Columns.Add("COL3_DATETIME", typeof(DateTime));
dataTable.Columns.Add("COL4_DOUBLE", typeof(double));
// Add some data
dataTable.Rows.Add(1, "Text1", DateTime.Now, 1.23);
dataTable.Rows.Add(2, "Text2", DateTime.Now.AddDays(1), 4.56);
// Write to Excel
using (var excel = new XlsxWriter("output.xlsx"))
{
excel.AddSheet("sheetName");
excel.WriteSheet(dataTable.CreateDataReader(), doAutofilter: true);
}
More Examples
Write Multiple Sheets
using (var excel = new XlsxWriter("multisheet.xlsx"))
{
excel.AddSheet("Sheet1");
excel.WriteSheet(dataReader1, doAutofilter: true);
excel.AddSheet("Sheet2");
excel.WriteSheet(dataReader2, doAutofilter: true);
}
Write to MemoryStream
using (var memoryStream = new MemoryStream())
{
var excel = new XlsxWriter(memoryStream);
excel.AddSheet("Sheet1");
excel.WriteSheet(dataReader, doAutofilter: true);
excel.Dispose();
// Use the MemoryStream
memoryStream.Seek(0, SeekOrigin.Begin);
// Save to file if needed
using (var fileStream = File.Open("output.xlsb", FileMode.Create))
{
memoryStream.CopyTo(fileStream);
}
}
XLSX vs XLSB Format
// format based on the file extension
using (var excel = ExcelWriter.CreateWriter("file_path"))
{
excel.AddSheet("Sheet1");
excel.WriteSheet(dataReader);
}
// XLSX format
using (var excel = new XlsxWriter("file.xlsx"))
{
excel.AddSheet("Sheet1");
excel.WriteSheet(dataReader);
}
// XLSB format (better performance)
using (var excel = new XlsbWriter("file.xlsb"))
{
excel.AddSheet("Sheet1");
excel.WriteSheet(dataReader);
}
Read Sheet Names
using (var excelFile = new XlsxOrXlsbReadOrEdit())
{
excelFile.Open("file.xlsx");
var sheetNames = excelFile.GetScheetNames();
foreach (var sheetName in sheetNames)
{
Console.WriteLine(sheetName);
}
}
Benchamarks and more
XLSX Read
Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|
SpreadSheetTasks200K | 257.9 ms | 1.13 ms | 1.06 ms | 5000.0000 | 3000.0000 | 1000.0000 | 35038.91 KB |
Sylvan200k | 328.8 ms | 5.71 ms | 5.07 ms | 6000.0000 | 3000.0000 | 1000.0000 | 52321.90 KB |
SpreadSheetTasks65k | 181.7 ms | 1.87 ms | 1.66 ms | - | - | - | 493.05 KB |
Sylvan65K | 175.8 ms | 3.44 ms | 5.56 ms | - | - | - | 658.82 KB |
XLSB Read
Method | FileName | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|---|
'SpreadSheetTasks - XLSB Read - v1' | 200kFile.xlsb | 94.33 ms | 1.756 ms | 2.462 ms | 5333.3333 | 3833.3333 | 1333.3333 | 68.48 MB |
'SpreadSheetTasks - XLSB Read - v2' | 200kFile.xlsb | 114.44 ms | 2.272 ms | 4.590 ms | 5000.0000 | 3500.0000 | 1000.0000 | 49.03 MB |
'Sylvan.Data.Excel - XLSB Read' | 200kFile.xlsb | 124.67 ms | 2.353 ms | 2.311 ms | 6000.0000 | 3000.0000 | 1000.0000 | 50.82 MB |
'SpreadSheetTasks - XLSB Read - v1' | 65K_R(...).xlsb [21] | 48.88 ms | 0.498 ms | 0.416 ms | 2363.6364 | 818.1818 | 727.2727 | 28.83 MB |
'SpreadSheetTasks - XLSB Read - v2' | 65K_R(...).xlsb [21] | 63.76 ms | 0.726 ms | 0.643 ms | 1625.0000 | - | - | 13.66 MB |
'Sylvan.Data.Excel - XLSB Read' | 65K_R(...).xlsb [21] | 72.50 ms | 0.714 ms | 0.668 ms | 2857.1429 | 142.8571 | - | 23.16 MB |
(v1 means using UseMemoryStreamInXlsb property, v2 means using UseMemoryStreamInXlsb = false, v1 is faster but uses more memory)
XLSB/XLSX Write
Method | ReaderType | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
---|---|---|---|---|---|---|---|
'SpreadSheetTasks - XLSB Write' | GENERAL | 117.7 ms | 1.49 ms | 1.24 ms | 1600.0000 | - | 30.57 MB |
XlsbSylvanWrite | GENERAL | 163.7 ms | 3.06 ms | 3.14 ms | 1500.0000 | - | 36.75 MB |
'SpreadSheetTasks - XLSX Write' | GENERAL | 529.2 ms | 5.75 ms | 5.10 ms | 1000.0000 | - | 30.74 MB |
'Sylvan - XLSX Write' | GENERAL | 227.4 ms | 4.01 ms | 3.75 ms | 2500.0000 | 1000.0000 | 42.94 MB |
Product | Versions 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 is compatible. 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 was computed. 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.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
0.4.0 | 160 | 5/18/2025 |
0.3.2 | 467 | 10/23/2024 |
0.3.1 | 188 | 8/25/2024 |
0.3.0 | 232 | 5/12/2024 |
0.2.17 | 279 | 2/16/2024 |
0.2.16 | 147 | 2/15/2024 |
0.2.14 | 249 | 1/13/2024 |
0.2.13 | 179 | 1/6/2024 |
0.2.12 | 246 | 11/25/2023 |
0.2.11 | 183 | 11/4/2023 |
0.2.10 | 180 | 11/4/2023 |
0.2.9 | 146 | 11/4/2023 |
0.2.8 | 164 | 9/26/2023 |
0.2.7 | 167 | 9/19/2023 |
0.2.6 | 168 | 9/18/2023 |
0.2.5 | 169 | 9/16/2023 |
0.2.4 | 437 | 3/5/2023 |
0.2.3 | 1,064 | 12/1/2022 |
0.2.2 | 493 | 10/22/2022 |
0.2.1 | 492 | 8/9/2022 |
0.2.0 | 462 | 8/7/2022 |
0.1.2 | 592 | 3/21/2022 |
0.1.1 | 410 | 12/3/2021 |
0.1.0 | 386 | 11/9/2021 |
0.0.4 | 480 | 10/23/2021 |
0.0.3 | 485 | 10/17/2021 |
0.0.2 | 401 | 9/19/2021 |
0.0.1 | 380 | 9/18/2021 |
Performance improvements, Csv writer preview