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