miércoles, 28 de diciembre de 2011

Lectura/Escritura Excel desde Dynamics AX


Hoy os presento como he resuelto un problema que he tenido. Necesitábamos leer y escribir en un documento de excel desde Dynamics AX. A qui me encuentro que tenemos dos posibilidades:
  • Mediante ADO
  • Mediante clases propias de Dynamics AX


Aquí os propongo la segunda opción, utilizar clases propias de AX. Comenzamos! Os propongo un job para realizar las pruebas.
static void PTK_PruebaLecturaEscrituraExcel(Args _args)
{
    FileName filename;               // Para especificar ruta del fichero
    COMVariantType type;             // Para lectura de formato de celda
    SysExcelApplication application; // Clase que maneja la app Excel
    SysExcelWorkbooks workbooks;     // Para almacenar los libros
    SysExcelWorkbook workbook;       // Para extraer el libro a tratar
    SysExcelWorksheets worksheets;   // Para almacenar las hojas
    SysExcelWorksheet worksheet;     // Para extraer la hoja a tratar

    SysExcelCells cells;             // Para almacenar las celdas
    SysExcelCell cell;               // Para extraer la celda a tratar
    int col, fil;                    // Para posicionar fila y columna
    str lectura;                     // Para almacenar el dato ledo
    ;

    application = SysExcelApplication::construct(); // Instanciamos la app
    workbooks = application.workbooks();            // Asignamos los libros a la app

    //Especificamos el libro excel a tratar
    filename = "D:\\prueba.xlsx";

    // Abrir el documento excel para comprobar fallos
    try {
        workbooks.open(filename);
    } catch (Exception::Error) {
        throw error("File cannot be opened.");
    }

    workbook = workbooks.item(1); // Extraer el libro leido y asignarlo a variable. La variable workbooks puede tener varios libros
    worksheets = workbook.worksheets(); // Extraer lista de hojas del libro. La variable worksheets contiene varias hojas
    worksheet = worksheets.itemFromName('Hoja1'); // Seleccionar la hoja que queremos tratar
    //worksheet = worksheets.itemFromNum(1); // Seleccionar la hoja que queremos tratar

    cells = worksheet.cells(); // Extraer todas las celdas de la hoja a la variable cells
    
    col = 1;
    fil = 1;

    // Leemos la celda
    lectura = cells.item(fil, col).value().bStr(); 
    // Leemos el formato de celda
    type = cells.item(fil, col).value().variantType();

    // Asignamos celda para grabar datos
    cell = cells.item(fil, col);

    // Si la celda esta vacia escribimos
    if (type == COMVariantType::VT_EMPTY){            
            cell.value('Hola');        
    }

    // Guardamos y cerramos
    application.displayAlerts(false);
    application.save();
    application.quit();

    info("Proceso finalizado");
}
Podríamos añadir ya la funcionalidad que queramos dependiendo de lo que quisieramos hacer, pero la base es esta. En próximos artículos os pondré la solución mediante ADO. Espero que os pueda servir de ayuda. 
Saludos!

No hay comentarios:

Publicar un comentario