<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />mi necesidad es: apilar una tabla con una selección dinámica (bueno, más o menos) de la columna a apilar.
Resolví con una tabla de configuración en la que los nombres de las columnas que se apilan se almacenan como valores, luego hago un "obtener valores" y
Asigna el resultado a una cadena. Por último, alimento esta cadena para apilar el comando.
funciona, pero ...
cada vez en mi registro dice
Errores encontrados. en el acceso o evaluación de 'columnas', Argumento incorrecto (Eval (d))
, columnas (Eval (d)) "
sin eval no se ejecuta, con eval funciona perfectamente pero contamina mi registro. ¿Alguien sabe por qué?
Aquí está el código:
conf3 = abierto ("\ aquí está la tabla de configuración");
// cargar config, es un archivo de Excel que deben editar los usuarios para elegir la "clase" que desean en el informe final
// estos conjuntos de clases son bastante estables, y la mayoría de las veces no se han tocado desde la última ejecución, pero a veces hay que agregar o cambiar una clase
// es simplemente así: column1: negro blanco rojo column2: rojo blanco etc.
d = Columna (conf3, i) << obtener valores;
// i es el índice
// Lo hago en un ciclo, cada ejecución para una tabla diferente para ser apilada leyendo una columna diferente para un conjunto de pila diferente
// Aquí obtengo valores de la i-ésima columna de la configuración, y si lo hago con la cadena d -> ¿es bueno?
snowhite = Abrir ("\ jmp_tables \ snowhite.jmp", invisible);
// cargar la tabla para ser apilada
snowhite << pila (
columnas (eval (d)),
Columna de la etiqueta de origen ("clase"), Columna de datos apilados ("densidad"), Nombre ("Columnas no apiladas") (Mantener (: División,: Identificación del lote,: Identificación del dispositivo,)), Tabla (s) de salida) ;
Sí, supongo que podría ser un problema cuando me di cuenta de que había algún "" valor.
desafortunadamente, como usted dijo, la lista proviene de una columna de archivo excel, que inserta automáticamente una celda vacía al final para tener todas las columnas de la misma altura, por lo que los "" valores son inevitables.
Intentaré tu solución, gracias!
y sí, no estaba correcto en mi explicación: d no es una cadena sino una lista de cadenas, porque el comando de pila necesita una lista, no una cadena.
Supongo re no es una cadena aquí, pero una lista de cadenas como << obtener valores produce una lista (o matriz para variables continuas). Si los conjuntos de clases en conf3 difieren en el número de elementos, la tabla tendrá tantas filas como el conjunto más grande. Entonces para algunas elecciones re contendrá elementos de cadena vacíos, es decir "". Esa puede ser la causa del error informado (las columnas deben tener un nombre que no sea "").
Con la línea de código a continuación puede eliminar todas las instancias de "" de re antes de apilar. Puede ser una forma más fácil de ordenar las listas, pero esto debería funcionar.
Mientras ( Contiene ( re , "" ) > 0 , Eliminar de ( re , Contiene ( re , "" ) ) ) ;