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 22-02-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 22-02-2005
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Muchas Gracias

Gracias Neftalí por el ejemplo, lo probaré enseguida.
Responder Con Cita
  #3  
Antiguo 26-02-2005
Avatar de JefeNet
JefeNet JefeNet is offline
Miembro
 
Registrado: ago 2004
Posts: 111
Poder: 20
JefeNet Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 27-02-2005
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
Para leerlo en Excel, además del punto y coma yo encerraría cada valor entre comillas dobles.

// Saludos
Responder Con Cita
  #5  
Antiguo 16-03-2005
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Talking 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 , pero no pensè que fuera por eso. , ahora corregiré el probema.

Una vez mas agradezco a ustedes por su ayuda y sus consejos.
Responder Con Cita
  #6  
Antiguo 22-03-2005
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
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!
Responder Con Cita
  #7  
Antiguo 29-11-2006
sebamora sebamora is offline
Miembro
 
Registrado: nov 2006
Ubicación: salta - argentina
Posts: 32
Poder: 0
sebamora Va por buen camino
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

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;
Responder Con Cita
  #8  
Antiguo 29-11-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
sebamora, utiliza TAG's cuando escribas código Delphi, Verás como mejora bastante.
Puedes editar tu mensaje anterior y probarlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 29-11-2006
sebamora sebamora is offline
Miembro
 
Registrado: nov 2006
Ubicación: salta - argentina
Posts: 32
Poder: 0
sebamora Va por buen camino
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

Última edición por Neftali [Germán.Estévez] fecha: 30-11-2006 a las 11:13:49.
Responder Con Cita
  #10  
Antiguo 02-01-2007
abaigorria abaigorria is offline
Registrado
 
Registrado: oct 2006
Posts: 1
Poder: 0
abaigorria Va por buen camino
"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.
Responder Con Cita
  #11  
Antiguo 25-09-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
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...
__________________
BlueSteel
Responder Con Cita
  #12  
Antiguo 25-09-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por BlueSteel Ver Mensaje
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 25-09-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 25-09-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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

Última edición por BlueSteel fecha: 25-09-2007 a las 18:38:50.
Responder Con Cita
  #15  
Antiguo 22-10-2007
Amneris Amneris is offline
Registrado
 
Registrado: oct 2007
Posts: 1
Poder: 0
Amneris Va por buen camino
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.
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 16:50:54.


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