Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

_Leo, acudo a tu ayuda!

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

Crea un proyecto nuevo vacio para probar y añadele un TStringGrid (StringGrid1) y un TButton (Button1). Y mete este código en el OnClick del botón:

code:
    // Añadimos: #include <ComObj.hpp>

// Pon en esta variable el nombre y path a tu fichero excel de pruebas
String sArchivo = ExtractFilePath(Application->ExeName) + "prueba.xls";

StringGrid1->ColCount = 11;
StringGrid1->RowCount = 11;
// Dibuja los titulos de las filas y columnas del grid
for (int i=0; i<StringGrid1->ColCount; i++)
StringGrid1->Cells[i+1][0] = static_cast<char>( 'A' + i );
for (int i=1; i<=StringGrid1->RowCount; i++)
StringGrid1->Cells[0][i] = i;

Variant oExcel, oHoja;
oExcel = CreateOleObject("Excel.Application");

// Carga un fichero
oExcel.OlePropertyGet( "Workbooks" ).OleProcedure( "Open", sArchivo.c_str() );
// y selecciona la primera hoja del primer libro
oHoja = oExcel.OlePropertyGet( "Workbooks" ).OlePropertyGet( "Item", 1 )
.OlePropertyGet( "Worksheets" ).OlePropertyGet( "Item", 1 );

/////////////////////////////////////////////////////////////////////////
// Rellena el grid
for (int fila=1; fila <= StringGrid1->RowCount; fila++)
{
for (int columna=1; columna <= StringGrid1->ColCount; columna++)
{
Variant vCelda = oHoja.OlePropertyGet( "Cells", fila, columna );
StringGrid1->Cells[columna][fila] = vCelda.OlePropertyGet( "Value" );
// también podemos leer otros datos de la celda
// como la formula o el formato
// ... = vCelda.OlePropertyGet("HasFormula");
// ... = vCelda.OlePropertyGet("Formula");
// ... = vCelda.OlePropertyGet("NumberFormat");
// etc.
}
}
/////////////////////////////////////////////////////////////////////////

oExcel.OleProcedure( "Quit" );
oExcel = oHoja = Unassigned;


---

Volver arriba
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

Leo, te comento que estuve haciendo varias pruebas con el codigo que me mandaste y anduvo bastante bien.
Por favor, quería saber como hacer para leer la planilla por filas de a una celda a la vez (de izq a derecha y de arriba a abajo, o viceversa), manejando un para de variables enteras para moverme (fila/columna), no lo pude hacer y la verdad que me confundí y comencé a hacer pruebas y ahora no me funciona nada.
Tenés algun ejemplo de esto?
Muchísimas gracias!!!!!
Nico
Volver arriba
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

_Leo, gracias. Anduvo muy bien el ejemplo!!!
Ahora revisaré mi codigo utilizando el tuyo como referencia. Lo que yo quise hacer es armarme una clase para leer la planilla, pero en algún lado debo haber instanciado mal algo porque me exepciones de Ole.
Bueno, nuevamente muchas gracias.
Nico.
Volver arriba
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

_Leo, te hago una pregunta:
Puede haber conflicto al utilizar el Exec o el Ole, porque en el ejemplo que yo realicé (que no me funcionaba) utilicé la forma de "Exec".
Ejemplo:

yo use: Books.Exec(Procedure("Open") << FileNameP);
tu ejemplo: oExcel.OlePropertyGet( "Workbooks" ).OleProcedure( "Open", FileNameP );

Que conviene? Si mezclas los tipos de llamados en la misma ejecucion, puede haber conflictos?
Gracias

Volver arriba
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

Ningún conflicto. La línea:

  oExcel.OlePropertyGet( "Workbooks" ).OleProcedure( "Open", sArchivo.c_str() );

se puede convertir usando Exec como:

  Variant oLibros = oExcel.Exec( PropertyGet("Workbooks") );
  oLibros.Exec( Procedure("Open") << sArchivo.c_str() );

o bien si no necesitas utilizar mas adelante el objeto "Workbooks" y quieres abreviar un poco:

  oExcel.Exec(PropertyGet("Workbooks")).Exec(Procedure("Open")<<sArchivo.c_str());

Volver arriba
Mensaje    Asunto: _Leo, acudo a tu ayuda! Responder citando

_Leo, la alegría y el enojo vinieron a mí cuando encontré el error que yo pensé que era de Ole... un problema con los cursores (fila,columna) que manejaba...
Ahora anda todo!
Tenés idea si se puede saber el tipo general de una columna o celda sin tener que estar mapeando los formatos como #,##0.00, "hh:mm:ss", etc. Es decir, si hay alguna forma de saber si es Texto, numero o fecha, sin importar la mascara...
Nuevamente muchas gracias!!!
Nico
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.