Estoy trabajando en una aplicación de Recursos Humanos, que debe mostrar un informe de Excel del entorno de trabajo, como se muestra en este imagen.

Ahora estoy buscando ayuda con este tema, estoy usando ClosedXML.Excel, actualmente estoy generando mis archivos de Excel con un método que creo yo mismo, ingresa una Lista de objetos y crea un archivo de Excel en la respuesta de un http solicitud. Aquí está el código:

public static bool ConvertToExcel<T>(IList<T> data, string excelName, string sheetName)
    {
        PropertyDescriptorCollection properties =

        TypeDescriptor.GetProperties(typeof(T));

        DataTable table = new DataTable();

        foreach (PropertyDescriptor prop in properties)
            table.Columns.Add(prop.Name.Replace("_"," "), Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);

        foreach (T item in data)
        {
            DataRow row = table.NewRow();
            foreach (PropertyDescriptor prop in properties)
                row[prop.Name.Replace("_", " ")] = prop.GetValue(item) ?? DBNull.Value;
            table.Rows.Add(row);
        }

        try
        {
            using (XLWorkbook wb = new XLWorkbook())
            {
                wb.Worksheets.Add(table, sheetName);

                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.Buffer = true;
                System.Web.HttpContext.Current.Response.Charset = "";
                string FileName = excelName + ".xlsx";

                System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + FileName);
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
                    System.Web.HttpContext.Current.Response.Flush();
                    System.Web.HttpContext.Current.Response.End();
                }
            }
        }
        catch (Exception e) 
        {
            throw e;
            return false;
        }
        return true;
    }

Debido a los nombres largos de los jefes extiende mucho la columna de Excel para un porcentaje simple, quiero saber si puedo lograr rotar hacia abajo (90 grados) la letra del encabezado. ¿Es posible lograr esto con mi biblioteca actual ClosedXML.Excel? Quiero utilizar el mismo método para generar este informe de entorno de trabajo.

Gracias de antemano :)

0
Johnny-Co Ruyzo 17 oct. 2018 a las 04:58

2 respuestas

La mejor respuesta

Puede hacerlo utilizando los estilos de rotación de texto de alineación:

cell.Style.Alignment.SetTextRotation(90);
0
Raidri supports Monica 17 oct. 2018 a las 10:02

Gracias @Raidri.

Cambié el código:

   wb.Worksheets.Add(table, sheetName);

Para:

   var ws = wb.Worksheets.Add(table, sheetName);
   ws.Row(1).Style.Alignment.SetTextRotation(180);
   ws.Tables.FirstOrDefault().ShowAutoFilter = false;

De esa manera, el texto se gira 90 grados hacia abajo y elimino los filtros.

0
Johnny-Co Ruyzo 17 oct. 2018 a las 13:35