Programación General > C++ Builder

 Importar Archivo Excel A Builder

<< < (2/2)

curro9:
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:
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:
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:
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:
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:

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa