Excelでエクスポートするには、こちらをご覧ください。
http://epplus.codeplex.com/releases/view/42439
次に、独自のクラスを作成して、IEnumerableのExcelエクスポートを生成できます。
ここに、私のプロジェクトの1つからの可能性に関するいくつかのヒント(これらはより大きなオブジェクトの一部であるため、ヒントのみであり、確実にコンパイルされるものはありません):
public interface IExcelReporting : IServiceObject
{
ColumnsExcel Columns { get; }
void SetDatasource(IEnumerable datasource);
void SetHeaderLabelMerge(int columnMerge);
void AddHeader(string label, string value);
Byte[] ExportToExcel(string title, string author, DateTime date);
}
実装例:
public Byte[] ExportToExcel(string title, string author, DateTime date)
{
ExcelPackage package = new ExcelPackage();
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(title);
if (_Columns != null)
{
Dictionary<int, Func<object, string>> internalMappingGetter = new Dictionary<int, Func<object, string>>();
//create the Header of the body
foreach (ColumnExcel entity in _Columns)
{
worksheet.Cells[RowIndex, ColumnIndex].Value = entity.HeaderName;
worksheet.Cells[RowIndex, ColumnIndex].Style.WrapText = true;
BorderCell(worksheet.Cells[RowIndex, ColumnIndex]);
worksheet.Column(ColumnIndex).Width = entity.Width;
ColumnIndex++;
}
RowIndex++;
if (_DataSource != null)
{
foreach (Object o in _DataSource)
{
ColumnIndex = 1;
foreach (ColumnExcel column in _Columns)
{
column.Apply(worksheet.Cells[RowIndex, ColumnIndex], o);
worksheet.Column(ColumnIndex).BestFit = true;
worksheet.Cells[RowIndex, ColumnIndex].Style.WrapText = true;
//BorderCell(worksheet.Cells[RowIndex, ColumnIndex]);
ColumnIndex++;
}
RowIndex++;
}
}
および列クラス:
public class ColumnsExcel : IEnumerable
{
List<ColumnExcel> _Columns;
public ColumnsExcel()
{
_Columns = new List<ColumnExcel>();
}
public void AddInt(Func<object,int> getValue, string headerName, int width, string format)
{
ColumnExcel entity = new ColumnExcelInt(headerName, width, format, getValue);
_Columns.Add(entity);
}
public void AddString(Func<object, string> getValue, string headerName, int width )
{
ColumnExcel entity = new ColumnExcelstring(headerName, width, getValue);
_Columns.Add(entity);
}
public void AddDateTime(Func<object, DateTime?> getValue, string headerName, int width, string format)
{
ColumnExcel entity = new ColumnExcelDateTime(headerName, width, format, getValue);
_Columns.Add(entity);
}
public void AddDecimal(Func<object, decimal> getValue, string headerName, int width, string format)
{
ColumnExcel entity = new ColumnExcelDecimal(headerName, width, format, getValue);
_Columns.Add(entity);
}
public IEnumerator GetEnumerator()
{
return _Columns.GetEnumerator();
}
}
とその使用:
//prepare the Ienumerable<MyObject>
var interventi = GetInterventoSchedeConsuntivi()
//prepare the report
IExcelReporting report = ReportingFactory.GetInstance();
report.SetDatasource(interventi);
report.AddHeader("Lotto:", lotto);
report.Columns.AddString((object v) => ((InterventoSchedeConsuntiviView)v).Lotto, "Lotto", 20);
using (System.IO.Stream s = File.Create(filepath))
{
byte[] csv = report.ExportToExcel(("titleFile", string.Empty, Servizi.DataOra.Now);
s.Write(csv, 0, csv.Length);
}