PDA

Ver la Versión Completa : Ancho de celdas al exportar a excel


Pascual Montes
01-06-2005, 02:01:30
Hola colegas, estoy exportando el contenido de un dbgrid obvio que esta
legado a un query, el detalle es que si exporta todas las columnas, pero
toma por default una longuitud fija a las celdas, Agradezco mucho si me
ilustran en como cambiar el tamaño o longuitud de las celdas en excel.


este codigo lo tome de aqui (clubdelphi.com) y lo adapte a mi codigo


with data.q1, data.Q1.SQL do
begin
Close;
Open;
if IsEmpty then
begin
MessageDlg('No existen datos que reportar!', mtWarning,[mbOk], 0);
Exit;
end;
TRY
excel := CreateOleObject('Excel.Application');
EXCEPT
ShowMessage('Excel no se pudo iniciar.');
exit;
END;
excel.Visible := true;
First;
fila := 1;
excel.Workbooks.Add;
//Poner los títulos
for columna := 0 to DbGrid1.Columns.Count-1 do
excel.Cells[fila,columna + 1].Value := DbGrid1.Columns[columna].Title.Caption;
fila:=3;
//Desengachar controles para agilizar
DisableControls;
TRY
while not(eof) do
begin
for columna := 0 to DbGrid1.Columns.Count-1 do

excel.Cells[fila,columna + 1].Value := FieldByName(DbGrid1.Columns
[columna].FieldName).asString;

Next;
inc(fila);
end;
EXCEPT
ShowMessage('Atención, se produjo un error en la transmisión.');
END;
EnableControls;
end;
muchas gracias por el tiempo , bye :D

mminorm
01-06-2005, 06:45:19
Por casualidad tu no me podrias decir como hago lo inverso a eso ke estas preguntando, osea como exporto algo de excel 2003 a algún campo(edit,listbox,combobox) de delphi 7.0

jgutti
01-06-2005, 14:35:52
excel.Columns[2].ColumnWidth :=20;
esto determina el ancho de 20 para toda la columna B

Pascual Montes
01-06-2005, 18:13:52
listo muchas gracias con eso solucione todo

mminor referente a lo que me preguntas de como hacer a la inversa
de exportar de excel hacia delphi, se me ocurre algo sencillo
a groso modo.

1. en excel exportas el contenido de tus celdas a formato ascii (texto)
en un formato predeterminado

2. en delphi lees ese archivo que generas en ascii , leyendo por bloques
es decir por pedasos obvio que cada bloke seria un campo de tu tabla
delphi o de una array o de variables de memoria o de lo que sea.

3. pasas el contenido que leiste a una tabla o el medio que necesites.
y lo guardas y/o manipulas a tu antojo.

ejemplo
en excel generas un archivo ascii con un formato parecido a esto

01 juan lopez 6850154
02 miria prado 5874522.
03 casimiro v 6855441

04 jose cota 552414
esto es un archivo ascci delimitado por espacio es decir que despues del
espacio empieza otro campo como aqui que contiene
primero un numero consecutivo, luego el nombre y por ultimo el numero de telefono.

despues en delphi lees este archivo texto de la manera siguiente.

procedure xxxxxxxxxxxx;

var
txt: textfile;
caracter: char;
cadena:string;
x:integer;

begin
assingfile(txt, 'c:\mis archivos\reporteexcel.txt');
reset(txt);
cadena:='';

for x:=1 to length(txt) do begin // hasta el tamaño del archivo ascii
//verifica no recuerdo si asi se optiene el tamaño del archivo texto .

do while caracter <> #32 do begin //mientras caracter leido no igual espacio
//verifica se puede comparar caracter <> #32 o caracter <> ' '
readln(txt, caracter); //lee siguente caracter del archivo ascii
cadena:=cadena+caracter; //acumula caracteres
end;
//aqui ya leyo el contenido de un campo completo ahora lo pasamos a
un campo de una tabla

tabla1campox.value:=cadena; //copiar valor campo a tabla
end; // fin del ciclo for

end;

Espero te sirva esto colega
cualquier cosa estamos en contacto en msn
mtpedro@hotmail.com (mtpedro@hotmail.com)

mminorm
01-06-2005, 20:07:20
Muchas gracias por la idea Pascual Montes, espero me sirva. Cualkier cosa espero no t moleste t estaria preguntando mas acerca del tema