Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Stringrid a Excel (https://www.clubdelphi.com/foros/showthread.php?t=18738)

darkerbyte 21-02-2005 23:38:27

Stringrid a Excel
 
Hola a todos.

Soy algo nuevo en delphi, asì que Espero que alguien me pueda ayudar con este problema:

Quiero exportar los datos de un StringGrid a un archivo de excel, he encontrado metodos para hacerlo pero lo hacen desde un Ttable o utilizando hojas de base de datos, pero lo unico que quiero es guardar los datos de mi string grid en un archivo de excel, no quiero mandar ni formato ni tipo ni nada, simplemente los datos en texto plano. Tambien me he dado cuenta que para ello tu versiòn de excel debe coincidir con la del server del programa, es cierto? de que manera se puede arreglar?

Alguien me puede dar alguna idea de como hacerlo o si tienen algun ejemplo sean tan amables de enviarmelo. Gracias de antemano.

Neftali [Germán.Estévez] 22-02-2005 10:22:41

Creo que lo más fácil es que exportes el contenido del StringGrid a CSV (archivo separado por comas); Éstos ficheros se abren directamente desde Excel sin problemas (independientemente de la versión).

Ésta código guarda el contenido del StringGrid en el portapapeles, pero cambiando la última línea (1)/(2) se puede hacer que lo guarde en un fichero .CSV

Código Delphi [-]
 var
   i, j:Integer;
   Str:String;
   TS:TStrings;
 begin
  // Inicializamos
 Str := '';
 // Para cada línea de las selecciondas
 for i := (StringGrid1.Selection.Top) to (StringGrid1.Selection.Bottom) do begin
   // Si no es la 1ª linea, añadimos un salto de línea
   if (i <> StringGrid1.Selection.Top) then begin
     Str := Str + #13#10;
   end;
   // Para cada elemento dentro de la línea (celdas)
   for j := 0 to (StringGrid1.Rows[i].Count - 1) do begin
     // Si no es la primera celda, añadimos un separados
     if (j <> 0) then begin
       Str := Str + #9;
     end;
     // Construimos la cadena
     Str := Str + StringGrid1.Rows[i].Strings[j];
   end;
   
   // (1) La guardamos en el clipboard (como texto)
   Clipboard.AsText := Str
   // (2) Para guardarloa fichero...
   TS := TStringList.CReate()
   TS.Text := Str;
   TS.SAveToFile('c:\salida.csv');
   TS.Free;
 end;

darkerbyte 22-02-2005 16:13:44

Muchas Gracias
 
Gracias Neftalí por el ejemplo, lo probaré enseguida.

JefeNet 26-02-2005 20:25:17

Hola
 
si, efectivamente pero debo aclarar que no es por coma (,) si no por punto y coma (;). Puedes crear un archivo txt conde cada columna este separada por ;
y luego le cambias la extencion a csv.

seria algo asi


1;2;3;4
5;6;7;8

en exel quedaria

1 2 3 4
5 6 7 8


suerte

roman 27-02-2005 02:31:37

Para leerlo en Excel, además del punto y coma yo encerraría cada valor entre comillas dobles.

// Saludos

darkerbyte 16-03-2005 02:28:52

Agradecimiento
 
Ya me habia dado cuenta que el formato CSV guardandolo con comas algunas veces se abria correctamente en Excel y algunas veces aparecian todos los datos en una sola columna :confused: , pero no pensè que fuera por eso. :D , ahora corregiré el probema.

Una vez mas agradezco a ustedes por su ayuda y sus consejos.

fmonte 22-03-2005 23:09:13

Cita:

Empezado por Neftali
Creo que lo más fácil es que exportes el contenido del StringGrid a CSV (archivo separado por comas); Éstos ficheros se abren directamente desde Excel sin problemas (independientemente de la versión).

Ésta código guarda el contenido del StringGrid en el portapapeles, pero cambiando la última línea (1)/(2) se puede hacer que lo guarde en un fichero .CSV

Código Delphi [-]
var
i, j:Integer;
Str:String;
TS:TStrings;
begin
// Inicializamos
Str := '';
// Para cada línea de las selecciondas
for i := (StringGrid1.Selection.Top) to (StringGrid1.Selection.Bottom) do begin
// Si no es la 1ª linea, añadimos un salto de línea
if (i <> StringGrid1.Selection.Top) then begin
Str := Str + #13#10;
end;
// Para cada elemento dentro de la línea (celdas)
for j := 0 to (StringGrid1.Rows[i].Count - 1) do begin
// Si no es la primera celda, añadimos un separados
if (j <> 0) then begin
Str := Str + #9;
end;
// Construimos la cadena
Str := Str + StringGrid1.Rows[i].Strings[j];
end;
 
// (1) La guardamos en el clipboard (como texto)
Clipboard.AsText := Str
// (2) Para guardarloa fichero...
TS := TStringList.CReate()
TS.Text := Str;
TS.SAveToFile('c:\salida.csv');
TS.Free;
end;

excelente codigo, justo lo q estaba buscando! muchisimas gracias!

sebamora 29-11-2006 01:41:27

stringgrid a excel sin dramas
 
aqui hay un codigo q pasa de un stringgrid a excel xo necesita tener el excel instalado, aunque ni cuenta te das q lo usa :D

procedure tform1.guardar(archivo:string);
var
celi,celj:integer;
begin
try
try
ExcelSave.Connect;
ExcelWB2.ConnectTo(ExcelSave.Workbooks.Add(EmptyParam,0));
ExcelWS2.ConnectTo(ExcelWB2.Worksheets[1] as _Worksheet);
stringgrid1.Visible:=false;
progressbar1.Visible:=true;
progressbar1.Min:=1;
progressbar1.Position:=1;
progressbar1.Max:=stringgrid1.ColCount*stringgrid1.RowCount;
for celi:=1 to stringgrid1.ColCount do
begin
for celj:=1 to stringgrid1.RowCount do
begin
progressbar1.Position:=progressbar1.Position+1;
ExcelWS2.Cells.Item[celj,celi].NumberFormat:='@';// formato de texto
ExcelWS2.Cells.Item[celj,celi].value:=stringgrid1.Cells[celi, celj];
end;
end;
ExcelWB2.SaveAs(archivo, //nombre para guardar (string)
xlNormal,'','',
EmptyParam,EmptyParam,0, EmptyParam, EmptyParam, EmptyParam,EmptyParam,
EmptyParam,0);
stringgrid1.Visible:=true;
progressbar1.Visible:=false;
except
Application.MessageBox('Error al guardar el archivo','Alerta',MB_ICONWARNING);
end;
Finally
ExcelWB2.Close;
ExcelSave.Quit;
ExcelWS2.Disconnect;
ExcelWB2.Disconnect;
ExcelSave.Disconnect;
end;
end;


donde insertamos los sgtes componentes en el form:

ExcelSave: TExcelApplication;
ExcelWB2: TExcelWorkbook;
ExcelWS2: TExcelWorksheet;
ProgressBar1: TProgressBar;
StringGrid1: TStringGrid;

Neftali [Germán.Estévez] 29-11-2006 11:26:32

sebamora, utiliza TAG's cuando escribas código Delphi, Verás como mejora bastante.
Puedes editar tu mensaje anterior y probarlo.

sebamora 29-11-2006 19:56:23

hola neftali perodon por no poner tags, no tenia idea, aqui va el mismo ejemplo con tags para ver como sale. sds

Código Delphi [-]
procedure tform1.guardar(archivo:string);
var
celi,celj:integer;
begin
try
try
ExcelSave.Connect;
ExcelWB2.ConnectTo(ExcelSave.Workbooks.Add(EmptyParam,0));
ExcelWS2.ConnectTo(ExcelWB2.Worksheets[1] as _Worksheet);
stringgrid1.Visible:=false;
progressbar1.Visible:=true;
progressbar1.Min:=1;
progressbar1.Position:=1;
progressbar1.Max:=stringgrid1.ColCount*stringgrid1.RowCount;
for celi:=1 to stringgrid1.ColCount do
begin
for celj:=1 to stringgrid1.RowCount do
begin
progressbar1.Position:=progressbar1.Position+1;
ExcelWS2.Cells.Item[celj,celi].NumberFormat:='@';// formato de texto
ExcelWS2.Cells.Item[celj,celi].value:=stringgrid1.Cells[celi, celj];
end;
end;
ExcelWB2.SaveAs(archivo, //nombre para guardar (string)
xlNormal,'','',
EmptyParam,EmptyParam,0, EmptyParam, EmptyParam, EmptyParam,EmptyParam,
EmptyParam,0);
stringgrid1.Visible:=true;
progressbar1.Visible:=false;
except
Application.MessageBox('Error al guardar el archivo','Alerta',MB_ICONWARNING);
end;
Finally
ExcelWB2.Close;
ExcelSave.Quit;
ExcelWS2.Disconnect;
ExcelWB2.Disconnect;
ExcelSave.Disconnect;
end;
end;




donde insertamos los sgtes componentes en el form:

Código Delphi [-]
ExcelSave: TExcelApplication;
ExcelWB2: TExcelWorkbook;
ExcelWS2: TExcelWorksheet;
ProgressBar1: TProgressBar;
StringGrid1: TStringGrid;
P\D: si necesitan codigo para cargar desde excel a un stringgrid tambien tengo, solo avisen

abaigorria 02-01-2007 16:29:59

"P\D: si necesitan codigo para cargar desde excel a un stringgrid tambien tengo, solo avisen"

Podrias postear este codigo, de cargar en un stringgrid un exel, disculp La molestias.

BlueSteel 25-09-2007 16:58:39

Cita:

Empezado por Neftali (Mensaje 78775)
Creo que lo más fácil es que exportes el contenido del StringGrid a CSV (archivo separado por comas); Éstos ficheros se abren directamente desde Excel sin problemas (independientemente de la versión).

Ésta código guarda el contenido del StringGrid en el portapapeles, pero cambiando la última línea (1)/(2) se puede hacer que lo guarde en un fichero .CSV


Hola Neftali. estaba revisando este codigo, funciona bien, pero tengo un pequeño inconveniente.. Mi StringGrid posee 3 filas y solo me almaceno 1 en el archivo .csv

tienes alguna idea de que pueda ser.. lo único que hice fue cambiar a la funcion en nombre de StringGrid1 por Grilla.... lo demás lo tengo todo igual...

Neftali [Germán.Estévez] 25-09-2007 18:01:43

Cita:

Empezado por BlueSteel (Mensaje 233624)
Mi StringGrid posee 3 filas y solo me almaceno 1 en el archivo .csv
tienes alguna idea de que pueda ser.. lo único que hice fue cambiar a la funcion en nombre de StringGrid1 por Grilla.... lo demás lo tengo todo igual...

Efectivamente.
Si te fijas el bucle for tiene lo siguiente:

Código Delphi [-]
for i := (StringGrid1.Selection.Top) to (StringGrid1.Selection.Bottom) do begin

Trabaja con las líneas seleccionadas. Haz la prueba seleccionando con el ratón las tres filas.
Si deseas que siempre exporte todo, utiliza la propiedad RowCount para recorrerlas todas.

BlueSteel 25-09-2007 18:27:52

ya lo solucione...

tube que cambiar esto
Código Delphi [-]
for i := (StringGrid1.Selection.Top) to (StringGrid1.Selection.Bottom) do

por esto otro
Código Delphi [-]
 
 For i := 0 to Grilla.RowCount-1 do

BlueSteel 25-09-2007 18:30:23

Neftali

no me habia fijado que habias respondido.. y se me habia ocurrido cambiar esas lineas...

cual es el comando para que las columnas en vez de separarlas por espacio las separe por coma "," o por punto y coma... ";"

ando buscando las equivalencias.. por que supongo que el #9 equivale al espacio

ahh.. y se me olvidava.. estoy tratando de abrir el archivo en notepad desde delphi.. con el shellexecute.. pero como le digo que archivo es ?

tengo esto

Código Delphi [-]
Shellexecute(0, 'open', pchar('D:\Sistemas\BCI\Internet.csv'), '', '' , SW_Shownormal);
pero quiero decir que esto me lo abra por el Notepad y no por el Excel...

BlueSteel 25-09-2007 22:29:02

ya pude abrir el archivo con el notepad...

lo hice así

Código Delphi [-]
 
Shellexecute(0, 'open', pchar('Notepad.exe'), pchar(' D:\Sistemas\BCI\Internet.csv'), '' , SW_Shownormal);

solo me falta saber como le pongo que en el archivo, las columnas sean separadas por punto y como ";"..

gracias

Neftali [Germán.Estévez] 26-09-2007 10:54:37

Cita:

Empezado por BlueSteel (Mensaje 233809)
solo me falta saber como le pongo que en el archivo, las columnas sean separadas por punto y como ";"

Creo que ese cambio es más sencillo que el anterior. Cambia lo que hay en rojo por el caracter que quieras utilizar como separador.

Código Delphi [-]
     // Si no es la primera celda, añadimos un separados
     if (j <> 0) then begin
       Str := Str + CARACTER;
     end;

BlueSteel 26-09-2007 16:59:41

gracias.. ya lo habia intentado y me funciono bien... :p

Amneris 22-10-2007 17:11:41

Exportar StringGrid a OpenOffice
 
Hola!

Alguien tiene alguna solucion para editar y enviar datos a OpenOffice Calc. Sin q se requiera guardar el archivo.

Gracias.


La franja horaria es GMT +2. Ahora son las 02:48:49.

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