• Viernes 19 de Abril de 2024, 08:35

Autor Tema:  Importar Archivo Excel A Builder  (Leído 8304 veces)

curro9

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Importar Archivo Excel A Builder
« en: Jueves 23 de Febrero de 2006, 16:28 »
0
Hola, necesito imoprtar un archivo Excel a Builder 6 para procesar los datos que tiene y generar informes, pero no se como hacerlo, a ver si alguien me echa una mano

saludos

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Importar Archivo Excel A Builder
« Respuesta #1 en: Jueves 23 de Febrero de 2006, 17:42 »
0
Navegando en Internet encontré lo siguiente, la verdad nunca lo he probado y no se si funcione pero supongo que te servirá para darte una idea.


Tengo el siguiente codigo y solo me funciona con la primera fila, pruebalo y me dices si te funciona correctamente, o bien que error puedo tener.

el problema radica cuando habilito la linea
oSheet.Exec(PropertySet("Cells") << iFilaAx << iColumAx << String(100));

int Colum, Fila, MaxFila = 10, MaxColum = 3;
int iFilaAx, iColumAx;
int iMaxValueToWrite = 65535, iValueToWrite=0, iAuxiliar;
String sValor;

Variant oExcel, oSheet;

try
{
oExcel = GetActiveOleObject("Excel.Application");
}
catch(EOleSysError &E)
{
ShowMessage("Error: no se encontró EXCEL abierto.");
return;
}

// -------- Selecciona la hoja activa
oSheet = oExcel.Exec(PropertyGet("ActiveSheet"));
if (oSheet.IsEmpty())
{
ShowMessage("No hay ninguna hoja activa");
return;
}

//Escribir en la columna A, B y C hasta la fila 10
for(Fila = 1; Fila <= MaxFila; Fila++)
{
for(Colum = 1; Colum <= 3; Colum++)
{
iAuxiliar = iValueToWrite;
Memo1->Lines->Add("Fila " + String(Fila) + " (" + String(MaxFila) + ")" + " Colum " + String(Colum) + " (" + String(MaxColum) + ")");
iFilaAx = Fila;
iColumAx = Colum;
oSheet.Exec(PropertySet("Cells") << iFilaAx << iColumAx << String(100));
// iValueToWrite++;

// if(iValueToWrite == iMaxValueToWrite) iValueToWrite = 0;
}
}
oExcel = oSheet = Unassigned;


Suerte!...
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

curro9

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #2 en: Jueves 23 de Febrero de 2006, 22:26 »
0
gracias lo probaré

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #3 en: Jueves 2 de Marzo de 2006, 12:40 »
0
Hola, respecto al Excel yo he estado trabajando con esto hace unas semanas y he tenido muchos problemas, porque encontraba codigos que se suponía que funcionaban y luego daban fallos.
Yo personalmente he probado este código con builder6. Lo que necesita tener instalado es, obviamente, el excel y el soporte del lenguaje Macro VBA.
Te envío el proyecto y espero que no tengas ningún problema.

Saludos,
Paulados.

P.D: Los trozos que hay de código comentado con comentarios en alemán es del código del que cogí el ejemplo que me funcionó. Te lo dejo por si te sirve de algo.

P.D: No se si el código que ha mandado el otro chaval funciona, la verdad es que no lo he mirado ni probado, pero si te da problemas prueba con el que te envío.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

curro9

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #4 en: Sábado 4 de Marzo de 2006, 20:30 »
0
Gracias tio, aunque he encontrado otra forma un poco mas aparatosa, asi que esta retocandola me servirá. Gracias

curro9

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #5 en: Sábado 4 de Marzo de 2006, 21:31 »
0
paulados, creo q el código que me has puesto sirve solo para exportar de builder a excel, pero para importar un archivo y procesar esos datos no, porque al abrir el archivo solo pone q se va a abrir un archivo excel, pero no lo abre, ni tampoco procesa datos de el.

saludos

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #6 en: Lunes 6 de Marzo de 2006, 10:42 »
0
Si que se leen datos del archivo excel. Al principio se abre el archivo excel.xls y se lee el valor de la celda [1,1]
    int fila = 1, columna = 1;
    Variant cell = hoja.OlePropertyGet("Cells", fila, columna);
    String valor = cell.OlePropertyGet("Value");
    ShowMessage(valor);

Y después se guarda un valor en su lugar y se guarda en el fichero value.xls:
    AnsiString datOut = "1,1Cambiado";
    cell.OlePropertySet("Value",datOut.c_str());
    ShowMessage(valor);
    //------- Cerramos Excel
    excel.OlePropertyGet("Workbooks").OlePropertyGet( "Item" , 1).OleProcedure("SaveAs" , (path+"\\value.xls").c_str());

Siento no haber puesto más comentarios en el código, pero tenía prisa. Pero el ejemplo creo que es completo, breve y simple pero completo, se abre un archivo de excel, se lee un valor, se cambia y se guarda en otro fichero.

Si tienes algún problema me avisas y te respondo a las dudas que tengas y pueda resolver.

Ciao,
Paulados.

curro9

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #7 en: Lunes 6 de Marzo de 2006, 11:57 »
0
He estado revisando el codigo y sigo creyendo q no procesa el dato del excel original, veamos:

// Inicializa el excel
    excel = CreateOleObject( "Excel.Application" );
    // Lo hace visible
    excel.OlePropertySet( "Visible" , false );

// Aquí lo unico que hace es crear un objeto excel, q se llama "excel" pero q no tiene ninguna relacion con el fichero excel que quiero procesar.


// Escoge archivo a abrir
    AnsiString fileIn = path + "\\excel.xls";
    ShowMessage("Abriendo: " + fileIn);

// Aqui lo unico que hace es declarar y definir una varibale fileIn que tiene el valor del path del fichero q quiero modificar, y tambien muestar un mesaje por pantalla con ese path pero el fichero no esta abierto, simplemenet he cogido su path y lo es mostrado.

 // Crea una hoja nueva
    excel.OlePropertyGet( "Workbooks" ).OleFunction("Add");
    hoja = excel.OlePropertyGet("ActiveSheet");
  // Fijate que hoja es una hoja de la variable excel, que recordemos que no tiene nada que cver con nuestro fichero y que por tanto está vacía.

    //------- Leemos el contenido de una celda y lo mostramos
    int fila = 1, columna = 1;
    Variant cell = hoja.OlePropertyGet("Cells", fila, columna);
    String valor = cell.OlePropertyGet("Value");
// Aqui lo que hace es obtener el valor de la celda 1,1 pero de la hoja de la variable excel pero esa hoja esta vacía, y por eso al ejecutar el ShowMEssage sale en blanco el valor.

    AnsiString datOut = "1,1Cambiado";  // Esto es lo que escribe
    cell.OlePropertySet("Value",datOut.c_str());
    ShowMessage(valor);

// Vamos yo lo veo claro, el archivo original nunca se llega a abrir, y las modificaciones se hacen sobre una hoja vacía creada por nosotros...

tu no lo ves así?

juanma

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #8 en: Martes 7 de Marzo de 2006, 10:12 »
0
Creo que curro9 lo explica perfectamente paso a paso...

Falta abrir el fichero:
// Abrimos el libro:        
excel.OlePropertyGet("Workbooks").OleProcedure("Open", fileIn.c_str());

// referenciamos a la 1ª hoja
hoja = excel.OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);

//------- Leemos el contenido de una celda y lo mostramos
int fila = 3, columna = 1;
cell = hoja.OlePropertyGet("Cells", fila, columna);

// ...

Saludos

yrinilla

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Importar Archivo Excel A Builder
« Respuesta #9 en: Martes 26 de Junio de 2007, 23:20 »
0
Me sirvio mucho su discusion!

Estoy haciendo un programa en C++ Builder estadistico, y una de las forma de leer los datos es a partir de un archivo de excel.

Lo hace perfecto pero solo si le digo el numero de datos a leer (Solo si estan en la primera columna).

Hay alguna forma de que se pueda indicar mediante un boolean mientras recorra cada celda de la columna que ya no hay datos?

Lo hice con un while y verificando que la celda este en ' ' y se guinda.

Me ayudan???  :hola: