[AX 2012 R3 - How To] Aplicar formato a archivo Excel

julio 07, 2016 Christian Amado 0 Comentarios

Microsoft Dynamics AX Este artículo tiene estrecha relación con el anterior. En el artículo anterior veíamos cómo exportar datos a Excel desde el Dynamics AX. En este caso aplicaremos el formato a la cabecera de la hoja y a las celdas.

Aquí quiero mostrar dos cosas: la primera, consiste en aplicar estilos y la segunda, aplicar formato de texto o numéricos a las celdas.

Estilos

En este caso, vamos a colorear el fondo de las celdas en la cabecera, para ello creamos un método y asignamos el color celda por celda. Este método debe ser llamado desde el método principal export2Excel():
SysExcelWorkSheet formatExcelHeader(SysExcelWorkBook _xlsWorkBook)
{
    SysExcelWorkSheet               xlsWorkSheet;
    SysExcelStyles                  styles;
    SysExcelStyle                   style;
    SysExcelFont                    font;
    SysExcelInterior                interior;
    SysExcelCells                   cells;
    int                             indiceColumnas = 1;
    ;

    //Obtenemos los estilos del libro
    styles = _xlsWorkBook.styles();

    //Creamos un estilo para la cabecera
    style = styles.add("Cabecera");

    //Aplicamos fuentes
    font = style.font();
    //Fuente del título en Negritas
    font.bold(true);
    //Color a partir de RGB. Negro
    font.color(WinApi::RGB2int(0,0,0));

    //Aplicamos fondo. Amarillo claro
    interior = style.interior();
    interior.color(WinApi::RGB2int(246,255,159));

    //Aplicamos el estilo de Cabecera a la primera fila del archivo.
    xlsWorkSheet = _xlsWorkBook.worksheets().itemFromNum(1);

    cells = xlsWorkSheet.cells();
    //Alineación izquierda para textos, derecha para números
    cells.range("A1").horizontalAlignment(-4152); //Derecha
    cells.range("B1").horizontalAlignment(-4131); //Izquierda
    cells.range("C1:D1").horizontalAlignment(-4152); //Derecha

    xlsWorkSheet.rows().item(1).style("Cabecera");

    return xlsWorkSheet;
}

Formato

En este caso, vamos a alinear las celdas a la derecha y/o izquierda y colocaremos formato numérico o sólo texto (esto va en el método que carga los datos fila por fila):
//Alineación izquierda para textos, derecha para números
_cells.range(strFmt("A%1",row)).horizontalAlignment(-4152); //Derecha
_cells.range(strFmt("A%1",row)).numberFormat("0"); //Números enteros
_cells.range(strFmt("B%1", row)).horizontalAlignment(-4131); //Izquierda
_cells.range(strFmt("B%1",row)).numberFormat("@"); //Sólo texto
_cells.range(strFmt("C%1:D%1",row)).horizontalAlignment(-4152); //Derecha
_cells.range(strFmt("C%1:D%1",row)).numberFormat("0,00"); //Números con dos decimales