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 

Exportar ListView a Excel

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Exportar ListView a Excel Responder citando

Hola a todos.

¿Existe alguna forma de exportar el contenido de un ListView a un Excel?

Gracias de antemano.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Parece que tengo que empezar por aqui

Código:
Variant Nuevo = CreateOleObject("Excel.Application");


pero me da error de que CreateOleObjetc es un undefined function. ¿Debo añadir alguna librería? Uso el BCB6

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

zankiu escribió:
¿Debo añadir alguna librería? Uso el BCB6

Un dato que se encuentra con gran facilidad en la ayuda del BCB sobre esa función:

    #include<ComObj.hpp>

Y ademas en el foro encontraras muchisimos ejemplos de como controlar Excel utilizando "Automatización OLE".
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola de nuevo. Es la primera vez que toco esto, creo que no he sabido por donde buscar, gracias por el apunte.

He llegado a esto pero... tengo una duda con esta prueba:

Código:
Variant Excel,ColeccionLibros,Libro,ColeccionHojas,Hoja,Celda;
 //Crear un objeto de tipo aplicación excel
 Excel = CreateOleObject("Excel.Application");
 //Accedo a sus propiedades y métodos
 Excel.OlePropertySet("Visible", true);
 //Obtener un objeto que será una colección de objetos libros
 ColeccionLibros=Excel.OlePropertyGet("Workbooks");
 //Creamos los libros
 //La colección está vacía y se añade un libro
 ColeccionLibros.OleProcedure("Add");
 //A partir de la colección se obtiene el primer objeto "Libro"
 Libro=ColeccionLibros.OlePropertyGet("Item",1);
 //A partir de la colección de libros se obtiene una colección de hojas
 ColeccionHojas=Libro.OlePropertyGet("Worksheets");
 //A partir de la colección de hojas se accede a objetos hojas y las nombro
 ColeccionHojas.OlePropertyGet("Item",1).OlePropertySet("Name","prueba1");

 //Se obtiene un objeto hoja, a partir de la colección de hojas
 Hoja=ColeccionHojas.OlePropertyGet("Item",1);
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OlePropertySet("Value",(Variant)this->ListView->Items->Item[1]->Caption);
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,2).OlePropertySet("Value","esto1");


Excel.OlePropertySet("DisplayAlerts",false);
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs","test.xls");
Excel=Unassigned;


El código comentando esto:

Código:
Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OlePropertySet("Value",(Variant)this->ListView->Items->Item[1]->Caption);


exporta correctamente, pero cuando quiero introducir datos del ListView del modo que lo hago, la misma aplicación me saca un error diciéndo "tipo de variable incorrecto"

¿Cómo tengo que introducir los datos para que sean del tipo de dato correcto?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Prueba con:

Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 1, 1).OlePropertySet("Value", ListView->Items->Item[1]->Caption.c_str());

o:

Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 1, 1).OlePropertySet("Value", WideString(ListView->Items->Item[1]->Caption));
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:

Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 1, 1).OlePropertySet("Value", ListView->Items->Item[1]->Caption.c_str());


con lo anterior me exporta sin problemas.

He cambiado la línea a false:

Excel.OlePropertySet("Visible", false);

Tengo dos dudas:

1.¿Cómo puedo cerrar desde código el Excel una vez exportado los datos?

2.¿Cómo puedo modificar el ancho de las columnas?

He probado esto, pero va a ser que no.
Código:
Celda.OlePropertyGet("Column").OlePropertySet("ColumnWidth",(Variant)5);


Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

1.- Excel.OleProcedure("Quit");

2.- Hoja.OlePropertyGet("Columns", 1 /*Nº.Columna*/).OlePropertySet("ColumnWidth", 30 /*Ancho caracteres*/);

o bien:

Variant Celda = Hoja.OlePropertyGet("Cells", 1, 2 /*Nº.columna*/);
Celda.OlePropertySet("ColumnWidth", 30 /*Ancho caracteres*/);

El ancho es en caracteres sin ningún atributo (negrita, etc.) en el caso de fuentes de ancho fijo. Si son de ancho variable será el ancho del carácter '0'.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias _Leo.

He estado buscando por la web y he encontrado más propiedades para darle formato a las celdas así que les echaré un ojo.

Otra duda que me queda, para mejorar el código ¿cómo puedo pasarle una ruta para guadar el documento excel generado? Como está ahora lo guarda por defecto en Mis Documentos. Si quiero que se tenga la opción de pasarle una ruta como sería?

He probado con esto y ok:

Código:
String sPath = ExtractFilePath(Application->ExeName);
//String sPath = "C:\";

String sFicheroGenerado = sPath + "fichero.xls";


pero si quiero una ruta tipo:

Código:
String sPath = "C:\";


No reconoce el carácter y da error ¿cómo debería ser?.

Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:
String sPath = "C:\\";


Saludos. Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Uups! vaya cabecita la mia.
Gracias escafandra Smile
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenos días Smile

Cómo podría chequear antes de exportar que exista la aplicación excel instalada?

Es decir, cuando le doy al botón de exportar antes de que exporte compruebe primero si existe la aplicación y si no, con un ShowMessage me muestre un mensaje de error?

Gracias otra vez.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿Y si lo exportas en otro formato, también compatible con Excel, como puede ser CSV? Es un fichero de texto plano en que los campos se separan conpunto y coma; lo puedes abrir con Excel o con el bloc de notas.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Es una buena idea si no está instalado el excel pero me gustaría saber como podría hacer lo otro Confused

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ya sé cómo!

Código:
 try
 {
  //Ruta de la aplicación
  //El fichero se guarda en la ubicación de la aplicación
  //String sPath = ExtractFilePath(Application->ExeName);
  //String
  sPath = "C:\\";
  //Nombre del archivo que se genera
  //String
  sFicheroGenerado = sPath + "salida1.xlsx";
  //Crea una instancia de Excel
  Excel = CreateOleObject("Excel.Application");

  //Se hace visible (Opcional) ahora está a false para que no sea asi
  Excel.OlePropertySet("Visible", false);
 }
 catch (Exception &exception) // no llegó a abrirse
 {
  Application->MessageBox("Esta aplicación necesita Excel 97 o superior",
                                "Aviso",MB_ICONSTOP);

  return;
 }
 ...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenos días!

Ahora estoy probando con el SaveDialog para que antes de exportar el usuario pueda elegir donde guardar el archivo excel y no pasarlo por código. Por tanto:
Código:

 this->SaveDialogExcel->Title = "Guardar como";
 if (this->SaveDialogExcel->Execute())
 {
  sFicheroGenerado = this->SaveDialogExcel->FileName;
 }


con esto se me abre la ventana del "Guardar como", pero en en Edit que aparece de Tipo de Aplicación aparece en blanco, normalmente ahí aparecen los formatos en los que puedes guardar, cómo puedo hacer que eso también aparezca?

Espero haberme explicado bien. Saludos y gracias!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.