Mi gustaria de abrir la planilla abajo y no salvar com estas en su codigo. La gran necesidad, es que quando el usuario generar esa planilla, el deve abrila y no salvala y no se como hacer. Una ayuda es bien venida, gracias. Y como hago para diminuir el tamaño de las celdas? Para que se crie celdas mas delgada y no grande, pero para esto tengo que hacer con que los datos sean del tamaño de la celda, cierto?
Código Delphi
[-]function TF_GeraGridExcel.GridToExcelFile(Grid: TDbGrid; ExcelFile: String;
TotalRegistros: Integer): Boolean;
var
bResult : Boolean;
SavePlace : TBookmark;
i,eline : Integer;
Excel : Variant;
iSheet : Integer;
CorFundo : TColor;
begin
bResult:= False;
if Assigned(Grid.DataSource) then
begin
if Grid.DataSource.DataSet.Active then
begin
try
Excel:= CreateOleObject('Excel.Application');
Excel.Visible:= False;
Excel.WorkBooks.Add;
if (TotalRegistros > 65000) then
begin
if ((TotalRegistros Mod 65000) = 0) then
iSheet := TotalRegistros DIV 65000
else
iSheet := (TotalRegistros DIV 65000) + 1;
if (iSheet > 3) then
For i:= 4 to iSheet do
Excel.WorkBooks[1].Sheets.Add(null, Excel.WorkBooks[1].Sheets[i-1]);
end;
SavePlace:= Grid.DataSource.DataSet.GetBookmark;
Grid.DataSource.DataSet.First;
iSheet := 1;
if not (Grid.DataSource.DataSet.Eof) then
begin
eline:= 1; for i:=0 to (Grid.Columns.Count-1) do
begin
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)] := Grid.Columns[i].Title.Caption;
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].ColumnWidth := Grid.Columns[i].Field.DisplayWidth;
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Font.FontStyle := 'Negrito';
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Interior.Color := (ColorToRgb(Grid.Columns[i].Title.Color));
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Font.Color := (ColorToRgb(Grid.Columns[i].Title.Font.Color));
end;
end;
while not Grid.DataSource.DataSet.Eof do begin
Inc(eline); Application.ProcessMessages;
if (eline > 65000) then
begin
Inc(iSheet);
eline := 1;
for i:=0 to (Grid.Columns.Count-1) do
begin
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)] := Grid.Columns[i].Title.Caption;
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].ColumnWidth := Grid.Columns[i].Field.DisplayWidth;
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Font.FontStyle := 'Negrito';
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Interior.Color := (ColorToRgb(Grid.Columns[i].Title.Color));
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Font.Color := (ColorToRgb(Grid.Columns[i].Title.Font.Color));
end;
Inc(eline);
end;
If (eline mod 2) = 0 then
CorFundo := clInfoBk
else
CorFundo := clAqua;
for i:=0 to (Grid.Columns.Count-1) do
begin
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)] := Grid.Columns[i].Field.AsString;
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Interior.Color := (ColorToRgb(CorFundo));
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Font.Color := (ColorToRgb(Grid.Columns[i].Font.Color));
Excel.WorkBooks[1].Sheets[iSheet].Cells[eline,(i+1)].Borders.Color := (ColorToRgb(clGray));
end;
Grid.DataSource.DataSet.Next;
end;
For i:= 1 to iSheet do
Excel.WorkBooks[1].WorkSheets[i].Range['B1','AQ1000'].Columns.AutoFit;
Grid.DataSource.DataSet.GotoBookmark(SavePlace);
Excel.WorkBooks[1].SaveAs(ExcelFile);
Excel.Quit;
bResult:= True;
except
bResult:= False;
Excel.Quit;
end;
end;
end;
Result := bResult;
end;