Thanks to visit codestin.com
Credit goes to github.com

Skip to content

rebider/ExcelMapper

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ExcelMapper

NuGet version Build status codecov.io

A library to map POCO objects to Excel files.

Features

  • Read and write Excel files
  • Uses the pure managed NPOI library instead of the Jet database engine for Excel access, thus enabling use in AnyCPU configurations
  • Map to Excel files using header rows (column names) or column indexes (no header row)
  • Optionally skip blank lines when reading
  • Preserve formatting when saving back files
  • Optionally let the mapper track objects
  • Map columns to properties through convention, attributes or method calls
  • Use custom or builtin data formats for numeric and DateTime columns

Read objects from an Excel file

var products = new ExcelMapper("products.xlsx").Fetch<Product>();

This expects the Excel file to contain a header row with the column names. Objects are read from the first worksheet. If the column names equal the property names (ignoring case) no other configuration is necessary. The format of the Excel file (xlsx or xls) is autodetected.

Map to specific column names

public class Product
{
  public string Name { get; set; }
  [Column("Number")]
  public int NumberInStock { get; set; }
  public decimal Price { get; set; }
}

This maps the column named Number to the NumberInStock property.

Map to column indexes

public class Product
{
    [Column(1)]
    public string Name { get; set; }
    [Column(3)]
    public int NumberInStock { get; set; }
    [Column(4)]
    public decimal Price { get; set; }
}

var products = new ExcelMapper("products.xlsx") { HeaderRow = false }.Fetch<Product>();

Note that column indexes don't need to be consecutive. When mapping to column indexes, every property needs to be explicitly mapped through the ColumnAttribute attribute or the AddMapping() method.

Map through method calls

var excel = new ExcelMapper("products.xls");
excel.AddMapping<Product>("Number", p => p.NumberInStock);
excel.AddMapping<Product>(1, p => p.NumberInStock);
excel.AddMapping(typeof(Product), "Number", "NumberInStock");
excel.AddMapping(typeof(Product), 1, "NumberInStock");

Save objects

var products = new List<Product>
{
    new Product { Name = "Nudossi", NumberInStock = 60, Price = 1.99m },
    new Product { Name = "Halloren", NumberInStock = 33, Price = 2.99m },
    new Product { Name = "Filinchen", NumberInStock = 100, Price = 0.99m },
};

new ExcelMapper().Save("products.xlsx", products, "Products");

This saves to the worksheet named "Products". If you save objects after having previously read from an Excel file using the same instance of ExcelMapper the style of the workbook is preserved allowing use cases where an Excel template is filled with computed data.

Track objects

var products = new ExcelMapper("products.xlsx").Fetch<Product>().ToList();
products[1].Price += 1.0m;
excel.Save("products.out.xlsx");

Ignore properties

public class Product
{
    public string Name { get; set; }
    [Ignore]
    public int Number { get; set; }
    public decimal Price { get; set; }
}

// or

var excel = new ExcelMapper("products.xlsx");
excel.Ignore<Product>(p => p.Price);

Use specific data formats

public class Product
{
    [DataFormat(0xf)]
    public DateTime Date { get; set; }

    [DataFormat("0%")]
    public decimal Number { get; set; }
}

You can use both builtin formats and custom formats. The default format for DateTime cells is 0x16 ("m/d/yy h:mm").

About

Map POCO objects to Excel files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%