Hola amigos, tengo un form para hacer un presupuesto que tiene una grilla conectada a un ClientDataSet, como tabla temporal.
Luego un button "Imprimir" guarda los datos en la base de datos, pero a la vez toma un archivo base de excel, que es un archivo guardado en el directorio de la aplicacion con una plantilla (osea un formato previo) y yo sobreescribo las celdas correspondientes para que se complete la tabla de productos el cliente solicitado, etc.. y si se completan. Pero cuando salgo de excel y vuelvo a abrir el archivo de presupuesto (en el proceso hago una copia de la plantilla y la guardo en una carpeta presu) no se ven los datos, solo la plantilla.
La verdad no se que puede ser.
Codigo boton imprimir:
Código Delphi
[-]procedure TForm4.SpeedButton5Click(Sender: TObject);
var
Excel, Libro, Hojal: OleVariant;
Plantilla:string;
origen,s,destino,nombre,fechaf,fechai,fechac:string;
l,x:integer;
cantidad,preciououble;
idc,ide,ids,idprodu:Integer;
a:TServerMethods1Client;
begin
a:=TServerMethods1Client.Create(ClientModule1.SQLConnection1.DBXConnection);
if (Grillapresu.DataSource.DataSet.RecordCount>0) then
begin
if Form2.Edit1.Text<>'' then
idc:=ClientModule1.qscli.ParamByName('idcli').AsInteger
else
idc:=1;
if cempleados.KeyValue=null then
begin
ShowMessage('seleccione el empleado responsable.');
end
else
begin
ide:=cempleados.KeyValue;
end;
ids:=StrToInt(pre.ReadString('sucursal','id','1'));
fechac:=FormatDateTime('yyyy/mm/dd',Now);
fechai:=FormatDateTime('yyyy/mm/dd',Now);
fechaf:=FormatDateTime('yyyy/mm/dd', IncDay(Now,15));
a.nuevopresupuesto(idc,ide,ids,fechac,fechai,fechaf);
l:=Grillapresu.DataSource.DataSet.RecordCount;
with ClientModule1.cdspresu do
begin
First;
while not Eof do
begin
cantidad:=ClientModule1.cdspresucantidad.AsFloat;
preciou:=ClientModule1.cdspresuprecio.AsFloat;
idprodu:=ClientModule1.cdspresuidproducto.AsInteger;
a.nuevodetallepresupuesto(idprodu,cantidad,preciou);
Next;
end;
EmptyDataSet;
end;
nombre:=FormatDateTime('yyyy-mm-dd,hh-mm-ss',Now) + 'presu.xlsx';
origen:=ExtractFilePath(Application.ExeName)+ 'presu.xlsx';
destino:=ExtractFilePath(Application.ExeName) +'pres\' + nombre;
CopyFile(Pchar(origen),Pchar(destino),True);
Excel := CreateOleObject('Excel.Application');
Plantilla:=destino;
Excel.SheetsInNewWorkbook := 1;
Libro := Excel.Workbooks.Open(Plantilla); Hojal := Libro.Worksheets[1];
Hojal.Cells[3,6] := '100';
Hojal.Cells[4,4] := Edireccion.Text;
Hojal.Cells[5,4] := Eciudad.Text;
Hojal.Cells[6,4]:=Edit1.Text;
if (Form2.Edit1.Text<>'') then
begin
Hojal.Cells[12,8]:=ClientModule1.qscli.ParamByName('idcli').AsInteger;
Hojal.Cells[15,5]:=ClientModule1.qsclinombreyape.AsString;
end;
Hojal.Cells[10,8]:=Eemititdo.Text;
Hojal.Cells[13,8]:='efectivo';
Hojal.Cells[14,8]:=Evalido.Text;
Excel.Visible := true;
Hojal.SaveAs(nombre);
end
else
begin
ShowMessage('no hay productos');
end;
end;
En la primera parte guardo los datos en bd con el servidor DataSnap y en luego cargo la plantilla.