Solucionado: Exportar todas las tablas en archivos separados


([N1] Spicer) #1

Estimados,

Luego de algunos dolores de cabeza logré hacer un JS que exporte todos los datos de todas las tablas, en un archivo separaddo CSV para luego editar. Se aceptan obviamente sugerencias de mejoras.

Adjunto el script


------------------------------- INICIO ------------------------------
// ExportarTodasLasTablas.js
// Todas las tablas del proyecto y heredados

// Importamos las clases que vamos a necesitar
importClass( “VTextFile” );
importClass( “VFile” );

// Inicializamos varibles

var tablas = “”;
var fichero = “”;
var senda = “c:/temp”;
var file = “”;

var theMainProject = theApp.mainProjectInfo();
var list = new VRegisterList(theRoot);

if ( theMainProject )
{

for( var nIndex=0; nIndex < theMainProject.allTableCount(); nIndex++ )
{

// Objeto vTableInfo de la tabla
var tableInfo = theMainProject.allTableInfo( nIndex );

// Obtengo el idRef. Notar que debe ser idRef y no al revés
var Ref = tableInfo.idRef();

// Asigno una lista a la tabla
var AsigOk = list.setTable(Ref);

if ( tableInfo )
{

// Montamos la cabecera
for( var field = 0; field < tableInfo.fieldCount(); field++ )
{
file += tableInfo.fieldId( field ).toLowerCase() ;
if ( tableInfo.fieldCount() - 1 > field )
file += “|”;
}

// Añadimos fin de línea
file += “\n”;

// Cargo la lista
var CargaOK = list.load(“ID”,[]);
var NumRegistros = list.size();

// Recorremos la lista montando el fichero
for( var reg=0; reg < NumRegistros; reg++ )
{

var register = list.readAt( reg );

if (register.isOK() )
{

for( var field = 0; field < tableInfo.fieldCount(); field++ )
{
file += register.fieldToString( field );
if ( field < tableInfo.fieldCount() - 1 )
file += “|”;
}
// Añadimos fin de línea
if ( reg < NumRegistros - 1 )
file += “\n”;
}
}

// Grabo el archivo

// Declaro el objeto archivo
var archivo = new VTextFile( “c:\temp\exportTablas\” + tableInfo.id() + “.csv”);
alert (archivo.fileName());

// Abro archivo
if ( archivo.open( VFile.OpenModeWriteOnly || VFile.OpenModeTruncate) )
{
archivo.write( file );

// Cierro
archivo.close();

}
else
{
// Si no ha sido posible abrir el fichero se muestra error
alert(“Error. No se ha podido generar el fichero.\n” + “\n” + archivo.error() + “\nFinaliza el proceso.”);

}

} // if (tableInfo)

} // for (bucle ntablas)

} // if (theMainProject)

----------------------------------- FIN ------------------------


([N1] percyleoncio) #2

Buen aporte amigo Spicer, habrá que probarlo.


([N1] METALBOT) #3

Hola, buenos días.

No consigo hacer funcionar este script, lo he incluido en el proyecto y lo lanzo con un proceso, pero no hace nada.

¿ Hay que modificar el código js?

Muchas gracias.


([N1] METALBOT) #4

He encontrado que hay que sustituir ciertos carácteres al pegar el código: las dobles comillas y el signo de la resta.
Se borra y se reescribe y con la ruta de los ficheros creada, empieza a funcionar.

Un saludo.