63 lines
2.5 KiB
C#
63 lines
2.5 KiB
C#
using ClosedXML.Excel;
|
|
using DamageAssesment.Api.Responses.Interfaces;
|
|
using DamageAssesment.Api.Responses.Models;
|
|
using OfficeOpenXml;
|
|
using System.Collections.Generic;
|
|
|
|
namespace DamageAssesment.Api.Responses.Providers
|
|
{
|
|
public class ExcelExportService: IExcelExportService
|
|
{
|
|
public byte[] ExportToExcel<T1>(List<object> responses)
|
|
{
|
|
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
|
|
using (var package = new ExcelPackage())
|
|
{
|
|
// Create the first worksheet and populate it with responses
|
|
var workSheet1 = package.Workbook.Worksheets.Add("responses");
|
|
PopulateWorksheet(workSheet1, responses);
|
|
return package.GetAsByteArray();
|
|
}
|
|
}
|
|
private void PopulateWorksheet(ExcelWorksheet worksheet, List<object> data)
|
|
{
|
|
if (data.Count > 0)
|
|
{
|
|
var properties = data[0].GetType().GetProperties();
|
|
List<int> IsAttchments = new List<int>();
|
|
// Add column headers
|
|
for (int col = 1; col <= properties.Length; col++)
|
|
{
|
|
worksheet.Cells[1, col].Value = properties[col - 1].Name;
|
|
if(properties[col - 1].Name.ToLower().Contains("attachment"))
|
|
IsAttchments.Add(col);
|
|
}
|
|
|
|
// Add data
|
|
for (int row = 2; row <= data.Count + 1; row++)
|
|
{
|
|
for (int col = 1; col <= properties.Length; col++)
|
|
{
|
|
|
|
string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2]));
|
|
if (IsAttchments.Where(a => a == col).Count() > 0 && !string.IsNullOrEmpty(value))
|
|
{
|
|
List<string> attachments = value.Split("##").ToList();
|
|
try
|
|
{
|
|
Uri linkUri = new Uri(attachments[1]);
|
|
worksheet.Cells[row, col].Value = attachments[0];
|
|
worksheet.Cells[row, col].Style.Font.UnderLine = true;
|
|
}
|
|
catch { worksheet.Cells[row, col].Value = attachments[1]; }
|
|
}
|
|
else
|
|
worksheet.Cells[row, col].Value = value;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|