 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
_Leo Invitado
|
Publicado: Sab 06 Jul, 2002 1:07 am Asunto: _Leo, acudo a tu ayuda! |
|
|
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 |
|
 |
Nico Invitado
|
Publicado: Sab 06 Jul, 2002 11:24 am Asunto: _Leo, acudo a tu ayuda! |
|
|
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 |
|
 |
Nico Invitado
|
Publicado: Lun 08 Jul, 2002 1:46 pm Asunto: _Leo, acudo a tu ayuda! |
|
|
_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 |
|
 |
Nico Invitado
|
Publicado: Lun 08 Jul, 2002 2:04 pm Asunto: _Leo, acudo a tu ayuda! |
|
|
_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 |
|
 |
_Leo Invitado
|
Publicado: Lun 08 Jul, 2002 3:55 pm Asunto: _Leo, acudo a tu ayuda! |
|
|
| 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 |
|
 |
Nico Invitado
|
Publicado: Lun 08 Jul, 2002 4:53 pm Asunto: _Leo, acudo a tu ayuda! |
|
|
_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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|