Buscar en este blog

miércoles, 13 de noviembre de 2013

Leer Excel desde Ax 2012

Aqui les dejo unas líneas para copiar y pegar si necesitan leer un archivo de excel desde Ax 2012. Después de leer las líneas pueden darle el tratamiento que sea necesario, ya sea que guarden esos datos en alguna tabla o lo que sea que necesiten hacer.

El archivo de excel de muestra no lo dejo aquí, pero es un simple excel a 5 columnas donde los dos primeros campos los leo como strings y los otros 3 como double por ser cantidades.

Espero que les sea de ayuda.


static void grwReadExcel(Args _args)
{
    SysExcelApplication application;
    SysExcelWorkbooks workbooks;
    SysExcelWorkbook workbook;
    SysExcelWorksheets worksheets;
    SysExcelWorksheet worksheet;
    SysExcelCells cells;
    COMVariantType type;
    FilenameOpen filename;

    int row = 1; //si el excel tiene nombres de columnas
    str producto, descripcion;
    int cantidadRecibida, documentoBase, numeroArticulosTotales = 0, existenDiscrepancias = 0;
    real igi;
    ;

    filename  = "C:\\Users\\Desa\\Documents\\EJEMPLO.xlsx" ; // nombre de archivo
   
    application = SysExcelApplication::construct();
    workbooks = application.workbooks();

    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("No se encontro el archivo" );
    }
    workbook = workbooks.item( 1);
    worksheets = workbook.worksheets();
    //nombre de la hoja dentro del excel
    worksheet = worksheets.itemFromName( "EJEMPLO DE ARTICULOS");
    cells = worksheet.cells();

    //Iterando las celdas y sacando valores
    do
    {
        //Incrementando a la siguiente fila en el excel
        row++;

        producto = cells.item(row, 1).value().bStr();
        descripcion = cells.item(row, 2).value().bStr();
        cantidadRecibida = real2int(cells.item(row, 3).value().double());
        igi = cells.item(row, 4).value().double();
        documentoBase = real2int(cells.item(row, 5).value().double());
        
        info( strFmt("idproducto: %1, descr: %2, cant: %3, igi: %4, docBase: %5" , producto, descripcion, cantidadRecibida, igi, documentoBase));

         numeroArticulosTotales++;
      
        //Guardando el tipo de celda en una variable COMVariantType y validando si esta vacia o no
        type = cells.item(row+ 1, 1 ).value().variantType();

    }
    while (type != COMVariantType::VT_EMPTY);

        info( strFmt("numero de articulos: %1" , numeroArticulosTotales));

    //Cerrando la app de excel
    application.quit();
}