Skip to content

Fast Excel Reading and Writing in .Net

License

Notifications You must be signed in to change notification settings

Crossbow78/FastExcel

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fast Excel

Looking for maintainers maybe a new owner, I haven't done any dotnet for what seems like a while now. I don't even have dotnet installed on my computer at the moment.

Build / Release

Build status License NuGet Badge

About

  • Provides a fast way of reading and writing to *.xlsx Excel files.
  • Small memory footprint while running
  • Does not use the Open XML SDK to interact with the data but going directly and editing the underlying xml files.
  • This project is not intended to be a replacement for full featured Excel packages with things like formatting, just light weight fast way of interacting with data in Excel.

Version 3

  • Contribute using Visual Studio 2017
  • Built using .NetStandard 2 targeting:
    • .Net Core 2.0
    • .Net Framework 4.6.1

Version 2

  • Contribute using Visual Studio 2017
  • Built using .NetStandard 1.3 targeting:
    • .Net Core 1.0
    • .Net Framework 4.6

Version 1 (old)

  • Built using .Net Framework 4.5
  • Contribute using Visual Studio 2015

Installation

PM> Install-Package FastExcel

Write Demo 1

This demo uses Generic objects, ie any object you wish with public properties

// Get your template and output file paths
var templateFile = new FileInfo("C:\\Temp\\Template.xlsx");
var outputFile = new FileInfo("C:\\Temp\\output.xlsx");

using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(templateFile, outputFile))
{
    List<MyObject> objectList = new List<MyObject>();

    for (int rowNumber = 1; rowNumber < 100000; rowNumber++)
    {
        MyObject genericObject = new MyObject();
        genericObject.StringColumn1 = "A string " + rowNumber.ToString();
        genericObject.IntegerColumn2 = 45678854;
        genericObject.DoubleColumn3 = 87.01d;
        genericObject.ObjectColumn4 = DateTime.Now.ToLongTimeString();

        objectList.Add(genericObject);
    }
    fastExcel.Write(objectList, "sheet3", true);
}
public class MyObject
{
    public string StringColumn1 { get; set; }
    public int IntegerColumn2 { get; set; }
    public double DoubleColumn3 { get; set; }
    public string ObjectColumn4 { get; set; }
}

Write Demo 2

This demo lets you specify exactly which cell you are writing to

// Get your template and output file paths
var templateFile = new FileInfo("C:\\Temp\\Template.xlsx");
var outputFile = new FileInfo("C:\\Temp\\output.xlsx");

//Create a worksheet with some rows
var worksheet = new Worksheet();
var rows = new List<Row>();
for (int rowNumber = 1; rowNumber < 100000; rowNumber++)
{
    List<Cell> cells = new List<Cell>();
    for (int columnNumber = 1; columnNumber < 13; columnNumber++)
    {
        cells.Add(new Cell(columnNumber, columnNumber * DateTime.Now.Millisecond));
    }
    cells.Add(new Cell(13, "Hello" + rowNumber));
    cells.Add(new Cell(14, "Some Text"));
 
    rows.Add(new Row(rowNumber, cells));
}
worksheet.Rows = rows;


// Create an instance of FastExcel
using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(templateFile, outputFile))
{
    // Write the data
    fastExcel.Write(worksheet, "sheet1");
}

Read Demo 1 Get Worksheet

// Get the input file path
var inputFile = new FileInfo("C:\\Temp\\input.xlsx");

//Create a worksheet
Worksheet worksheet = null;

// Create an instance of Fast Excel
using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(inputFile, true))
{
    // Read the rows using worksheet name
    worksheet = fastExcel.Read("sheet1");

    // Read the rows using the worksheet index
    // Worksheet indexes are start at 1 not 0
    // This method is slightly faster to find the underlying file (so slight you probably wouldn't notice)
    worksheet = fastExcel.Read(1);
}

Read Demo 2 Get All Worksheets

// Get the input file path
var inputFile = new FileInfo("C:\\Temp\\fileToRead.xlsx");

// Create an instance of Fast Excel
using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(inputFile, true))
{
    foreach (var worksheet in fastExcel.Worksheets)
    {
        Console.WriteLine(string.Format("Worksheet Name:{0}, Index:{1}", worksheet.Name, worksheet.Index));
        
        //To read the rows call read
        worksheet.Read();
        var rows = worksheet.Rows.ToArray();
        //Do something with rows
        Console.WriteLine(string.Format("Worksheet Rows:{0}", rows.Count()));
    }
}

Update Demo

// Get the input file path
var inputFile = new FileInfo("C:\\Temp\\input.xlsx");

//Create a some rows in a worksheet
var worksheet = new Worksheet();
var rows = new List<Row>();

for (int rowNumber = 1; rowNumber < 100000; rowNumber += 50)
{
    List<Cell> cells = new List<Cell>();
    for (int columnNumber = 1; columnNumber < 13; columnNumber+= 2)
    {
        cells.Add(new Cell(columnNumber, rowNumber));
    }
    cells.Add(new Cell(13, "Updated Row"));

    rows.Add(new Row(rowNumber, cells));
}
worksheet.Rows = rows;

// Create an instance of Fast Excel
using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(inputFile))
{
    // Read the data
    fastExcel.Update(worksheet, "sheet1");
}

Thanks to

  • Sibz

  • paritoshmmmec

  • Insperation for this project came from SejExcelExport by jsegarra1971 who did a great job. I wanted to have my own crack at this problem.

About

Fast Excel Reading and Writing in .Net

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%