Peguei esta dica aqui na lista.

//PARA MESCLAR FAÇA
FArquivoExcel.Workbooks[1].WorkSheets[1]
.Range['A1:C1'].Merge;

Espero ter ajudado.

----- Original Message -----
From: "Oswaldo Ricardo da Rocha Jr" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 12, 2004 7:29 AM
Subject: [delphi-br] Gerar planilha no Excel com fórmulas



Pessoal.

Estou gerando uma planilha no Excel utilizando o Delphi, mas preciso de um
exemplo de como mesclar células e como inserir fórmulas pois a planilha
gerada poderá ser usada para realizar simulações, e se eu simplesmente fizer
todos os cálculos e gerar a planilha com os números prontos, invialibilará o
processo todo.

Exemplo de rotina:
============================================================================
======
procedure TF_Bordero.BtOkClick(Sender: TObject);
var
   Diretorio, cCodigo, cEmpresa, cCNPJ, Arquivo: String;
   planilha, linha, titulos : integer;
   nADValoren, nISS: Extended;
   TotalTitulo,TotalComprado,TotalADValoren,TotalISS, TotalDed: Currency;
   WinExcel, Workbook, Sheet, Range: OleVariant;
   ArqConf : TIniFile;
begin
   if pnlStatus.BevelOuter = bvLowered then
      begin
         Bordero_Especial;
         exit
      end;

   // Abre Parametros
   ArqConf := TIniFile.Create(ExtractFilePath(Application.Exename) +
'ArqConf.Ini');
   Diretorio   :=
ArqConf.ReadString('Docs','Dir',ExtractFilePath(Application.Exename));
   cEmpresa    := ArqConf.ReadString('DadosEmpresa','Nome','');
   cCNPJ       := ArqConf.ReadString('DadosEmpresa','CNPJ','');
   nADValoren  :=
StrtoFloat(ArqConf.ReadString('Indices','ADValoren','00,00'));
   nISS        := StrToFloat(ArqConf.ReadString('Indices','ISS','00,00'));
   ArqConf.Free;

   // Abre borderô, de acordo com o dialogo.
   DM_Sysflex.qryBordero.Close;
   DM_Sysflex.qryBordero.ParamByName('Ano').asInteger := seAno.Value;
   DM_Sysflex.qryBordero.ParamByName('Mes').asInteger :=
(cbMes.ItemIndex+1);
   DM_Sysflex.qryBordero.ParamByName('Valor').asCurrency := edtValor.Value;
   DM_Sysflex.qryBordero.ParamByName('Anob').asInteger := seAno.Value;
   DM_Sysflex.qryBordero.ParamByName('Mesb').asInteger :=
(cbMes.ItemIndex+1);
   DM_Sysflex.qryBordero.Open;

   if DM_Sysflex.qryBordero.RecordCount > 0 then
      begin
         // Cria objeto principal de controle do Excel
         WinExcel := GetOrCreateObject('Excel.Application');

         WinExcel.Visible := true;

         Workbook := WinExcel.Workbooks.add;

         planilha := 0;
         linha := 0;
         titulos := 0;
         TotalComprado := 0;
         TotalTitulo := 0;

         DM_Sysflex.qryBordero.First;

         cCodigo := DM_Sysflex.qryBordero.FieldbyName('CodCli').asString;

         While not DM_Sysflex.qryBordero.eof do
            begin
               if DM_Sysflex.qryBordero.FieldbyName('CodCli').asString <>
cCodigo then
                  begin
                     // Totalização

Totaliza(Sheet,linha,TotalTitulo,TotalComprado,nADValoren,nISS);

                     linha := 0;
                     titulos := 0;
                     TotalComprado := 0;
                     TotalTitulo := 0;
                     cCodigo :=
DM_Sysflex.qryBordero.FieldbyName('CodCli').asString;
                  end;

               if linha = 0 then
                  begin
                     inc(planilha);
                     if Workbook.Sheets.Count < planilha then
                        Sheet := WorkBook.Sheets.add
                     else
                        Sheet := WorkBook.Sheets[planilha];

                     // Renomeia planilha
                     Sheet.Name :=
DM_Sysflex.qryBordero.FieldByName('Codcli').asString + '-' +

copy(DM_Sysflex.qryBordero.FieldByName('Nomecli').asString,1,10);

                     // Ajusta Colunas
                     Range :=Sheet.Range['A1','A10'];
                     Range.ColumnWidth := 8.43;

                     Range :=Sheet.Range['B1','B10'];
                     Range.ColumnWidth := 14;

                     Range :=Sheet.Range['C1','C10'];
                     Range.ColumnWidth := 11.86;

                     Range :=Sheet.Range['D1','D10'];
                     Range.ColumnWidth := 14.29;

                     Range :=Sheet.Range['E1','E10'];
                     Range.ColumnWidth := 13;

                     // Inicio do cabeçalho
                     Sheet.cells[1,2].Value := 'BORDERO DE MOVIMENTO
MENSAL';
                     Sheet.cells[1,2].Font.Bold := True;
                     Sheet.cells[1,2].Font.Size := 10;

                     Sheet.cells[3,2].Value := 'MÊS DE ' + uppercase(
cbMes.Items[cbMes.ItemIndex] ) +
                                               ' DE ' +
inttostr(seAno.Value);
                     Sheet.cells[3,2].Font.Bold := True;
                     Sheet.cells[3,2].Font.Size := 10;

                     Sheet.cells[5,2].Value := 'TERMO ADITIVO AO CONTRATO DE
FOMENTO MERCANTIL';
                     Sheet.cells[5,2].Font.Bold := True;
                     Sheet.cells[5,2].Font.Size := 10;

                     Sheet.cells[7,1].Value := 'Contrato de Fomento
Mercantil nº';
                     Sheet.cells[7,1].Font.Bold := false;
                     Sheet.cells[7,1].Font.Size := 8;

                     Sheet.cells[7,3].Value :=
DM_Sysflex.qryBordero.FieldByName('Contrato').asString + '-' +
                                               chr(65+cbMes.ItemIndex)+
copy(inttostr(seAno.Value),3,2);
                     Sheet.cells[7,3].Font.Bold := false;
                     Sheet.cells[7,3].Font.Size := 8;

                     Sheet.cells[7,4].Value := 'Data Assinatura:';
                     Sheet.cells[7,4].Font.Bold := false;
                     Sheet.cells[7,4].Font.Size := 8;

                     Sheet.cells[7,5].Value := edtAssin.Date;
                     Sheet.cells[7,5].Font.Bold := false;
                     Sheet.cells[7,5].Font.Size := 8;
                     Sheet.cells[7,5].NumberFormat := 'dd/mm/aaaa';

                     Sheet.cells[8,1].Value := 'Contratante:';
                     Sheet.cells[8,1].Font.Bold := false;
                     Sheet.cells[8,1].Font.Size := 8;

                     Sheet.cells[8,2].Value :=
DM_Sysflex.qryBordero.FieldByName('Nomecli').asString;
                     Sheet.cells[8,2].Font.Bold := True;
                     Sheet.cells[8,2].Font.Size := 8;

                     Sheet.cells[9,1].Value := 'CNPJ:';
                     Sheet.cells[9,1].Font.Bold := false;
                     Sheet.cells[9,1].Font.Size := 8;

                     Sheet.cells[9,2].Value :=
DM_Sysflex.qryBordero.FieldByName('CGCCPF').asString;
                     Sheet.cells[9,2].Font.Bold := false;
                     Sheet.cells[9,2].Font.Size := 8;

                     Sheet.cells[9,3].Value := 'Endereço:';
                     Sheet.cells[9,3].Font.Bold := false;
                     Sheet.cells[9,3].Font.Size := 8;

                     Sheet.cells[9,4].Value :=
DM_Sysflex.qryBordero.FieldByName('Endereco').asString;
                     Sheet.cells[9,4].Font.Bold := false;
                     Sheet.cells[9,4].Font.Size := 8;

                     Sheet.cells[10,1].Value := 'Inscr. Est:';
                     Sheet.cells[10,1].Font.Bold := false;
                     Sheet.cells[10,1].Font.Size := 8;

                     Sheet.cells[10,2].Value :=
DM_Sysflex.qryBordero.FieldByName('IE').asString;
                     Sheet.cells[10,2].Font.Bold := false;
                     Sheet.cells[10,2].Font.Size := 8;

                     Sheet.cells[10,3].Value := 'Telefone:';
                     Sheet.cells[10,3].Font.Bold := false;
                     Sheet.cells[10,3].Font.Size := 8;

                     Sheet.cells[10,4].Value :=
DM_Sysflex.qryBordero.FieldByName('Fone1').asString;
                     Sheet.cells[10,4].Font.Bold := false;
                     Sheet.cells[10,4].Font.Size := 8;

                     Sheet.cells[12,1].Value := 'Contratada:';
                     Sheet.cells[12,1].Font.Bold := false;
                     Sheet.cells[12,1].Font.Size := 8;

                     Sheet.cells[12,2].Value := cEmpresa;
                     Sheet.cells[12,2].Font.Bold := True;
                     Sheet.cells[12,2].Font.Size := 8;

                     Sheet.cells[13,1].Value := 'CNPJ:';
                     Sheet.cells[13,1].Font.Bold := false;
                     Sheet.cells[13,1].Font.Size := 8;

                     Sheet.cells[13,2].Value := cCNPJ;
                     Sheet.cells[13,2].Font.Bold := false;
                     Sheet.cells[13,2].Font.Size := 8;

                     Sheet.cells[15,1].Value := 'Aquisição de Créditos a
vista';
                     Sheet.cells[15,1].Font.Bold := True;
                     Sheet.cells[15,1].Font.Size := 10;

                     Sheet.cells[17,3].Value := 'BORDERO MENSAL';
                     Sheet.cells[17,3].Font.Bold := True;
                     Sheet.cells[17,3].Font.Size := 10;

                     Sheet.cells[19,1].Value := 'Nº Ordem';
                     Sheet.cells[19,1].Font.Bold := True;
                     Sheet.cells[19,1].Font.Size := 10;


                     Sheet.cells[19,2].Value := 'Título';
                     Sheet.cells[19,2].Font.Bold := True;
                     Sheet.cells[19,2].Font.Size := 10;

                     Sheet.cells[19,3].Value := 'Vencto';
                     Sheet.cells[19,3].Font.Bold := True;
                     Sheet.cells[19,3].Font.Size := 10;

                     Sheet.cells[19,4].Value := 'Valor';
                     Sheet.cells[19,4].Font.Bold := True;
                     Sheet.cells[19,4].Font.Size := 10;

                     Sheet.cells[19,5].Value := 'Sacado';
                     Sheet.cells[19,5].Font.Bold := True;
                     Sheet.cells[19,5].Font.Size := 10;

                     linha := 20;
                  end;

               inc(titulos);

               Sheet.cells[linha,1].Value := IntToStr(titulos);
               Sheet.cells[linha,1].Font.Bold := False;
               Sheet.cells[linha,1].Font.Size := 10;

               Sheet.cells[linha,2].Value :=
DM_Sysflex.qryBordero.FieldByName('Titulo').asString;
               Sheet.cells[linha,2].Font.Bold := False;
               Sheet.cells[linha,2].Font.Size := 10;

               Sheet.cells[linha,3].Value :=
DM_Sysflex.qryBordero.FieldByName('Vencto_Real').asDateTime;
               Sheet.cells[linha,3].Font.Bold := False;
               Sheet.cells[linha,3].Font.Size := 10;
               Sheet.cells[linha,3].NumberFormat := 'dd/mm/aaaa';

               Sheet.cells[linha,4].Value :=
DM_Sysflex.qryBordero.FieldByName('Valor_Titulo').asCurrency;
               Sheet.cells[linha,4].Font.Bold := False;
               Sheet.cells[linha,4].Font.Size := 10;
               Sheet.cells[linha,4].NumberFormat := '#.##0,00';

               Sheet.cells[linha,5].Value :=
DM_Sysflex.qryBordero.FieldByName('Emitente').asString;
               Sheet.cells[linha,5].Font.Bold := False;
               Sheet.cells[linha,5].Font.Size := 10;

               TotalTitulo   := TotalTitulo   +
DM_Sysflex.qryBordero.FieldByName('Valor_Titulo').asCurrency;
               TotalComprado := TotalComprado +
DM_Sysflex.qryBordero.FieldByName('Valor_Compra').asCurrency;
               inc(Linha);
               DM_Sysflex.qryBordero.Next;

            end;

         if linha <> 0 then
            Totaliza(Sheet,linha,TotalTitulo,TotalComprado,nADValoren,nISS);

         // Monta nome da planilha
         arquivo := Diretorio + '\Bordero_' + cbMes.Items[cbMes.ItemIndex] +
                                '_' + inttostr(seAno.Value)+'.xls';
         // Grava planilha
         try
            if FileExists(arquivo) then
               DeleteFile(arquivo);
            Workbook.SaveAs(arquivo);
         except
            messagedlg('Erro ao gravar planilha
"'+arquivo+'"!',mtError,[mbOk],0);
         end;

         WinExcel.UserControl := True;

      end;
end;

procedure TF_Bordero.Totaliza(Sheet: OleVariant;
                              Linha: Integer;
                              TotalTitulo,TotalComprado: Currency;
                              nADValoren, nISS: Extended);
var
   TotalADValoren,TotalISS, TotalDed: Currency;
begin
   Sheet.cells[linha,1].Value := 'Total';
   Sheet.cells[linha,1].Font.Bold := True;
   Sheet.cells[linha,1].Font.Size := 10;

   Sheet.cells[linha,4].Value := TotalTitulo;
   Sheet.cells[linha,4].Font.Bold := True;
   Sheet.cells[linha,4].Font.Size := 10;
   Sheet.cells[linha,4].NumberFormat := '#.##0,00';

   linha := linha + 2;
   Sheet.cells[linha,3].Value := 'Demonstrativo da Operação';
   Sheet.cells[linha,3].Font.Bold := True;
   Sheet.cells[linha,3].Font.Size := 10;

   inc(linha);
   Sheet.cells[linha,2].Value := 'Valor de Face dos Títulos';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   Sheet.cells[linha,5].Value := TotalTitulo;
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';

   linha := linha + 2;
   Sheet.cells[linha,2].Value := 'Valor Total de Títulos Negociados';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   Sheet.cells[linha,5].Value := TotalTitulo;
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';

   linha := linha + 2;
   Sheet.cells[linha,2].Value := 'Deduções';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   Sheet.cells[linha,5] := (TotalTitulo - TotalComprado);
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';

   inc(linha);
   Sheet.cells[linha,2].Value := 'AD Valoren (N. Fiscal - Rem. Serv.)';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   TotalADValoren :=  (TotalTitulo * nADValoren) / 100;
   Sheet.cells[linha,5].Value := TotalADValoren;
   TotalADValoren := Sheet.cells[linha,5].Value;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;

   inc(linha);
   Sheet.cells[linha,2].Value := 'Total da Deduções';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   TotalDed := (TotalTitulo - TotalComprado) + TotalADValoren;
   Sheet.cells[linha,5].Value := TotalDed;
   TotalDed := Sheet.cells[linha,5].Value;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;

   linha := linha + 2;
   Sheet.cells[linha,2].Value := 'ISS a Recolher';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   TotalIss :=  (TotalADValoren * nISS) / 100;
   Sheet.cells[linha,5].Value := TotalISS;
   TotalISS := Sheet.cells[linha,5].Value;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;

   linha := linha + 2;
   Sheet.cells[linha,2].Value := 'Desembolso Líquido';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   Sheet.cells[linha,5] := (TotalTitulo - (TotalDed + TotalIss));
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';

   inc(linha);
   Sheet.cells[linha,2].Value := 'Receita Líquida na Operação';
   Sheet.cells[linha,2].Font.Bold := True;
   Sheet.cells[linha,2].Font.Size := 10;
   Sheet.cells[linha,5] := (TotalDed + TotalIss);
   Sheet.cells[linha,5].Font.Bold := True;
   Sheet.cells[linha,5].Font.Size := 10;
   Sheet.cells[linha,5].NumberFormat := '#.##0,00';

end;


[As partes desta mensagem que não continham texto foram removidas]



--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]

Links do Yahoo! Grupos















-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a