PDA

Ver la Versión Completa : exportar/importar listview a excel


weke
07-05-2004, 09:13:02
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.

roman
07-05-2004, 16:50:04
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

weke
10-05-2004, 08:56:08
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.

roman
10-05-2004, 16:43:14
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

weke
11-05-2004, 07:16:19
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.


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.

weke
20-05-2004, 10:45:36
Al final he conseguido sacarlo :D, no era tan difícil.

Mucha gracias de todas formas.

Saludos.

roman
20-05-2004, 16:37:17
Al final he conseguido sacarlo :D, 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

weke
21-05-2004, 07:20:15
Pues aqui os pongo el código de como lo he hecho.
EXPORTAR:

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

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. :)

Casimiro Notevi
18-08-2013, 09:38:06
. 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.