public static MemoryStream ListToExcel(object list, Dictionary<string, string> titles, bool IsExportAllCol) { using (var package = new ExcelPackage()) { var sheet = package.Workbook.Worksheets.Add("sheet1"); var fields = titles.Keys.ToList(); const int startIndex = 1; var currentRow = startIndex; var currentCell = 0; EachHelper.EachListHeader(list, (i, name, type) => { if (!fields.Contains(name)) { if (IsExportAllCol) fields.Add(name); else return; } currentCell = fields.IndexOf(name) + startIndex; sheet.Cells[currentRow, currentCell].Value = titles[name] ?? name; sheet.Column(currentCell).AutoFit(); }); EachHelper.EachListRow(list, (rowIndex, rowData) => { currentRow = rowIndex + startIndex + 1; EachHelper.EachObjectProperty(rowData, (i, name, value) => { if (!fields.Contains(name)) { if (IsExportAllCol) fields.Add(name); else return; } currentCell = fields.IndexOf(name) + startIndex; if (ZGeneric.IsTypeIgoreNullable<DateTime>(value)) sheet.Column(currentCell).Style.Numberformat.Format = "yyyy-MM-dd hh:mm:ss"; sheet.Cells[currentRow, currentCell].Value = value ?? string.Empty; }); }); currentCell = startIndex + fields.Count - 1; using (var head = sheet.Cells[startIndex, startIndex, startIndex, currentCell]) // set head style { head.Style.Font.Bold = true; head.Style.Font.Size = 12; head.Style.Font.Name = "Arial"; head.Style.Border.Top.Style = ExcelBorderStyle.Thin; head.Style.Border.Top.Color.SetColor(Color.Gray); head.Style.Border.Right.Style = ExcelBorderStyle.Thin; head.Style.Border.Right.Color.SetColor(Color.Gray); head.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; head.Style.Border.Bottom.Color.SetColor(Color.Gray); head.Style.Border.Left.Style = ExcelBorderStyle.Thin; head.Style.Border.Left.Color.SetColor(Color.Gray); head.Style.VerticalAlignment = ExcelVerticalAlignment.Center; head.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; head.Style.Fill.PatternType = ExcelFillStyle.Solid; head.Style.Fill.BackgroundColor.SetColor(Color.LightBlue); } using (var data = sheet.Cells[startIndex + 1, startIndex, currentRow, currentCell])// set data style { data.Style.Font.Name = "Arial"; data.Style.Font.Size = 11; data.Style.Border.Top.Style = ExcelBorderStyle.Thin; data.Style.Border.Top.Color.SetColor(Color.Gray); data.Style.Border.Right.Style = ExcelBorderStyle.Thin; data.Style.Border.Right.Color.SetColor(Color.Gray); data.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; data.Style.Border.Bottom.Color.SetColor(Color.Gray); data.Style.Border.Left.Style = ExcelBorderStyle.Thin; data.Style.Border.Left.Color.SetColor(Color.Gray); } var ms = new MemoryStream(); package.SaveAs(ms); return ms; } }
public static MemoryStream CreateByExcelLibrary(DataTable table) { using (var package = new ExcelPackage()) { var sheet = package.Workbook.Worksheets.Add("sheet111"); var colCount = table.Columns.Count; for (var i = 0; i < colCount; i++) { sheet.Cells[1, i + 1].Value = table.Columns[i].Caption; } var k = 2; foreach (DataRow row in table.Rows) { for (var i = 0; i < colCount; i++) { sheet.Cells[k, i + 1].Value = row[i]; } k++; } var ms = new MemoryStream(); package.SaveAs(ms); return ms; } }