Relatório no excel a partir do delphi 7

12/01/2016

5

Tem um projeto que tem monta um dbgrid depois, quero jogá-lo para um relatório no excel. Ele tem ficar com a fig. anexa. Mas não estou conseguindo colocar por data (que é uma das colunas do dbgrid) e também não sei como pular linhas. Pode me ajudar?[img]http://arquivo.devmedia.com.br/forum/imagem/433267-20160112-101347.png[/img]
Responder

Posts

12/01/2016

P2

Bom dia,
Na Query do grid, coloque no select ( order by data).
Na sua rotina de exportação para o excel após o for insira uma linha em branco.

Se precisar de ajuda, post sua rotina do select do grid e a rotina de exportação para o excel

Abraço.
Responder

12/01/2016

Oswaldo Souto

Rotina do grid:

procedure Tfrmprinc.SpeedButtonHorarioClick(Sender: TObject);
begin
DBGrid4.Visible := true;
DBGrid1.Visible := false;
DBGrid2.Visible := false;
qryentsai.Close;
qryentsai.sql.Clear;
qryentsai.sql.Add('SELECT Id_bilhetesentsai, d.descricao, F.Nome, CONVERT(VARCHAR(11),DATA,103) as Data,');
qryentsai.sql.Add('CONVERT(VARCHAR(11),ENTRADA,108) as Entrada, CONVERT(VARCHAR(11),SAIDA,108) AS Saida, CONVERT(VARCHAR(11),DIFERENÇA,108) AS DIFERENÇA FROM BILHETESENTSAI B');
qryentsai.sql.Add('Inner Join funcionarios F on F.cod_pessoa = B.cod_pessoa');
qryentsai.sql.Add('Inner Join departamentos D on D.cod_departamento = F.cod_departamento');
qryentsai.sql.Append('WHERE data BETWEEN :dataini AND :datafin and tipo = 10 ORDER BY DATA');
qryentsai.Parameters.ParamByName('dataini').Value := dtini.DateTime;
qryentsai.Parameters.ParamByName('datafin').Value := dtfin.DateTime;
dtini.Time := hrini.Time;
dtfin.Time := hrfin.Time;
qryentsai.Open;
end;

Rotina do Excel:

procedure Tfrmprinc.SpeedButtonOutroClick(Sender: TObject);

var linha, coluna, aux : integer;
var planilha, x : variant;
var titulo, valorcampo, valorcampo1 : string;

begin
//qryperm.First;
qryentsai.First;
planilha:= CreateoleObject('Excel.Application');
planilha.WorkBooks.add(1);
titulo := 'RELATÓRIO DE DIFERENÇA';
planilha.caption := titulo;
planilha.visible := true;
planilha.WorkBooks[1].worksheets[1].name := titulo;
planilha.WorkBooks[1].worksheets[1].range['a1','E50'{+inttostr(qryentsai.RecordCount+3)}].font.name := 'Arial';
planilha.WorkBooks[1].worksheets[1].range['a3','E50'{+inttostr(qryentsai.RecordCount+3)}].font.size := 11;
planilha.cells[1,1].font.bold := True;
planilha.cells[1,1].font.size := 12;
planilha.cells[1,1] := titulo;

planilha.WorkBooks[1].worksheets[1].range['a3','c3'].font.italic := true;
planilha.WorkBooks[1].worksheets[1].range['a5','e6'].font.bold := true;
planilha.cells[3,1] := 'Departamento';

planilha.cells[5,1] := 'PRODUTO DE HORÁRIO';
planilha.cells[5,3] := 'Rótulos de Coluna';
planilha.cells[6,1] := 'Rótulos de Linha';
planilha.cells[6,3] := 'ENTRADA';
planilha.cells[6,4] := 'SAÍDA';
planilha.cells[6,5] := 'DIFERENÇA';
planilha.cells[3,3] := editdep.text;
planilha.WorkBooks[1].worksheets[1].Range['a7:b7'].MergeCells := true;
planilha.WorkBooks[1].worksheets[1].Range['c5:e5'].MergeCells := true;
planilha.WorkBooks[1].worksheets[1].Range['a7:b7'].font.bold := true;
planilha.WorkBooks[1].worksheets[1].Range['a7:b7'].horizontalalignment := 1;
planilha.WorkBooks[1].worksheets[1].Range['c5:e5'].horizontalalignment := 3;
planilha.WorkBooks[1].worksheets[1].Range['c6'].horizontalalignment := 3;
planilha.WorkBooks[1].worksheets[1].Range['d6:e6'].horizontalalignment := 3;

planilha.WorkBooks[1].worksheets[1].Range['a3:d3'].Borders.Item[$00000009].Weight := 2;
planilha.WorkBooks[1].worksheets[1].Range['a3:d3'].Borders.Item[$00000009].Color := clBlue;
planilha.WorkBooks[1].worksheets[1].Range['a6:e7'].Borders.Item[$00000009].Weight := 2;
planilha.WorkBooks[1].worksheets[1].Range['a6:e7'].Borders.Item[$00000009].Color := clBlue;
planilha.WorkBooks[1].worksheets[1].Range['a7:e7'].Borders.Item[$00000009].Weight := 2;
planilha.WorkBooks[1].worksheets[1].Range['a7:e7'].Borders.Item[$00000009].Color := clBlue;

planilha.WorkBooks[1].worksheets[1].Range['a3:d3'].interior.Color := rgb(214,250,254);
planilha.WorkBooks[1].worksheets[1].Range['a5:e6'].interior.Color := rgb(214,250,254);

for linha := 0 to qryentsai.RecordCount - 1 do
begin

for coluna := 2 to qryentsai.FieldCount-2 do
begin

if coluna = 3 then
valorcampo1 := qryentsai.Fields[linha].AsString;

valorcampo := qryentsai.Fields[coluna].AsString;

planilha.cells[linha + 8,coluna] := valorCampo;
end;

qryentsai.Next;
end;

planilha.columns.Autofit;
planilha.cells[7,1] := ' ' + valorcampo1;
planilha.WorkBooks[1].worksheets[1].Range['a1'].ColumnWidth:= 7;
planilha.WorkBooks[1].worksheets[1].Range['d1'].ColumnWidth:= 14;
planilha.WorkBooks[1].worksheets[1].Range['e1'].ColumnWidth:= 14;
planilha.WorkBooks[1].worksheets[1].Range['c6'].ColumnWidth:= 17;
planilha.WorkBooks[1].worksheets[1].range['c6','c'+inttostr(qryentsai.RecordCount+10)].horizontalalignment := 3;

end;

Fazendo assim o relatório fica dessa forma (que eu não quero, pois a correta é a que postei acima):
[img]http://arquivo.devmedia.com.br/forum/imagem/433267-20160112-103514.png[/img]
Responder

13/01/2016

Ronaldo Filho

Bom dia Grande.

Aqui se não me engano você já percorreu todos os valores da query sem verificar as datas, no caso você teria que percorrer a query verificando a data do primeiro registro e a do próximo até que sejam diferentes, quando forem diferentes vc pula a linha escrevendo a linha da data, em seguida você pega a data do próximo registro para comparar com e continua lendo a query até que a próxima data seja diferente da que você coletou, e repetir o processo novamente.
Responder

13/01/2016

Nilton Braz

Tem um projeto que tem monta um dbgrid depois, quero jogá-lo para um relatório no excel. Ele tem ficar com a fig. anexa. Mas não estou conseguindo colocar por data (que é uma das colunas do dbgrid) e também não sei como pular linhas. Pode me ajudar?[img]http://arquivo.devmedia.com.br/forum/imagem/433267-20160112-101347.png[/img]



Oswaldo Luiz Souto, você conseguiu resolver o seu problema?
Responder

14/01/2016

Oswaldo Souto

Já consegui resolver o problema, obrigado.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira