Tiempo de lectura:3 Minutos, 22 Segundos

Proposito

Quizás este sea uno de los procedimientos más avanzados visto hasta ahora, pero voy a explicarlo paso por paso. En este articulo se muestra cómo se puede leer una hoja de cálculo de Excel y crear tantos hechos como filas tenga la hoja. Se puede sustituir la creación de hechos por cualquier otro objeto con la sintaxis adecuada. En este ejemplo el Excel tiene la siguiente estructura:

  • Columna A: nombre del proyecto.
  • Columna B: carpeta dónde se va crear el hecho.
  • Columna C: nombre con el que se va crear el hecho.
  • Columna D: expresión del hecho, en este caso un campo de una tabla.
  • Columna E: tabla de origen del campo de la expresión.
  • Columna F: descripción del hecho.
  • Columna G: estado. El procedimiento lo utiliza para crear aquellos que su estado es Pendiente de crear, el resto los ignorara.

Ficheros a descargar

El procedimiento y todos los ficheros necesarios os los podéis descargar haciendo clic aquí. Este fichero comprimido contiene:

  • Fichero con extensión .cmp de Command Manager que contiene el código del procedimiento.
  • Fichero de ejemplo de Microsoft Excel.
  • Clase Java necesaria para el funcionamiento del procedimiento.

Explicación del código

A continuación se explica el código linea a linea o bien se puede abrir el procedimiento descargado desde MicroStrategy Command Manager (Menú Archivo > Abrir Procedimiento) donde podéis encontrar las líneas de código con el detalle de lo que realiza cada paso.

//Creado por MiguelTroyano.com
// Configuramos el libro de trabajo
jxl.Workbook libroTrabajo =  jxl.Workbook.getWorkbook(new File(sFicheroEntrada));

// Obtenemos la primera hoja del libro de Excel
jxl.Sheet primeraHoja = libroTrabajo.getSheet(0);

// Determinamos el numero de filas basandonos en la primera columna
jxl.Cell[] cellColumn = primeraHoja.getColumn(0);
int numeroFilas = cellColumn.length;

// Determinamos el numero de columnas basandonos en la primera fila
jxl.Cell[] cellRow = primeraHoja.getRow(0);
int numeroColumnas = cellRow.length;

printOut("El documento tiene: " + numeroFilas + " filas y " + numeroColumnas 
                       + " columnas");

// Especificamos si tiene encabezado o no para empezar en la fila 0 o 1
int i = 0;
if ( sEncabezado ){
    i = 1;
}

// Se crea una variable para especificar el número de fila real de excel
int x = i;
x++;

// Recorremos el excel fila por fila y realizamos una accion por cada fila
while ( i <= numeroFilas ) {

   // Se declara una varaible por cada columna del excel
    // Columna A: proyecto, Columna B: carpeta destino , 
    // Columna C: nombre del hecho, Columna D: expresion
    // Columna E: tabla de origen ,Columna F: descripcion , Columna G: estado

    String sValorColumnaA = primeraHoja.getCell(0, i).getContents();
    String sValorColumnaB = primeraHoja.getCell(1, i).getContents();
    String sValorColumnaC = primeraHoja.getCell(2, i).getContents();
    String sValorColumnaD = primeraHoja.getCell(3, i).getContents();
    String sValorColumnaE = primeraHoja.getCell(4, i).getContents();
    String sValorColumnaF = primeraHoja.getCell(5, i).getContents();
    String sValorColumnaG = primeraHoja.getCell(6, i).getContents();

    // Solo se crean los hechos que su estado sea Pendiente de crear
    if ( sValorColumnaG.contains ( "Pendiente de crear" )  ) {
        String sConsulta = "CREATE FACT \"" + sValorColumnaC + "\" DESCRIPTION \"" 
                + sValorColumnaF + "\" IN FOLDER \"" + sValorColumnaB + "\" EXPRESSION \"" 
		+ sValorColumnaD + "\" EXPSOURCETABLES \"" + sValorColumnaE 
                + "\" FOR PROJECT \"" + sValorColumnaA + "\";";
        execute(sConsulta);
    }
   
    // Si su estado es otro, informamos que no se crea especificando el numero de fila y el nombre del hecho.
    else {
        printOut( "El hecho con nombre '" + sValorColumnaC + "' de la fila numero " + x 
                             + " no se ha creado por que su estado es '" + sValorColumnaG +"'") ;
    }
    i++;
   x++;
}

Si se observa el código, el procedimiento va leyendo fila por fila todas las columnas y crea un hecho con las especificaciones que contiene el excel.

El procedimiento tiene dos parametros de entrada que debes informar antes de ejecutarlo:

  • sFicheroEntrada: dirección completa de la ubicación del fichero excel (xls)
  • sEncabezado: se debe indicar true si el fichero excel tiene encabezado o false si no lo tiene.

Además antes de ejecutarlo también deberás indicarle donde has guardado el fichero .jar que contiene las clases necesarias para poder leer del fichero excel.

Resultado

El resultado y los mensajes de la ejecución es el siguiente:

¡importante! este procedimiento es posible que no funcione con fichero xlsx. Si es posible convierte tu fichero xlsx a xls para utilizar este procedimiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.

Perfiles en Redes Sociales