fergape
15-02-2007, 19:11:13
La parte de código que esta en rojo es una exportacion y esa funciona de 10 y la de codigo azul es otra exportacion y es la que no funciona..
procedure Trf_IncDocAAN.btnExportarClick(Sender: TObject);
var
LineNumber, LCID : Integer;
LineString : String;
begin
inherited;
if radiogroup1.ItemIndex = 0 then
begin
with SaveDialog1 do
begin
FileName := '';
Filter := 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'xls';
Title := 'Exportando a Excel';
if execute then
begin
qryIncDocmensual.Open;
LCID := GetUserDefaultLCID;
with ExcelApplication1 do
begin
connect;
try
visible[LCID] := true;
Workbooks.Add(EmptyParam,LCID);
Range['A1','T1'].Value2 := VarArrayOf(['Mes','Documento','Apellido y Nombre','Rama de Enza.','Código del cargo','Carga Horaria','Tipo De Cargo',
'Sit. de revista','Subv.','Asist.','Código Liquid./ Clave Identif.','Clave Identif.','Haberes Brutos','Haberes Líquidos','Años A.',
'Obra Soc.','Sexo','Cuil','CUE','Niveles de Enza.']);
// se definen formatos de las celdas
with Range['A1','T1'] do
begin
HorizontalAlignment := xlcenter;
VerticalAlignment := xlBottom;
Wraptext := false;
orientation := 0;
ShrinkTofit := false;
MergeCells := false;
font.Bold := true;
end;
qryIncDocMensual.First;
LineNumber := 1;
//envia datos a excel
while not qryIncDocMensual.Eof do
begin
//antiguedad
if qryIncDocMensualtotalAntig.IsNull then
antiguedad := qryIncDocMensualAntig.Value
else
antiguedad := qryIncDocMensualtotalAntig.Value;
// horas del cargo
hscarga := qryIncDocMensualhoras_carga.AsInteger;
if hscarga < 10 then
hs := '''0'+inttostr(hscarga)+'00'
else
hs := inttostr(hscarga)+'00';
if qryIncDocMensualhoras_carga.AsInteger <= 0 then
hstotal:= inttostr(qryIncDocMensualcarga_c.AsInteger)
else
hstotal := hs;
//DNI
if strtoint(trim(qryIncDocMensualdni.Value)) < 10000000 then
dni := qryIncDocMensualsexodni.Value
else
dni :=qryIncDocMensualdni.AsString;
//cambio de periodo en el mes con el retroactivo
if qryIncDocMensualperiodoRetro.IsNull then
periodo := qryIncDocMensualperiod.AsInteger
else
periodo := qryIncDocMensualPeriodoRetro.Value;
Inc(LineNumber);
LineString := IntToStr(LineNumber);
Range['A'+LineString,'T'+LineString].Value2:=
VarArrayOf([periodo,dni,qryIncDocMensualname_full.Value,
qryIncDocMensualrama.Value,qryIncDocMensualcod_cargo.Value,hstotal,
qryIncDocMensualPersonal.Value,qryIncDocMensualSitRev.Value,qryIncDocMensualsubv.Value,
qryIncDocMensualAsist.Value,qryIncDocMensualcodigoliquid.Value,qryIncDocMensualclave.Value,
formato(qryIncDocMensualbruto.AsFloat,6),formato(qryIncDocMensualneto.AsFloat,6),
antiguedad,qryIncDocMensualobra_social.Value,qryIncDocMensualsexo.Value,
qryIncDocMensualcuil.Value,qryIncDocMensualcode_denominational.Value,qryIncDocMensualnivel.Value]);
qryIncDocMensual.Next;
end;
Range['A1','T'+ LineString].AutoFormat(xlRangeAutoFormatList1,true,true,false,true,true,true);
Range['A1','T'+ LineString].Columns.AutoFit;
Range['A1','T'+ LineString].HorizontalAlignment := xlcenter;
ActiveWorkbook.SaveAs(filename,null,null,null,false,false,xlnochange,
xlUserResolution,false,null,null,LCID,0);
Quit;
finally
disconnect;
end;// fin del with Range
end;//fin del with ExcelApplication1
end;// fin del if execute
end;//fin del with SaveDialog1
end;//fin del if
if radiogroup2.ItemIndex = 0 then
begin
with SaveDialog1 do
begin
FileName := '';
Filter := 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'xls';
Title := 'Exportando a Excel';
if execute then
begin
qryPrimerSemestre.Open;
LCID := GetUserDefaultLCID;
with ExcelApplication1 do
begin
connect;
try
visible[LCID] := true;
Workbooks.Add(EmptyParam,LCID);
Range['A1','R1'].Value2 := VarArrayOf(['Codigo APS','Mes','Documento','Apellido y Nombre','Rama Enza.','Código del Cargo','Carga Horaria',
'Tipo de Cargo','Sit. Revista','Subvención','Asist.','Clave identif.','Años de Antiguedad','O. social',
'Sexo','Cuil','CUE','Nivel']);
// se definen formatos de las celdas
with Range['A1','R1'] do
begin
HorizontalAlignment := xlcenter;
VerticalAlignment := xlBottom;
Wraptext := false;
orientation := 0;
ShrinkTofit := false;
MergeCells := false;
font.Bold := true;
end;
qryPrimerSemestre.First;
LineNumber := 1;
//envia datos a excel
while not qryPrimerSemestre.Eof do
begin
// horas del cargo
if (qryPrimerSemestreCarga_horaria.IsNull) and (qryPrimerSemestreCarga_C.IsNull) then
hsTotal := 'Nulo' else
begin
if qryPrimerSemestrecarga_horaria.AsInteger <= 0 then
hstotal := qryPrimerSemestrecarga_c.AsString
else
hstotal := qryPrimerSemestrecarga_horaria.AsString;
end;
//DNI
if strtoint(trim(qryPrimerSemestredni.Value)) < 10000000 then
dni := qryPrimerSemestresexodni.Value
else
dni := qryPrimerSemestredni.AsString;
//antiguedad
if qryprimerSemestretotalantig.IsNull then
antiguedad := qryPrimerSemestreAntig.Value
else
antiguedad := qryPrimerSemestretotalAntig.Value;
//RAMA ENZA.
if qryPrimerSemestrerama2.IsNull then
ramaEnza := qryprimerSemestrerama.Value
else
ramaEnza := qryPrimerSemestreRama2.Value;
//Asistencia
if qryPrimerSemestreasist.IsNull then
asist := qryPrimerSemestreasist1.AsInteger
else
asist := qryPrimerSemestreasist.AsInteger;
//mayores a 30
if asist > 30 then
asist := 30;
Inc(LineNumber);
LineString := IntToStr(LineNumber);
Range['A'+LineString,'R'+LineString].Value2:=
VarArrayOf([qryPrimerSemestreenrollment_code.value,qryPrimerSemestreperiod.Value,dni,qryPrimerSemestrename_full. Value,ramaEnza,
qryPrimerSemestrecod_cargo.Value,hstotal,qryPrimerSemestrepersonal.Value,qryPrimerSemestresitRev.Val ue,
qryPrimerSemestresubv.Value,asist,qryPrimerSemestreclave.Value,antiguedad,
qryPrimerSemestreobra_social.Value,qryPrimerSemestresexo.Value,qryPrimerSemestreCuil.Value,qryPrimer Semestrecode_denominational.Value,
qryPrimerSemestrenivel.Value]);
qryPrimerSemestre.Next;
end;
Range['A1','R'+ LineString].AutoFormat(xlRangeAutoFormatList1,true,true,true,true,true,true);
Range['A1','R'+ LineString].Columns.AutoFit;
Range['A1','R'+ LineString].HorizontalAlignment := xlcenter;
ActiveWorkbook.SaveAs(FileName,null,null,null,false,false,xlnochange,
xlUserResolution,false,null,null,LCID,0);
Quit;
finally
disconnect;
end;// fin del with Range
end;//fin del with ExcelApplication1
end;// fin del if execute
end;//fin del with SaveDialog1
end//fin del if radiogroup2
else
begin
with SaveDialog1 do
begin
FileName := '';
Filter := 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'xls';
Title := 'Exportando a Excel';
if execute then
begin
qrySegundoSemestre.Open;
LCID := GetUserDefaultLCID;
with ExcelApplication1 do
begin
connect;
try
visible[LCID] := true;
Workbooks.Add(EmptyParam,LCID);
Range['A1','R1'].Value2 := VarArrayOf(['Codigo APS','Mes','Documento','Apellido y Nombre','Rama Enza.','Código del Cargo','Carga Horaria',
'Tipo de Cargo','Sit. Revista','Subvención','Asist.','Clave identif.','Años de Antiguedad','O. social',
'Sexo','Cuil','CUE','Nivel']);
// se definen formatos de las celdas
with Range['A1','R1'] do
begin
HorizontalAlignment := xlcenter;
VerticalAlignment := xlBottom;
Wraptext := false;
orientation := 0;
ShrinkTofit := false;
MergeCells := false;
font.Bold := true;
end;
qrySegundoSemestre.First;
LineNumber := 1;
//envia datos a excel
while not qrySegundoSemestre.Eof do
begin
// horas del cargo
if (qrySegundoSemestreCarga_horaria.IsNull) and (qrySegundoSemestreCarga_C.IsNull) then
hsTotal := 'Nulo' else
begin
if qrySegundoSemestrecarga_horaria.AsInteger <= 0 then
hstotal := qryPrimerSemestrecarga_c.AsString
else
hstotal := qrySegundoSemestrecarga_horaria.AsString;
end;
//DNI
if strtoint(trim(qrySegundoSemestredni.Value)) < 10000000 then
dni := qrySegundoSemestresexodni.Value
else
dni := qrySegundoSemestredni.AsString;
//antiguedad
if qryprimerSemestretotalantig.IsNull then
antiguedad := qrySegundoSemestreAntig.Value
else
antiguedad := qrySegundoSemestretotalAntig.Value;
//RAMA ENZA.
if qrySegundoSemestrerama2.IsNull then
ramaEnza := qrySegundoSemestrerama.Value
else
ramaEnza := qrySegundoSemestreRama2.Value;
//Asistencia
if qrySegundoSemestreasist.IsNull then
asist := qrySegundoSemestreasist1.AsInteger
else
asist := qrySegundoSemestreasist.AsInteger;
//mayores a 30
if asist > 30 then
asist := 30;
Inc(LineNumber);
LineString := IntToStr(LineNumber);
Range['A'+LineString,'R'+LineString].Value2:=
VarArrayOf([qrySegundoSemestreenrollment_code.value,qrySegundoSemestreperiod.Value,dni,qrySegundoSemestrename_fu ll.Value,ramaEnza,
qrySegundoSemestrecod_cargo.Value,hstotal,qrySegundoSemestrepersonal.Value,qrySegundoSemestresitRev. Value,
qrySegundoSemestresubv.Value,asist,qrySegundoSemestreclave.Value,antiguedad,
qrySegundoSemestreobra_social.Value,qrySegundoSemestresexo.Value,qrySegundoSemestreCuil.Value,qrySeg undoSemestrecode_denominational.Value,
qrySegundoSemestrenivel.Value]);
qrySegundoSemestre.Next;
end;
Range['A1','R'+ LineString].AutoFormat(xlRangeAutoFormatList1,true,true,true,true,true,true);
Range['A1','R'+ LineString].Columns.AutoFit;
Range['A1','R'+ LineString].HorizontalAlignment := xlcenter;
ActiveWorkbook.SaveAs(FileName,null,null,null,false,false,xlnochange,
xlUserResolution,false,null,null,LCID,0);
Quit;
finally
disconnect;
end;// fin del with Range
end;//fin del with ExcelApplication1
end;// fin del if execute
end;//fin del with SaveDialog1
end;//fin del else
qryIncDocMensual.Close;
qrySegundoSemestre.Close;
qryprimersemestre.Close;
end;
EDITO (Neftalí): Añadidas TAG's Delphi.
vtdeleon
15-02-2007, 23:14:23
Saludos
Bueno...despues de quemarme las pestañas, no he visto la causa por el que te dá ese error de memoria, pero te puedo ayudar a que reduzca considerablemente el codigo, ademas de aconsejarte a que Identes el mismo, porque es dificilisimo leerlo.
Comencemos, veo que hay codigo repetidos, dependiendo del RadioGruop que esté marcado, el cual asigna y query 'X'. Esto lo puedes reducir con la declaracion de una variable (por ejemplo) con la clase Tquery
Declaramos la variable
var
DbUso:Tquery;//Un TQuery Por Ejemplo u otra clase Padre
Comenzamos a reducir y reutilizar el codigo
//Partire de la zona que está en rojo
case radiogroup2.ItemIndex of
0: DbUso:=qryPrimerSemestre;
1: DbUso:=qrySegundoSemestre;
End;
//Asignamos el Query a DbUso, dependiendo del valro de Radiogroup
//entonces cambiamos qrySemestreprincipal y qrySegundosemetre por DbUso
with SaveDialog1 do
begin
FileName := '';
Filter := 'Excel files|*.XLS;All Files|*.*';
DefaultExt := 'xls';
Title := 'Exportando a Excel';
if execute then
begin
DbUso.Open;
LCID := GetUserDefaultLCID;
with ExcelApplication1 do
begin
connect;
try
visible[LCID] := true;
Workbooks.Add(EmptyParam,LCID);
Range['A1','R1'].Value2 := VarArrayOf(['Codigo APS','Mes','Documento','Apellido y Nombre','Rama Enza.','Código del Cargo','Carga Horaria', 'Tipo de Cargo', 'Sit. Revista','Subvención','Asist.','Clave identif.','Años de Antiguedad','O. social',
'Sexo','Cuil','CUE','Nivel']);
// se definen formatos de las celdas
with Range['A1','R1'] do
begin
HorizontalAlignment := xlcenter;
VerticalAlignment := xlBottom;
Wraptext := false;
orientation := 0;
ShrinkTofit := false;
MergeCells := false;
font.Bold := true;
end;
DbUso.First;
LineNumber := 1;
//envia datos a excel
while not DbUso.Eof do
begin
// horas del cargo
if (DbUso.FieldByName('Carga_horaria').IsNull) and (DbUso.FieldByName('Carga_C').IsNull) then
hsTotal := 'Nulo' else
begin
if DbUso.FieldByName('carga_horaria').AsInteger <= 0 then
hstotal := DbUso.FieldByName('carga_c').AsString
else
hstotal := DbUso.FieldByName('carga_horaria').AsString;
end;
//DNI
if strtoint(trim(DbUsodni.Value)) < 10000000 then
dni := DbUso.FieldByName('sexodni').Value
else
dni := DbUso.FieldByName('dni').AsString;
//antiguedad
if DbUso.FieldByName('totalantig').IsNull then
antiguedad := DbUso.FieldByName('Antig').Value
else
antiguedad := DbUso.FieldByName('totalAntig').Value;
//RAMA ENZA.
if DbUso.FieldByName('rama2').IsNull then
ramaEnza := DbUso.FieldByName('rama').Value
else
ramaEnza := DbUso.FieldByName('Rama2').Value;
//Asistencia
if DbUso.FieldByName('asist').IsNull then
asist := DbUso.FieldByName('asist1').AsInteger
else
asist := DbUso.FieldByName('asist').AsInteger;
//mayores a 30
if asist > 30 then
asist := 30;
Inc(LineNumber);
LineString := IntToStr(LineNumber);
Range['A'+LineString,'R'+LineString].Value2:=
VarArrayOf([DbUso.FieldByName('enrollment_code').value,DbUso.FieldByName('period').Value,dni, DbUso.FieldByName('name_full').Value, ramaEnza,DbUso.FieldByName('cod_cargo').Value, hstotal,DbUso.FieldByName('personal').Value,DbUso.FieldByName('sitRev').Value, DbUso.FieldByName('subv').Value,asist,DbUso.FieldByName('clave').Value,antiguedad, DbUso.FieldByName('obra_social').Value,DbUso.FieldByName('sexo').Value, DbUso.FieldByName('Cuil').Value,DbUso.FieldByName('Semestrecode_denominational').Value, DbUso.FieldByName('nivel').Value]);
DbUso.Next;
end;
Range['A1','R'+ LineString].AutoFormat(xlRangeAutoFormatList1,true,true,true,true,true,true);
Range['A1','R'+ LineString].Columns.AutoFit;
Range['A1','R'+ LineString].HorizontalAlignment := xlcenter;
ActiveWorkbook.SaveAs(FileName,null,null,null,false,false,xlnochange,
xlUserResolution,false,null,null,LCID,0);
Quit;
finally
disconnect;
end;// fin del with Range
end;//fin del with ExcelApplication1
end;// fin del if execute
end;
Ya con esto, te has ahorrado la mitad del codigo (La parte azul), DbUso puede contener el 1ro o 2do qry.
Fijate bien, que he realizado algunos cambios , como por ejemplo utilizar FieldbyName(). para asignar valor a los campos.
No soy muy bueno explicando, espero que enteindas. Analizalo un poco:)
Saludos
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.