• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jbatista

[Resolvida] Exportação RecordSet para planilha Excel

9 mensagens neste tópico

Olá pessoal

Alguem pode me ajudar?

Consegui exportar os dados de um RecordSet do VB6 para o Excel,

Agora como faço para configurar as propriedades  tamanho, cores

e bordas de  CÉLULAS na planilha,  por programação ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Como é que a exportação para Excel, usando Early Binding ou Late Binding  ?

Early Binding (exemplo):

Dim xlApp As Excel.Application

Late Binding (exemplo):

Dim objApp As Object
Set objApp = CreateObject("Excel.Application")

É que o código é um pouco diferente em nos diferentes métodos. Se poder mostrar o seu código de exportação é 5 estrelas.

Um abraço,

Jorge Paulino

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva

Já algum tempo que tenho andado sem cá vir (bue da programação), e hoje este tópico chamou-me a atenção.

JPaulino... assim sucintamente qual a diferença entre as duas opções... sei que eu uso bue...tanto para excel como para Word... mas estou a usar o Late Bindig.... e uma thread para mostrar que a informação está a ser processada...

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá José Lopes,

Já tinha visto que tens estado ausente  :)

Retirado de um pequeno artigo que escrevi no meu blog "VB.NET: Exportar DataGridView para Excel" fala para VB.NET mas aplica-se a VB6 (na maioria).

Espero que ajuda a clarificar um pouco. :)


Early Binding vs Late Binding

Para realizar automação através do VB.NET, e para explicar um pouco as principais diferenças, existem dois métodos que se podem utilizar: Late Binding e Early Binding.

O Late Binding utiliza o CreateObject() para criar uma nova instância do Excel ou o GetObject() para manipular uma instância já criada. Um exemplo das suas utilizações:

   

 ‘ Criar uma nova instância do Excel
  Dim objExcelApp As Object
  objExcelApp = CreateObject("Excel.Application")
   

  ‘ Manipular uma instância já criada
   Dim objExcelApp As Object

  objExcelApp = GetObject(, "Excel.Application")

   

As suas principais vantagens são:

  • Independente da versão utilizada, ou seja, não é específico para uma versão e pode ser utilizado tanto na versão 97 do Excel com na 2007. Existem incompatibilidades entre versões e um código desenvolvido em Excel 2003 provavelmente não funcionará em Excel 2007 (por exemplo);
  • Redução do tamanho do projecto, ou seja, quanto mais referências forem adicionadas ao projecto, maior a tamanho do mesmo e mais demorado é o tempo de compilação;
  • Alguns ambientes de programação não permitem adicionar referências ao projecto;

Para utilizar o método Early Binding é necessário adicionar a referência à livraria a utilizar (ex. Microsoft Excel 11.0 Object Library).

 ‘ Criar uma nova instância do Excel
  Dim objExcelApp As New Excel.Application

As principais vantagens são:

  • O código é mais rápido uma vez que é compilado antes da execução. Utilizando o Late Binding o código é compilado quando é executado reduzindo o performance;
  • Acesso ao intellisense o que permite aceder às constantes, métodos, objectos, etc. Com o Late Binding o programar é “às cegas”;
  • Permite detectar erros no código antes da execução, através do debug, uma vez que este é compilado;

Por estas diferenças, e sempre que possível, é recomendável a utilização do Early Binding.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeco a todos pela atenção

( Contente também pois a dúvida re-uniu amigos progrmadores )

Respondendo a JPaulino, o código é Late Binding e passo a transcreve-lo -

embora a declaraçãp (primeira linha) fez pensar ao contrário

Na realidade o núcleo desse foi trazido de amigos progrmadores na Internet

Private appExcel as Excel.Aplication 
Private wSheet as Whorksheet
Private clsClie as New clsCliente
Private clsOS as New clsOrdemServ
Private clsOS_I as New clsOS_Itens
Private  rsAux as adodb.RecordSet
'Demais declaracoes variaveis Cliente...
'Demais declarações variaveis OrdemServ
'Demais declarações variaveis Itens das Ordens
'Demais declarações Boolean
'Demais Flags ...
Private Sub Form_Load()
      ' Ambienta-se as classes
      ' Carrega os Clientes no combo
      ' Demais tarefas necessárias
End Sub

Private cboCliente_Click()
      lngClieID = me.cboCliente.ItemData( cboCliente.ListIndex)
     CarregaOrdensDoCliente
End Sub

Private Sub CarregaOrdensDoCliente
      rsAux = clsOS.BuscaOS_do_Cliente( lngClieID )
end Sub

Private Sub ElaborarOrcto()
      If me.cboCliente.Text = "" Then Exit Sub
      StartExcel
      MakeSheet
End Sub

Sub  StartExcel()
      mouseScreen = vbHourglass
      Set appEcel = CreateObject("Excel.Application")
    If err.number = 0 then
            aplicacaoExcel = True
    Else
          msgbox("Erro" + err.descrption)
          exit sub
    Endif
    mouseScreen = vbNormal
End SUb

'vou abreviar
Sub MakeSheet()
     Dim wBook as Workbook
     appExcel.WorkBooks.Open App.path & "\Documento.xlsx"
     Set wSheet = appExcell.Worksheets("Plan1")
     appExcel.Worksheets("Plan1").Activate
    
     'Faço um cabeçalho
     'AQUI VAI + UMA PERGUNTA : COMO CARREGAR O LOGOTIPO
     '                                                  DEIXEI 6 LINHAS PARA ISSO 
     wSheet.DisplayPageBreaks = True
    wSheet.Range("A7:G7").Select
    wSheet.Range("A7:G7").Merge
    wSheet.Range("A7:G7").Value = "NOME DA EMPRESA"
    wSheet.Range("A7:G7").Font.Bold = True
    wSheet.Range("A7:G7").Borders.LineStyle = xlEdgeLeft
    wSheet.Range("A7:G7").HorizontalAlignment = xlCenter

    ....(Dados Cadastrais do Cliente : Razao Social, Endereço, ... pego da Classe Cliente
   'ate linha 18 da planilha
    contadorDelinha = 20

    wSheet.Range("A7:G17").Select
    'abaixo não funcionou ..
    'With Selection
    '   .Font.Name = "Verdana"
    '   .FontStyle = "Bold"
    '    .Size = 9
    'End With
    ListaRsAux     
End Sub

'AQUI O QUE INTERESSA ...
Sub ListaRsAux
        Dim j as Integer
        Dim col as Integer
        contadorDeLinha = contadorDeLinha + 1
        rsAux.MoveFirst
        For i = 0 to rsAux.recordCount -1
               wSheet.Cells(contadorDeLinha, 1) = rsAux!Fields(0)     '  Nr Documento
               wSheet.Cells(contadorDeLinha, 2) = rsAux!Fields(1)      ' Data 
               wSheet.Cells(contadorDeLinha, 3) = rsAux!Fields(2)     'Responsavel
               lngOS_ID = rsAux("ID_DOC")
               clsOS_I.busca_Itens lngOS_ID
               'Na classe , preencho uma Array(Coleção ???) referente ao doc MESTRE
               ' e aqui o descarrego ...
               'incrementa contador
                For j = 0 to UBOUND ( ItensDOC )
                          wSheet.Cells(contadorDeLinha, 1) =  ItensDOC(j).NrDocumento        
                          wSheet.Cells(contadorDeLinha, 2) =  ItensDOC(j).NrSerie   
                          wSheet.Cells(contadorDeLinha, 3) =  ItensDOC(j).Descricao
                          wSheet.Cells(contadorDeLinha, 4) =  ItensDOC(j).Qtde
                          wSheet.Cells(contadorDeLinha, 5) =  ItensDOC(j).Unitario    
                          wSheet.Cells(contadorDeLinha, 6) =  ItensDOC(j).Valor_Total     
                          wSheet.Cells(contadorDeLinha, 7)=   ItensDOC(j).Desconto
              Next j
        Next i  
End Sub

DUVIDAS:

                COMO ABRIR NOVA PLANILHA  SE OS ITENS ULTRAPASSEREM O NUMERO DE LINHAS NO PAPEL ?

                COMO CARREGAR O LOGO ?

                COMO COLORIR AS CELULAS ?

Obrigado a todos                 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa o atraso na resposta :P

>> 'AQUI VAI + UMA PERGUNTA : COMO CARREGAR O LOGOTIPO

' Posição onde vai ser inserido o logotipo

wSheet.Range("A1").Select

appExcel.Activesheet.Pictures.Insert "c:\logotipo.jpg"

>> COMO COLORIR AS CELULAS ?

' Preenche a célula a amarelo

With wSheet.Range("A1").Interior

    .ColorIndex = 6

    .Pattern = 1

End With

>> COMO ABRIR NOVA PLANILHA  SE OS ITENS ULTRAPASSEREM O NUMERO DE LINHAS NO PAPEL ?

Se o array for superior ao número de linhas, crias uma nova worksheet e começas a carregar lá os dados

Se tiveres dúvidas diz!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por falta de informação do utilizador e por existirem respostas aceitáveis à pergunta efectuada, esta questão foi marcada como resolvida.

Jorge Paulino

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpem por "desaparecer" (mas o filho bom 'a casa torna)

Quero deixar aqui meus agradecimentos 'a toda colaboração

Ainda estou trabalhando na planilha que está em fase de acabamento

Somente uma observação : não sei porque o bendito cliente não quiz

em Crystal Report - até fiz mas ele não aceitou.

JBatista

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora