https://www.nuget.org/packages/EPPlus/
// using OfficeOpenXml;
// using OfficeOpenXml.Style;
using (var excel = new ExcelPackage())
{
var ws = excel.Workbook.Worksheets.Add("My worksheet");
ws.DefaultColWidth = 22;
ws.Column(2).Width = 25.29;
ws.Cells.AutoFitColumns(15, 100); // Auto fit columns with minimum and maximum
var range = ws.Cells[1, 1, 1, 8]; // first row 8 columns
range.Style.Font.Bold = true;
range.AutoFilter = true;
range.Style.Fill.PatternType = ExcelFillStyle.Solid; // must be set to apply background color
range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(242, 242, 242));
range.Style.Font.Color.SetColor(Color.White);
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center
range.Style.Numberformat.Format = "#,##0.00";
ws.View.ShowGridLines = false; // hide excel grid
ws.PrinterSettings.Orientation = eOrientation.Landscape;
ws.PrinterSettings.PrintArea = ws.Cells[1, 1, 100, 8];
ws.PrinterSettings.FitToPage = true;
try
{
// Embed file by using: Properties > Build Action > Embedded Resource
using (Stream imageStream = GetType().Assembly.GetManifestResourceStream("NameSpace.FileName.png"))
{
var image = Image.FromStream(imageStream);
var picture = ws.Drawings.AddPicture("Picture", image);
picture.SetPosition(100, 100);
}
}
catch (Exception ex)
{
Log.Write(LogLevel.Error, "Failed to add image to Excel", ex);
}
var fileName = "c:\temp\temp.xlsx";
using (var stream = File.Open(fileName, FileMode.Create))
{
excel.SaveAs(stream);
}
}
Update 2020-03-03 Using a Pivot Table:
/*
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Style;
using OfficeOpenXml.Table.PivotTable;
*/
public class BusinessUnitActivityResourceFlatData
{
public DateTime Date { get; set; }
public string Week { get; set; }
public string Month { get; set; }
public int? BusinessUnitId { get; set; }
public string BusinessUnitName { get; set; }
public int? ActivityId { get; set; }
public string ActivityDescription { get; set; }
public int? ResourceId { get; set; }
public string ResourceDescription { get; set; }
public double Hours { get; set; }
}
public byte[] ExportBusinessUnitActivityResourcePivotTable(string title, IEnumerable<BusinessUnitActivityResourceFlatData> data, BusinessUnitActivityResourceGrouping grouping)
{
using (var ep = new ExcelPackage())
{
var showDate = false;
var showWeek = true;
var showActivity = false;
if (grouping == BusinessUnitActivityResourceGrouping.Day_BusinessUnit_Activity_Resource ||
grouping == BusinessUnitActivityResourceGrouping.Day_BusinessUnit_Resource)
{
showDate = true;
}
if (grouping == BusinessUnitActivityResourceGrouping.Day_BusinessUnit_Activity_Resource ||
grouping == BusinessUnitActivityResourceGrouping.Week_BusinessUnit_Activity_Resource ||
grouping == BusinessUnitActivityResourceGrouping.Month_BusinessUnit_Activity_Resource)
{
showActivity = true;
}
if (grouping == BusinessUnitActivityResourceGrouping.Month_BusinessUnit_Activity_Resource ||
grouping == BusinessUnitActivityResourceGrouping.Month_BusinessUnit_Resource)
{
showWeek = false;
}
var wsPivot = ep.Workbook.Worksheets.Add("Draaitabel");
var wsData = ep.Workbook.Worksheets.Add("Gegevens");
wsPivot.Cells[1, 1].Value = title;
wsPivot.Cells[1, 1].Style.Font.Bold = true;
wsPivot.DefaultColWidth = 20;
wsData.DefaultColWidth = 20;
wsData.View.FreezePanes(2, 1);
var y = 1;
var x = 1;
if (showDate)
{
wsData.Cells[y, x++].Value = "Datum";
}
if (showWeek)
{
wsData.Cells[y, x++].Value = "Week";
}
wsData.Cells[y, x++].Value = "Maand";
wsData.Cells[y, x++].Value = "KostenplaatsId";
wsData.Cells[y, x++].Value = "Kostenplaats";
if (showActivity)
{
wsData.Cells[y, x++].Value = "ActiviteitId";
wsData.Cells[y, x++].Value = "Activiteit";
}
wsData.Cells[y, x++].Value = "MiddelId";
wsData.Cells[y, x++].Value = "Middel";
wsData.Cells[y, x++].Value = "Uren";
y = 2;
foreach (var row in data)
{
x = 1;
if (showDate)
{
wsData.Cells[y, x++].Value = row.Date.ToString("yyyy-MM-dd");
}
if (showWeek)
{
wsData.Cells[y, x++].Value = row.Week;
}
wsData.Cells[y, x++].Value = row.Month;
wsData.Cells[y, x++].Value = row.BusinessUnitId;
wsData.Cells[y, x++].Value = row.BusinessUnitName;
if (showActivity)
{
wsData.Cells[y, x++].Value = row.ActivityId;
wsData.Cells[y, x++].Value = row.ActivityDescription;
}
wsData.Cells[y, x++].Value = row.ResourceId;
wsData.Cells[y, x++].Value = row.ResourceDescription;
wsData.Cells[y, x++].Value = row.Hours;
y++;
}
var colCount = x - 1;
for (int i = 1; i < colCount; i++)
{
wsData.Column(i).AutoFit(10, 40);
}
// enable autofilter
wsData.Cells[1, 1, 1, colCount].Style.Font.Bold = true;
wsData.Cells[1, 1, y, colCount].AutoFilter = true;
var pivotTable = wsPivot.PivotTables.Add(wsPivot.Cells["A2"], wsData.Cells[1, 1, y, colCount], "Draaitabel");
pivotTable.ShowHeaders = true;
pivotTable.UseAutoFormatting = true;
pivotTable.ApplyWidthHeightFormats = true;
pivotTable.ShowDrill = true;
pivotTable.FirstHeaderRow = 1;
pivotTable.FirstDataRow = 2;
pivotTable.FirstDataCol = 1;
pivotTable.DataOnRows = false;
var groupByRows = new List<string> { "Middel" };
var groupByColumns = new List<string> { "Kostenplaats" };
var summaryColumns = new List<string> { "Uren" };
foreach (string row in groupByRows)
{
var field = pivotTable.Fields[row];
pivotTable.RowFields.Add(field);
field.Sort = eSortType.Ascending;
}
foreach (string row in groupByColumns)
{
var field = pivotTable.Fields[row];
pivotTable.ColumnFields.Add(field);
field.Sort = eSortType.Ascending;
}
foreach (string column in summaryColumns)
{
var field = pivotTable.Fields[column];
var dataField = pivotTable.DataFields.Add(field);
dataField.Function = DataFieldFunctions.Sum;
}
var chart = wsPivot.Drawings.AddChart("Draaitabel grafiek", eChartType.Line, pivotTable);
chart.SetPosition(36, 0, 1, 0);
chart.SetSize(1000, 600);
return ep.GetAsByteArray();
}
}
271500cookie-checkC# create excel using EPPlus