Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
exportar/importar listview a excel

tengo un problemilla que no soy capaz de solucionar.
lo que quiero exactamente es generar un archivo excel existente/no existente introduciendole los datos que tengo en una listview y el caso contrario, importar los datos del archivo y mostrarlos en la listview.

es mi primera pregunta, si no esta muy clara indicarmelo por favor.
muchas gracias.
Responder Con Cita
  #2  
Antiguo 07-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La pregunta está muy clara pero te recomiendo que hagas una búsqueda ya que se ha tratado el tema muchas veces. No específicamente de un ListView pero esto es lo de menos. El punto es que se accede a una hoja de Excel como si de un grid se tratase, celda por celda de manera qe simplemente tienes que asignar a estas celdas el valor correspondiente en el ListView y viceversa.

// Saludos
Responder Con Cita
  #3  
Antiguo 10-05-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Question

He estado leyendo el hilo que me comentaste. A la hora de acceder a las celdas y eso, me ha quedado claro, pero no demasiado a la hora de crear un nuevo archivo XLS, quizá es que no llevo demasiado tiempo con delphi, pero me lio un poco.
Me gustaría guardarlo en un archivo que no exista, mediante un "savedialog".
A continuación pongo el código que estoy utilizando, no se si estará correcto o que, ya me decis si hay algún error o como lo podría hacer.

********************************************************
********************************************************
procedure Texcel.ExportarClick(Sender: TObject);
var
XL : Variant;
fichero : String;
i,j : integer;
begin
i:=0;
j:=0;
savedialog1.Execute;
fichero:=savedialog1.FileName;
if fichero <> '' then
begin
try
XL := CreateOLEObject('Excel.Application');
except
XL.Quit;
showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
raise;
end;
XL.WorkBooks.Add;
while (i < ListView1.Items.Count) do
begin
while (j < 4) do
begin
try
begin
//***** Acceso a las celdas *****//
XL.Cells[i+1,j+1].Value:=ListView1.Items[i].SubItems.strings[j];
j:=j+1;
end;
except
XL.Quit;
showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
raise;
end;
end;
i:=i+1;
j:=0;
end;
try
begin
XL.Save;
end;
except
XL.Quit;
showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
raise;
end;
XL.Quit;
end;
end;
********************************************************
********************************************************

Gracias.

Última edición por weke fecha: 10-05-2004 a las 13:08:42.
Responder Con Cita
  #4  
Antiguo 10-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es imposible leer este código. Te recomiendo que leas el anuncio que aparece al principio de cada foro y que edites tu mensaje usando las etiquetas apropiadas y con la indentación correcta.

// Saludos
Responder Con Cita
  #5  
Antiguo 11-05-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Lo siento mucho, es que cuando puse el código me tenía que ir y no me fije si estaba tabulado o no. Mil disculpas. Ahora te lo pongo en condiciones para ver si hago alguna cosa mal, he estado dandole vueltas otro rato, pero no se que más hacer.

Código:
procedure Texcel.ExportarClick(Sender: TObject);
var
  XL : Variant;
  fichero : String;
  i,j : integer;
  creado:boolean;

begin
  i:=0;
  j:=0;
  creado:=false;
  savedialog1.Execute;
  fichero:=savedialog1.FileName;

  if fichero <> '' then
  begin
	try
	begin
	  XL := CreateOLEObject('Excel.Application');
	  creado:=true;
	end;
	except
	begin
	  XL.Quit;
	  showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
	  raise;
	end;
	end;
 
	XL.WorkBooks.Add;
	while (i < ListView1.Items.Count) do
	begin
	  while (j < 4) do
	  begin
		try
		begin
			//***** Acceso a las celdas *****//
		  XL.Cells[i+1,j+1].Value:=ListView1.Items[i].SubItems.strings[j];
		  j:=j+1;
		end;
		except
		begin
		  XL.Quit;
		  creado:=false;
		  showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
		  raise;
		end;
		end;
	  end;
	  i:=i+1;
	  j:=0;
	end;
 
	if (creado = true) then
	  try
	  begin
		XL.Save;
	  end;
	  except
	  begin
		XL.Quit;
		showmessage('No se pudo guardar el Objecto Excel o se produjo algún error.');
		raise;
	  end;
	  end;
	XL.Quit;
  end;
end;



Espero que ahora este lo suficiente claro, solo llevo una semana registrado y todavía no controlo mucho. Espero que esto sirva para que me puedan sacar de dudas.

Gracias y lo siento, otra vez.
Saludos.

Última edición por weke fecha: 12-05-2004 a las 14:15:09.
Responder Con Cita
  #6  
Antiguo 20-05-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Thumbs up solucionado

Al final he conseguido sacarlo , no era tan difícil.

Mucha gracias de todas formas.

Saludos.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #7  
Antiguo 20-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por weke
Al final he conseguido sacarlo , no era tan difícil.
Pues te invito a que expongas aquí tu solución para que otros puedan beneficiarse de ella cuando se encuentren en una situación similar.

// Saludos
Responder Con Cita
  #8  
Antiguo 21-05-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Thumbs up Solucion

Pues aqui os pongo el código de como lo he hecho.
EXPORTAR:
Código:
 
procedure TF_Export_Import.ExportarClick(Sender: TObject);
var
  Excel : Variant;
  fichero,temp : String;
  i,j : integer;
  creado:boolean;
  Tarj : FRMXTarjeta;
  l1 : TListItem;
begin
  Confirmar.Enabled:=false;
  i:=0;
  j:=0;
  creado:=false;
//***** Rellenamos el listview con los datos *****//
  ListView1.Items.Clear;
  Instalacion.coleccion_tarjetas.inicio;
  While not Instalacion.coleccion_tarjetas.es_fin do begin
	Tarj:=Instalacion.coleccion_tarjetas.get_element();
	l1:=ListView1.Items.Add;
	l1.Caption:=inttostr(ListView1.Items.Count);
	l1.SubItems.Add(Tarj.get_codigo_tarjeta);
	l1.SubItems.Add(Tarj.usuario_duenyo.get_nombre);
	l1.SubItems.Add(Tarj.usuario_duenyo.get_apellidos);
	Instalacion.coleccion_tarjetas.siguiente;
  end;//fin mientras
//***** CREAMOS EL OBJETO EXCEL *****//
  try
  begin
	Excel := CreateOLEObject('Excel.Application');
	Excel.WorkBooks.Add;
	creado:=true;
  end;
  except
  begin
	Excel.Quit;
	showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
	raise;
  end;
  end;  //fin try
//***** RECORREMOS EL LISTVIEW E INSERTAMOS LOS DATOS EN EL OBJETO EXCEL *****//
  Excel.Cells[1,1].Value:='"Codigo Tarjeta"';
  Excel.Cells[1,2].Value:='"Nombre"';
  Excel.Cells[1,3].Value:='"Apellidos"';
  while (i < ListView1.Items.Count) do
  begin
	while (j < 3) do
	begin
	  try
	  begin
		  //***** Acceso a las celdas *****//
		Excel.Cells[i+2,j+1].Value:=ListView1.Items[i].SubItems.strings[j];
		j:=j+1;
	  end;
	  except
	  begin
		Excel.Quit;
		creado:=false;
		raise;
	  end;
	  end;
	end;
	i:=i+1;
	j:=0;
  end;  //fin while
//***** GUARDAMOS EL OBJETO EXCEL *****//
  if (creado = true) then
	try
	begin
	  Excel.Save;
	end;
	except
	begin
	  Excel.Quit;
	  raise;
	end;
	end;  //fin try
  Excel.Quit;
 
  Limpiar.Enabled:=true;
end;
IMPORTAR
Código:
  
procedure TF_Export_Import.ImportarClick(Sender: TObject);
var
  Excel : Variant;
  i : integer;
  l1 : TListItem;
  filename : string;
  lineas : integer;
begin
  i:=2;
  open.FileName:='';
  open.Execute;
  filename:=open.FileName;
  if filename <> '' then
  begin
//***** Creamos el Objeto Ole *****//
	try
	  Excel := CreateOleObject('Excel.Application');
	except
	  Excel.Quit;
	  showmessage('No se pudo crear el Objecto Excel o se produjo algún error.');
	  raise;
	end;
//***** Asignamos el archivo a abrir *****//
	Excel.Workbooks.Open(filename);
//***** Limpiamos la lista *****//
	listview1.Items.Clear;
//***** Obtenemos la ultima linea del archivo excel *****//
	try
	begin
	  Excel.Selection.End[xlDown].Select;
	  lineas := Excel.ActiveCell.Row;
	  Excel.Selection.End[xlUp].Select;
	end;
	except
	begin
	  ShowMessage('No se ha podido localizar la última línea del archivo.');
	  raise;
	end;
	end;
//***** Llenamos el ListView con los datos del archivo excel *****//
	while (i <= lineas) do  //Excel.ActiveCell.Row te calcula la ultima línea del archivo
	begin
		//ShowMessage(inttostr(Excel.ActiveCell.Row));
		//***** Acceso a los datos de las celdas *****//
		L1:=ListView1.Items.Add;
		L1.Caption:=inttostr(ListView1.Items.Count);
		L1.SubItems.Add(Excel.Cells[i,1].Value);
		L1.SubItems.Add(Excel.Cells[i,2].Value);
		L1.SubItems.Add(Excel.Cells[i,3].Value);
		i:=i+1;
	end;
//***** Cerramos el Excel *****//
	  Excel.quit;
	  Confirmar.Enabled:=true;
	  Limpiar.Enabled:=true;
  end;
end;
Espero que os pueda ayudar. Un saludo.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #9  
Antiguo 18-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por wolfran_hack Ver Mensaje
.
Este hilo es de hace 9 años, si tienes algún problema, crea un hilo nuevo y explica detalladamente tu caso, porque no has explicado nada.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:09:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi