DataJuggler.Excelerate
9.0.0
See the version list below for details.
dotnet add package DataJuggler.Excelerate --version 9.0.0
NuGet\Install-Package DataJuggler.Excelerate -Version 9.0.0
<PackageReference Include="DataJuggler.Excelerate" Version="9.0.0" />
paket add DataJuggler.Excelerate --version 9.0.0
#r "nuget: DataJuggler.Excelerate, 9.0.0"
// Install DataJuggler.Excelerate as a Cake Addin #addin nuget:?package=DataJuggler.Excelerate&version=9.0.0 // Install DataJuggler.Excelerate as a Cake Tool #tool nuget:?package=DataJuggler.Excelerate&version=9.0.0
<img height=192 width=192 src=https://github.com/DataJuggler/Blazor.Excelerate/blob/main/wwwroot/Images/ExcelerateLogoSmallWhite.png>
Live Demo
Blazor.Excelerate https://excelerate.datajuggler.com Code Generate C# Classes From Excel Header Rows
Major Update - EPPPlus has been removed and NPOI has replaced it.
This was a pretty major switch, but EPPPlus had vulnerabilities in the last free version. I will be testing more in the near future, as I suspect there may be some issues switching from one based EPPPlus to 0 based in NPOI may not have been converted correctly.
Update 5.18.2024
New Video:
First Ever Opensource Saturday - Sunday Edition https://youtu.be/uxa1xR6xpzk
Updates
11.13.2024: EPPPlus was removed and NPOI has replaced it. This project was updated to .NET9. This version is still beiing tested. Use a version 8.x for now.
9.11.2024: I updated NuGet package DataJuggler.UltimateHelper. I became aware this package is listed as having vulnerabilities, which I believe stem from using EPPPlus version 4.5.3.3 which is the last free version of EPPPlus.
Edit 11.13.2024: NPOI has now replaced EPPPlus
12.29.2023: DataJuggler.Net8 was updated.
12.26.2023: Updated DataJuggler.NET8 and this project to handle Target Framework of .NET8
11.14.2023: This project has been updated to .NET8.
8.13.2023: DataJuggler.UltimateHelper was updated.
7.24.2023: New Video
The Best C# Excel Library In The Galaxy https://youtu.be/uWXiz52cqlg
I also created a NuGet package for a WinForms project that includes all the needed packages and has a progress bar wired up.
DataJuggler.ExcelerateWinApp
Install Instructions
To Install Via Nuget and DOT NET CLI, navigate to the folder you wish to create your project in
cd c:\Projects\ExcelerateWinApp dotnet new install DataJuggler.ExcelerateWinApp dotnet new DataJuggler.ExcelerateWinApp or
Clone ExcelerateWinApp from GitHub https://github.com/DataJuggler/ExcelerateWinApp
7.22.2023: I have completed ExcelHelper.SaveWorksheet method. This is a major milestone so I have updated the project to 7.4.0.
7.22.2023: I am in the process of redoing SaveRow for the code generated objects. Now each class has two properties created. Loading, and ChangedColumns, which is a comma delimited string of column indexes that have chagned. The next phase will be only saving columns that have changes.
7.21.2023: I added a property to the column object called HasChanges. In conjunection with this the class ExcelHelper has an optional parameter to SaveBatch, SaveBatchItem and SaveRow to only save columns with HasChanges = true. For now, you have to set this property on the column manually. I am investigating ways to auto set this if the value changes from the time you loaded the object until you save it.\
7.16.2023: DataJuggler.UltimateHelper, DataJuggler.Net7 was updated.
Update 4.4.2023
I just released a cool project that uses this package.
DataJuggler.SQLSnapshot Export a SQL Server database and all data rows with just a connection string and the path to save the Excel file. Nuget DataJuggler.SQLSnapshot https://github.com/DataJuggler/SQLSnapshot
And a demo project for the above project https://github.com/DataJuggler/DemoSQLSnapshot
Update 11.11.2022: I am working on the Grid, and added a properties to the column object
and some code to the ValidationComponent to allow SetFocusOnFirstRender.
Update 11.9.2022 - 11.10.2022:
I added some new properties and enumerations for editing data in the Grid in DataJuggler.Blazor.Components.
Update 11.8.2022:
I added some new properties to the row and Column object for use with the Grid for DataJuggler.Blazor.Components.
Update 10.31.2022:
LoadWorksheetInfo.ExcludedColumnIndexes was added. This is a collection of integers to not load. I may expand this to column names also as an option.
--
Excelerate uses EPPPlus version 4.5.3.3 (last free version), and it makes it easy to load Workbooks or Worksheets.
A class named CodeGenerator was just created, and now by inheriting from the same CSharpClassWriter that code generates for DataTier.Net, I code generate classes based on your header row.
I have a couple of clients that I build programs that automate combining columns from multiple Worksheets to form reports.
Rather than continue to write custom loaders, I really only need custom Exporters in most cases.
Here is a short video: https://youtu.be/Sa-xroxPw_I
This short code snippet will load all the rows from a worksheet:
Snippet is from a Windows Form .Net 6 project, located in the Sample folder of this project. Very simple for now:
Load Worksheet Sample
using DataJuggler.UltimateHelper;
using DataJuggler.Excelerate;
using System;
using System.Windows.Forms;
// Set the text
string path = WorksheetControl.Text;
// Create a new instance of a 'LoadWorksheetInfo' object.
LoadWorksheetInfo loadWorksheetInfo = new LoadWorksheetInfo();
// Set the SheetName
oadWorksheetInfo.SheetName = SheetnameControl.SelectedObject.ToString();
// Only load the first 12 columns for this test
loadWorksheetInfo.ColumnsToLoad = 12;
// Set the LoadColumnOptions
loadWorksheetInfo.LoadColumnOptions = LoadColumnOptionsEnum.LoadFirstXColumns;
// other options
// loadWorksheetInfo.LoadColumnOptions = LoadColumnOptionsEnum.LoadAllColumnsExceptExcluded;
// loadWorksheetInfo.LoadColumnOptions = LoadColumnOptionsEnum.LoadSpecifiedColumns;
// load the worksheet
Worksheet worksheet = ExcelDataLoader.LoadWorksheet(path, loadWorksheetInfo);
// if the worksheet exists
if ((NullHelper.Exists(worksheet)) && (SheetnameControl.HasSelectedObject))
{
// if the rows collection was found
if (worksheet.HasRows)
{
// Show a message as a test
// MessageBox.Show("Worksheet Loaded", "Finished");
// test only
// int rows = worksheet.Rows.Count;
// Show a message as a test
// MessageBox.Show("There were " + String.Format("{0:n0}", rows) + " rows found in the worksheet");
// int cols = worksheet.Rows[1124].Columns.Count;
// Show a message as a test
// MessageBox.Show("There were " + String.Format("{0:n0}", cols) + " columns found in the row index 1125.");
// Get a nullable date
// string columnValue = worksheet.Rows[1124].Columns[3].DateValue;
// Show a message of the columnValue
// MessageBox.Show("Column Value: " + columnValue);
}
}
There is now a Code Generator class built into this project, to code generate a C# class from a header row.
The Code Generator has been updated to pass in a Row instance, to make loading the generate classes simple.
This code is from a Windows Form .Net 5 project located in the sample:
# Code Generation Sample
// if the value for HasWorksheet is true
if ((HasWorksheet) && (ListHelper.HasOneOrMoreItems(Worksheet.Rows)))
{
// The file I am using to test has 3 rows at the top above the header row. Take this out if I accidently check this in
// worksheet.Rows.RemoveRange(0, 3);
// Set the outputFolder
string outputFolder = OutputFolderControl.Text;
// Set the className (the name of the generated class)
string className = "SalesTaxEntry";
// Create a new instance of a CodeGenerator
CodeGenerator codeGenerator = new CodeGenerator(worksheet, outputFolder, className);
// Generate a class and set the Namespace
bool success = codeGenerator.GenerateClassFromWorksheet("STATS.Objects");
// Show the results
MessageBox.Show("Success: " + success);
}
There is another override to load multiple sheets at once. I will build a sample project when I get some time to build a sample spreadsheet I can give away.
To load multiple sheets:
List<LoadWorksheetInfo> loadWorkSheetsInfo = new List<LoadWorksheetInfo>();
// Add each LoadWorksheetInfo
workbook = ExcellDataLoader.LoadWorkbook(path, loadWorkSheetsInfo)
I will build some helper methods to save writing as much code once I use this a little to know what is needed.
My first test loaded a 12 column spreadsheet with 3,376 rows in just a few seconds.
I have a new project that uses this project as a good sample. Blazor.Excelerate will soon be an online way to create classes from a spreadsheet.
https://github.com/DataJuggler/Blazor.Excelerate
More helper methods and features will be added. The Nuget package has been released: DataJuggler.Excelerate.
Feel free to mention any new features you think would be useful. I can't promise to do them all, but if it is a good fit for this project I will add it.
This code is all brand new, so use with caution until more testing has been done. First tests have been promising.
I just finished adding a Load method, that is code generated when the classes are written.
** I am available for hire if you need help with any size C# / SQL Server project **
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. |
-
net9.0
- DataJuggler.Net8 (>= 8.0.8)
- DataJuggler.UltimateHelper (>= 8.1.3)
- NPOI (>= 2.7.2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on DataJuggler.Excelerate:
Package | Downloads |
---|---|
DataJuggler.Blazor.Components
This project consists of a TextBoxComponent, Multiline TextBox, CheckBox, ComboBox, CheckedListComboBox, CheckedListBox, Grid, Label, Calendar Component, Time Component and more. The CSS file DataJuggler.Blazor.Components.css contains many useful classes to help style and position objects. This version is for .Net 9.0. |
|
DataJuggler.SQLSnapshot
SQL Snapshot allows you to export a SQL Server database and all data rows to Excel with one line of code passing in a connectionstring and a path. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
9.0.1 | 39 | 11/26/2024 |
9.0.0 | 186 | 11/13/2024 |
8.0.10 | 587 | 9/13/2024 |
8.0.9 | 483 | 9/11/2024 |
8.0.8 | 2,009 | 5/19/2024 |
8.0.7 | 108 | 5/19/2024 |
8.0.6 | 111 | 5/19/2024 |
8.0.5 | 507 | 5/4/2024 |
8.0.4 | 1,277 | 12/29/2023 |
8.0.3 | 426 | 12/29/2023 |
8.0.2 | 1,338 | 12/26/2023 |
8.0.1 | 564 | 11/17/2023 |
8.0.0 | 1,774 | 11/14/2023 |
7.4.6 | 1,233 | 8/28/2023 |
7.4.5 | 1,334 | 8/26/2023 |
7.4.4 | 883 | 8/13/2023 |
7.4.3 | 450 | 8/13/2023 |
7.4.2 | 660 | 7/24/2023 |
7.4.1 | 438 | 7/24/2023 |
7.4.0 | 503 | 7/23/2023 |
7.3.21 | 645 | 7/22/2023 |
7.3.20 | 657 | 7/22/2023 |
7.3.1 | 468 | 7/21/2023 |
7.3.0 | 484 | 7/16/2023 |
7.2.12 | 2,245 | 4/10/2023 |
7.2.11 | 529 | 4/10/2023 |
7.2.10 | 538 | 4/5/2023 |
7.2.9 | 596 | 4/2/2023 |
7.2.8 | 540 | 4/2/2023 |
7.2.7 | 521 | 4/1/2023 |
7.2.6 | 527 | 3/28/2023 |
7.2.5 | 530 | 3/28/2023 |
7.2.4 | 515 | 3/28/2023 |
7.2.3 | 524 | 3/28/2023 |
7.2.2 | 503 | 3/28/2023 |
7.2.1 | 503 | 3/28/2023 |
7.2.0 | 520 | 3/28/2023 |
7.1.12 | 534 | 3/28/2023 |
7.1.11 | 521 | 3/28/2023 |
7.1.10 | 527 | 3/28/2023 |
7.1.9 | 8,587 | 12/25/2022 |
7.1.8 | 6,031 | 12/16/2022 |
7.1.7 | 638 | 12/16/2022 |
7.1.6 | 943 | 12/11/2022 |
7.1.5 | 837 | 12/11/2022 |
7.1.4 | 2,694 | 12/4/2022 |
7.1.3 | 810 | 12/4/2022 |
7.1.2 | 636 | 12/4/2022 |
7.1.1 | 830 | 12/4/2022 |
7.1.0 | 4,412 | 11/15/2022 |
7.0.16 | 1,161 | 11/11/2022 |
7.0.15 | 685 | 11/11/2022 |
7.0.14 | 676 | 11/11/2022 |
7.0.12 | 658 | 11/11/2022 |
7.0.11 | 667 | 11/11/2022 |
7.0.10 | 633 | 11/10/2022 |
7.0.9 | 863 | 11/10/2022 |
7.0.8 | 657 | 11/10/2022 |
7.0.7 | 641 | 11/10/2022 |
7.0.6 | 646 | 11/10/2022 |
7.0.5 | 634 | 11/9/2022 |
7.0.4 | 859 | 11/9/2022 |
7.0.4-rc1 | 450 | 11/8/2022 |
7.0.3-rc1 | 481 | 11/7/2022 |
7.0.2-rc1 | 526 | 11/7/2022 |
7.0.1-rc1 | 432 | 11/7/2022 |
7.0.0-rc1 | 444 | 10/31/2022 |
6.0.3 | 924 | 9/28/2022 |
6.0.2 | 741 | 9/28/2022 |
6.0.1 | 1,018 | 4/1/2022 |
6.0.0 | 1,000 | 1/23/2022 |
1.7.3 | 753 | 11/30/2021 |
1.7.2 | 629 | 11/30/2021 |
1.7.1 | 627 | 11/30/2021 |
1.7.0 | 644 | 11/30/2021 |
1.6.0 | 620 | 11/29/2021 |
1.5.0 | 722 | 11/10/2021 |
1.4.4 | 733 | 11/8/2021 |
1.4.3 | 662 | 11/8/2021 |
1.4.2 | 676 | 11/8/2021 |
1.4.1 | 660 | 11/8/2021 |
1.4.0 | 662 | 11/8/2021 |
1.3.12 | 628 | 11/7/2021 |
1.3.10 | 660 | 11/7/2021 |
1.3.9 | 711 | 11/7/2021 |
1.3.8 | 748 | 11/7/2021 |
1.3.7 | 739 | 11/7/2021 |
1.3.6 | 793 | 11/7/2021 |
1.3.5 | 737 | 11/5/2021 |
1.3.4 | 736 | 11/5/2021 |
1.3.3 | 711 | 11/5/2021 |
1.3.2 | 747 | 11/5/2021 |
1.3.1 | 659 | 11/2/2021 |
1.3.0 | 639 | 11/2/2021 |
1.2.8 | 691 | 11/1/2021 |
1.2.7 | 651 | 10/31/2021 |
1.2.6 | 647 | 10/31/2021 |
1.2.5 | 725 | 10/31/2021 |
1.2.4 | 759 | 10/31/2021 |
1.2.3 | 722 | 10/31/2021 |
1.2.2 | 688 | 10/31/2021 |
1.2.1 | 685 | 10/31/2021 |
1.2.0 | 742 | 10/31/2021 |
1.1.9 | 644 | 10/16/2021 |
1.1.8 | 723 | 10/16/2021 |
1.1.7 | 682 | 10/14/2021 |
1.1.6 | 654 | 10/13/2021 |
1.1.5 | 687 | 9/21/2021 |
1.1.4 | 685 | 9/20/2021 |
1.1.3 | 670 | 9/20/2021 |
1.1.2 | 693 | 9/17/2021 |
1.1.1 | 667 | 9/17/2021 |
1.0.3 | 604 | 9/15/2021 |
1.0.2 | 633 | 9/14/2021 |
1.0.1 | 645 | 9/14/2021 |
1.0.0 | 677 | 9/14/2021 |
See Read Me