private byte[] ReporteObjetivo(List <M_ObjetivoExcel> reporte)
        {
            try
            {
                M_Excel     excelNew  = new M_Excel();
                M_Worksheet workSheet = new M_Worksheet
                {
                    Header = "Reporte de Objetivos",
                    Data   = DTHelper.ToDataTable(reporte),
                };

                workSheet.Columns.Add(new M_Column(0, "Motivo", "Motivo"));
                workSheet.Columns.Add(new M_Column(1, "EstadoObjetivo", "Estado"));
                workSheet.Columns.Add(new M_Column(4, "Moneda", "Moneda"));
                workSheet.Columns.Add(new M_Column(5, "Importe", "Importe"));
                workSheet.Columns.Add(new M_Column(6, "FechaVencimiento", "Fecha de Vencimiento", typeof(DateTime)));
                workSheet.Columns.Add(new M_Column(7, "Descripcion", "Descripción"));

                excelNew.WorksheetList.Add(workSheet);

                return(ExcelExportHelper.ExportExcel(excelNew));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private byte[] ReporteRegistro(List <M_RegistroExcel> reporte)
        {
            try
            {
                M_Excel     excelNew  = new M_Excel();
                M_Worksheet workSheet = new M_Worksheet
                {
                    Header = "Reporte de Registros",
                    Data   = DTHelper.ToDataTable(reporte),
                };

                workSheet.Columns.Add(new M_Column(0, "TipoRegistro", "Tipo de Registro"));
                workSheet.Columns.Add(new M_Column(1, "Categoria", "Categoría"));
                workSheet.Columns.Add(new M_Column(2, "SubCategoria", "Subcategoría"));
                workSheet.Columns.Add(new M_Column(3, "Moneda", "Moneda"));
                workSheet.Columns.Add(new M_Column(4, "Importe", "Importe"));
                workSheet.Columns.Add(new M_Column(5, "Fecha", "Fecha", typeof(DateTime)));
                workSheet.Columns.Add(new M_Column(6, "Descripcion", "Descripción"));

                excelNew.WorksheetList.Add(workSheet);

                return(ExcelExportHelper.ExportExcel(excelNew));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static byte[] ExportExcel(M_Excel excel, bool formateoCeldas = true)
        {
            byte[] result = null;

            using (ExcelPackage package = new ExcelPackage())
            {
                foreach (var item in excel.WorksheetList)
                {
                    ExcelWorksheet workSheet    = package.Workbook.Worksheets.Add(string.Format("{0}", !string.IsNullOrEmpty(item.Name) ? item.Name : "datos"));
                    int            startRowFrom = string.IsNullOrEmpty(item.Header) ? 1 : 3;

                    #region [Región: Replace/Remove Columns & Set Position]
                    List <string> listaColumnas = new List <string>();

                    DataTable clonedtable = item.Data.Clone();

                    foreach (DataColumn col in item.Data.Columns)
                    {
                        listaColumnas.Add(col.ColumnName);
                    }

                    foreach (string columna in listaColumnas)
                    {
                        M_Column column = item.Columns.FirstOrDefault(x => x.OldName == columna);
                        if (column != null && column.Tipo != null)
                        {
                            clonedtable.Columns[columna].DataType = column.Tipo;
                        }
                    }

                    foreach (DataRow dr in item.Data.Rows)
                    {
                        clonedtable.Rows.Add(dr.ItemArray);
                    }

                    foreach (string columna in listaColumnas)
                    {
                        M_Column column = item.Columns.FirstOrDefault(x => x.OldName == columna);

                        if (column != null)
                        {
                            clonedtable.Columns[columna].ColumnName = column.NewName;
                        }
                        else
                        {
                            clonedtable.Columns.RemoveAt(clonedtable.Columns.IndexOf(columna));
                        }
                    }

                    int positionTemp;
                    for (int write = 0; write < clonedtable.Columns.Count; write++)
                    {
                        for (int sort = 0; sort < clonedtable.Columns.Count - 1; sort++)
                        {
                            M_Column column  = item.Columns.FirstOrDefault(x => x.NewName == clonedtable.Columns[sort].ToString());
                            M_Column column2 = item.Columns.FirstOrDefault(x => x.NewName == clonedtable.Columns[sort + 1].ToString());
                            if (column.Position > column2.Position)
                            {
                                positionTemp = sort + 1;
                                clonedtable.Columns[sort + 1].SetOrdinal(sort);
                            }
                        }
                    }
                    #endregion

                    #region [Región: Verificar Filas sin datos]
                    for (int row = 0; row < clonedtable.Rows.Count; row++)
                    {
                        for (int col = 0; col < clonedtable.Rows[row].ItemArray.Count(); col++)
                        {
                            if (string.IsNullOrEmpty(clonedtable.Rows[row].ItemArray[col].ToString()) && clonedtable.Columns[col].DataType.Name != "DateTime" && clonedtable.Columns[col].DataType.Name != "Decimal")
                            {
                                clonedtable.Rows[row].SetField(col, item.Columns.FirstOrDefault(x => x.Position == col).EmptyValue);
                            }

                            if (!string.IsNullOrEmpty(clonedtable.Rows[row].ItemArray[col].ToString()) && clonedtable.Columns[col].DataType.Name == "String")
                            {
                                clonedtable.Rows[row].SetField(col, HtmlToPlainText(clonedtable.Rows[row].ItemArray[col].ToString()));
                            }
                        }
                    }
                    #endregion

                    workSheet.Cells["A" + startRowFrom].LoadFromDataTable(clonedtable, true);

                    #region [Región: Format Header]
                    if (workSheet.Cells[startRowFrom, 1].Value != null)
                    {
                        using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, clonedtable.Columns.Count])
                        {
                            r.Style.Font.Color.SetColor(System.Drawing.Color.White);
                            r.Style.Font.Bold        = true;
                            r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                            r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#9c26b2"));
                        }
                    }
                    #endregion

                    #region [Región: Format Cells - Add Borders]
                    if (workSheet.Cells[startRowFrom + 1, 1].Value != null)
                    {
                        using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + clonedtable.Rows.Count, clonedtable.Columns.Count])
                        {
                            r.Style.Border.Top.Style    = ExcelBorderStyle.Thin;
                            r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                            r.Style.Border.Left.Style   = ExcelBorderStyle.Thin;
                            r.Style.Border.Right.Style  = ExcelBorderStyle.Thin;

                            r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
                            r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
                            r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
                            r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
                        }
                    }
                    #endregion

                    #region [Región: Header]
                    if (!string.IsNullOrEmpty(item.Header))
                    {
                        using (ExcelRange head = workSheet.Cells[string.Format("A1:{0}", CalcularLargoHeader(clonedtable.Columns.Count))])
                        {
                            head.Value           = item.Header;
                            head.Style.Font.Size = 16;
                            head.Merge           = true;
                        }
                    }
                    #endregion

                    #region [Región: Format Types Cells]
                    if (formateoCeldas)
                    {
                        if (workSheet.Cells[startRowFrom + 1, 1].Value != null)
                        {
                            for (int i = 1; i <= clonedtable.Columns.Count; i++)
                            {
                                for (int j = 1; j <= clonedtable.Rows.Count; j++)
                                {
                                    using (ExcelRange r = workSheet.Cells[startRowFrom + j, i, startRowFrom + j, i])
                                    {
                                        if (r.Value != null)
                                        {
                                            var type = r.Value.GetType();
                                            switch (type.Name)
                                            {
                                            case "DateTime":
                                                using (ExcelRange r2 = workSheet.Cells[startRowFrom + 1, i, startRowFrom + j, i])
                                                {
                                                    r2.Style.Numberformat.Format = "dd/MM/yyyy";
                                                }

                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (workSheet.Cells[startRowFrom + 1, 1].Value != null)
                        {
                            for (int i = 1; i <= clonedtable.Columns.Count; i++)
                            {
                                using (ExcelRange r = workSheet.Cells[startRowFrom + 1, i, startRowFrom + 1, i])
                                {
                                    if (r.Value != null)
                                    {
                                        var type = r.Value.GetType();
                                        using (ExcelRange r2 = workSheet.Cells[startRowFrom + 1, i, startRowFrom + clonedtable.Rows.Count, i])
                                        {
                                            switch (type.Name)
                                            {
                                            case "DateTime":
                                                r2.Style.Numberformat.Format = "dd/MM/yyyy";
                                                break;

                                            case "string":
                                                r2.Style.Numberformat.Format = "@";
                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion

                    // AutoFit
                    workSheet.Cells.AutoFitColumns();
                }

                result = package.GetAsByteArray();
            }

            return(result);
        }