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 21-02-2005
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Post 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.
Responder Con Cita
  #2  
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.275
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
  #3  
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
  #4  
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
  #5  
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
  #6  
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
  #7  
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
  #8  
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
  #9  
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.275
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
  #10  
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
  #11  
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
  #12  
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
  #13  
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.275
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
  #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
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
  #15  
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
  #16  
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 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
__________________
BlueSteel
Responder Con Cita
  #17  
Antiguo 26-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.275
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
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;
__________________
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
  #18  
Antiguo 26-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
gracias.. ya lo habia intentado y me funciono bien...
__________________
BlueSteel
Responder Con Cita
  #19  
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 10:08:02.


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