Ejemplo: convertir filas Excel en archivos XML
Los archivos Excel pueden consistir en varias hojas de cálculo con estructuras distintas, es decir, cada una con un número y orden de columnas distinto. Por otro lado, también hay archivos Excel que son hojas de cálculo con una estructura idéntica y que sólo difieren en el nombre y la fecha.
Con MapForce puede configurar las asignaciones para poder extraer datos de forma flexible de cualquiera de los formatos de hojas de cálculo que acabamos de mencionar:
1.Puede hacer que cada hoja de cálculo individual aparezca como una estructura distinta en la asignación. Este método es útil si cada hojas de cálculo tiene una estructura diferente. Puede asignar los datos que provengan de cualquier celda de cualquiera de las hojas de cálculo de un archivo Excel.
2.También puede tratar a todas las hojas de cálculo de un archivo como si fueran una sola. Este método sólo es útil si todas las hojas de cálculo tienen la misma estructura y tiene la ventaja de que permite trazar menos conexiones en la asignación. Como en este caso se asume que cada una de las hojas de cálculo es igual, sólo tiene que trazar las conexiones desde cada columna una sola vez, independientemente de en qué hoja de cálculo aparezca.
Para configurar un componente Excel para cualquiera de estos dos métodos:
1.Agregar el archivo Excel a la asignación con el comando de menú Insertar | Excel 2007+ y consultar el apartado Agregar archivos Excel 2007+ como componentes de la asignación).
2.Hacer clic en el botón situado junto a la primera hoja de cálculo. Se abre este cuadro de diálogo:
3.Ahora tiene dos opciones:
a.Para que la estructura de cada hoja de cálculo aparezca por separado, asegúrese de que marca la casilla Mostrar las hojas de cálculo por su nombre. Esta es la opción predeterminada.
b.Para tratar a todas las hojas de cálculo como un único componente asignable desmarque la casilla Mostrar las hojas de cálculo por su nombre.
Puede encontrar un diseño de asignación de muestra que ilustra estos dos métodos en: <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\ConvertExcelRows.mfd. Esta asignación muestra dos estrategias distintas de leer datos de un archivo Excel. Esta asignación produce varios resultados no relacionados, por lo que el botón Vista previa aparece en la barra de título de cada uno de los componentes de destino. Recuerde hacer clic en este botón antes de hacer clic en la pestaña Resultados para acceder a la vista previa del archivo de salida correspondiente.
El archivo Excel de origen se llama Altova.xlsx y consiste en dos hojas de cálculo: "Admin" y "Development". Recuerde que las hojas de cálculo tienen una estructura idéntica y sólo los datos son distintos (razón por la que existe más de un método de acceder a esos datos).
La parte superior de la asignación ilustra cómo leer datos del archivo Excel tratando cada hoja de cálculo como una estructura distinta. Si hace clic en el botón que hay junto al elemento Admin observará que la casilla Mostrar las hojas de cálculo por su nombre está seleccionada. Las dos hojas de cálculo, "Admin" y "Development", aparecen de forma explícita en el componente de origen como elementos secundarios de Workbook.
ConvertExcelRows.mfd (primera parte)
La asignación anterior convierte datos de dos hojas de cálculo Excel en archivos XML. Debe generar un archivo XML aparte por cada registro de persona de cada fila en cada una de las hojas de cálculo de origen. El nombre del archivo debe servir para identificar el nombre del departamento y también debe tener un identificador numérico. Por ejemplo, el archivo Admin1.xml almacena los detalles de la primera persona (fila) en la hoja de cálculo "Admin" y así sucesivamente. Esto lo conseguimos siguiendo estos pasos:
1.La función concat produce el nombre de archivo para cada uno de los archivos XML de destino. Esta función combina (en este orden) el nombre de cada departamento, el número de fila Excel y la cadena de texto ".xml".
2.La conexión del resultado de la función concat al elemento de destino Archivo: <dynamic> genera un archivo nuevo por cada elemento en la secuencia entrante al ejecutar la asignación. En este ejemplo, la secuencia entrante contiene todas las filas de la hoja de cálculo Excel de origen, por lo que se genera un archivo XML nuevo por cada fila Excel.
Si quiere configurar un componente de destino para que genere nombres de archivo dinámicos, haga clic en el botón Archivo/cadena y seleccione Usar nombres de archivo dinámicos dados por la asignación. Para más información consulte la sección Procesar varios archivos de entrada o salida simultáneamente.
A continuación puede ver la segunda parte de la asignación ConvertExcelRows.mfd. Esta parte de la asignación obtiene exactamente el mismo resultado que la primera parte pero de forma más concisa. Observe que las conexiones de la asignación son muchas menos.
ConvertExcelRows.mfd (segunda parte)
La lógica de la asignación es casi idéntica a la anterior, es decir:
1.Por cada fila de cada una de las hojas de cálculo se crea un elemento Person en el destino.
2.La función concat genera el nombre de cada uno de los archivos de destino.
3.El componente de destino ahora genera los nombres de archivo de forma dinámica.
La única diferencia es que la iteración pasa por las hojas de cálculo del archivo Excel de origen de forma implícita, ya que no es necesario que aparezca la estructura de cada hoja por separado ni trazar las conexiones de la asignación de forma individual para cada una de ellas. Esto se debe a que hemos configurado el componente Excel de origen para que trate todas las hojas de cálculo como si fueran una sola; si hace clic en el botón que hay junto al elemento Worksheets, observará que la casilla Mostrar las hojas de cálculo por su nombre no está marcada.
En conclusión, en este apartado ha podido observar las diferencias entre los datos de asignación de hojas de cálculo Excel individuales y hojas que se tratan como si fueran una sola. No olvide que para usar el segundo método todas las hojas de cálculo deben tener la misma estructura. En este ejemplo se asume que en cada hoja de cálculo la primera columna contiene el nombre, la segunda el apellido, y así sucesivamente.