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

pcaldeira

[VB 2005] Exportar dados directamente de VB para EXCEL (NOVA DÚVIDA/PROBLEMA)

12 mensagens neste tópico

Boas,

tou a aprender VB e tou a fazer um programa que devia calcular a nota escolar de cada disciplina no fim do período, após preencher o formulário. Mas pretendo que esses dados sejam, após o cálculo, exportados para um ficheiro do EXCEL. Ou seja, basicamente prentendo usar um folha de cálculo como alternativa a uma base de dados, usando a folha do EXCEL com a função de uma tabela numa base de dados. Já tive a procurar e só encontrei um página sobre copiar dados VB -> BASE DE DADOS e depois BASE DE DADOS -> EXCEL... Mas o procedimento era um pouco complexo para mim, uma vez que ainda tou a aprender, por isso queria saber se existe alguma maneira de copiar os dados directamente, por exemplo, atribuíndo valores a variáveis e depois fazer esses valores aparecerem organizados numa folha de cálculo XLS. Agradecia alguma ajuda ou sugestão sobre o assunto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente tens duas formas de fazer isso:

1. Criar um ficheiro do tipo "comma separated values" (csv) que o Excel sabe interpretar.

2. Ligares do VB ao Excel via COM e controlares o Excel através do VB.

No entanto, se o que necessitas é de uma base de dados, usar o Excel não é de todo a melhor opção. Se realmente necessitas de uma base de dados, então usa uma. Se só necessitas de guardar alguns valores, então um simples ficheiro de texto deve ser suficiente. Ou seja, o Excel está aqui a mais e está a introduzir um nível de complexidade que é totalmente desnecessário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

como já disse estou interessado em usar o EXCEL como armazenador de dados; não pretendo usar uma base de dados porque, com o EXCEL, posso imprimir o ficheiro muito mais facilmente e enviá-lo com certeza de que quem o recebe conseguirá abrir e ler correctamente os dados. Se usar uma base de dados, imprimir será mais difícil.

Quando à tarefa em si, há algum tutorial sobre a 2ª opção? Onde posso ver alguma forma de aprender a fazer isso/consultar um código-fonte para tentar implementá-lo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Tens de addicionar duas referencias ao teu projectos :

Microsoft Excel 11.0 Object Library (se tiveres o office 2003 no pc o numero é inferior se versao mais antiga)

Microsoft Office 11.0 Object Library

Option Strict On
Option Explicit On
Imports Microsoft.Office.Interop

        Dim objPrograma As New Excel.Application '' cria nova instancio do excel
        Dim objLivro As Excel.Workbook = objPrograma.Workbooks.Add '' cria novo livro
        Dim objFolha As Excel.Worksheet = DirectCast(objPrograma.ActiveSheet, Excel.Worksheet) '' cria nova folha
        '' excel visivel
        objPrograma.Visible = True
        objPrograma.Caption = "CADERNO TÉCNICO DA ENCOMENDA Nº122/06"  '' titulo
        objFolha = DirectCast(objPrograma.ActiveSheet(), Excel.Worksheet) '' activa a folha
        objFolha.Range("A1").Value = "Projecto 1" '' define o valor da celula A1
        '' formata celula
        objFolha.Range("b4").VerticalAlignment = Excel.XlHAlign.xlHAlignCenter
        objFolha.Range("b4").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
        objFolha.Range("b4").Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
        objFolha.Range("b4").Borders(Excel.XlBordersIndex.xlEdgeLeft).Weight = Excel.XlBorderWeight.xlThin
        objFolha.Range("b4").Borders(Excel.XlBordersIndex.xlEdgeLeft).ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
        objFolha.Range("b4").Orientation = 90
        objFolha.Range("b4").NumberFormat = "@"
        '' todas as celulas a arial 8
        objFolha.Select()
        With objFolha.Cells
            .Font.Name = "Arial"
            .Font.Size = 8
        End With
        '' redimensionna todas as colunas
        objFolha.Columns.AutoFit()
        '' formata o livro
        DirectCast(objLivro.Sheets("Folha1"), Excel.Worksheet).Activate()
        objFolha = DirectCast(objPrograma.ActiveSheet(), Excel.Worksheet)
        objFolha.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape
        objFolha.PageSetup.FooterMargin = 0
        objFolha.PageSetup.HeaderMargin = 0
        objFolha.PageSetup.LeftMargin = 0
        objFolha.PageSetup.RightMargin = 0
        objFolha.PageSetup.CenterHorizontally = True
        objFolha.PageSetup.CenterVertically = True
        '' grava o documento excel
        objLivro.SaveAs("c:\teste.xls")
        '' fecha livro
        objLivro.Close()
        '' termina instancia excel
        objPrograma.Quit()
        '' marca o objecto excel para terminacao
        System.Runtime.InteropServices.Marshal.ReleaseComObject(objPrograma)
        '' liberta recursos
        GC.Collect()


0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

estou com um problema em abrir/criar um livro. Fiz uma versão só para teste, para ver se funcionava como eu pretendia, mas dá-me sempre o erro "COMException was unhandled. Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))" na linha que devia abrir/criar um livro. Já tentei quer o Open, quer o Add, ambos dão erro, apesar de as duas referências COM terem sido adicionadas ao projecto. Abaixo o código do botão: (a linha do erro é a assinalada por uma seta <----- )

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        Dim a As String
        Dim objPrograma As New Excel.Application '' cria nova instancia do excel
        Dim objLivro As Excel.Workbook = objPrograma.Workbooks.Open("C:\Documents and Settings\Todos\My Documents\Teste.xls") '' <-----
        Dim objFolha As Excel.Worksheet = objLivro.Worksheets.Item(1) '' selecciona a folha 1
        Dim nome As String = TextBox1.Text
        Dim nota As String = TextBox2.Text
        '' excel visivel
        objPrograma.Visible = True
        objPrograma.Caption = "Excel Teste"  '' titulo
        objFolha.Range("A1").Value = "Nome" '' define o valor da celula A1
        objFolha.Range("A2").Value = "Nota do Teste"
        For i = 2 To 25
            a = "A" & CStr(i)
            If objFolha.Range(a).Value = "" Then
                objFolha.Range(a).Value = nome
                a = "B" & CStr(i)
                objFolha.Range(a).Value = nota
                GoTo Jump
            End If
        Next
Jump:   objFolha.Columns.AutoFit() '' formata o livro
        DirectCast(objLivro.Sheets("Folha1"), Excel.Worksheet).Activate()
        objFolha = DirectCast(objPrograma.ActiveSheet(), Excel.Worksheet)
        objFolha.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape
        objFolha.PageSetup.FooterMargin = 0
        objFolha.PageSetup.HeaderMargin = 0
        objFolha.PageSetup.LeftMargin = 0
        objFolha.PageSetup.RightMargin = 0
        objFolha.PageSetup.CenterHorizontally = True
        objFolha.PageSetup.CenterVertically = True
        '' grava o documento excel
        objLivro.SaveAs("C:\Documents and Settings\Todos\My Documents\Teste.xls")
        '' fecha livro
        objLivro.Close()
        '' termina instancia excel
        objPrograma.Quit()
        '' marca o objecto excel para terminacao
        System.Runtime.InteropServices.Marshal.ReleaseComObject(objPrograma)
        '' liberta recursos
        GC.Collect()
    End Sub

PS - Como comecei nisto há pouco tempo, é muito provável que o código contenha outros erros...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Já tive a pesquisar (Google rula) e encontrei uma info no site da MS... Parece que é mesmo um bug do excel - no meu caso o erro deve-se a algo tão estúpido como ter o EXCEL numa língua diferente (inglês) da que tenho seleccionada no painel de controlo (português). Já agora, alguém sabe onde posso arranjar o Office Multilingual Pack, para pôr o Office em PT?

Obrigado

http://support.microsoft.com/default.aspx?scid=kb;en-us;320369 --> site que descreve o bug

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas,

Estou a tentar criar um script que abra um ficheiro excel e que leia a informação lá contida que é do tipo:

Nome   número

Maria   125

José      254

mas não estou a conseguir...e o script que já foi fornecido é para guardar no excel... alguém aqui já trabalhou com isto?

Bom trabalho

tofas

p.s. humm...vi agora eu quero fazer em VB6 e nao VB 2005....  :hmm: é diferente não é?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente, e segundo uma curiosidade que eu tive, os ficheiros do excel têm um tipo pré-definido de guardar a informação.

Por exemplo no ficheiro pode estar da seguinte forma:

Nome;número

Maria;125

José;254

E quando os dadoas são carregados para o excel ficam:

            Coluna A  Coluna B

Linha 1:  Nome    número

Linha 2:  Maria    125

Linha3:    José      254

pelo menos nos ficheiros ".csv" acontece isso.

Não sei se ajudo mas fica aqui isto por se acaso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quero algo do género, mas estou com problemas...porque ele não está a encontra o ficheiro  :wallbash: 

alguem pode corrigir a parte em que uso function, deveria usar sub? e como chamo isto no main???

Function lerFicheiroExcel()


Dim aplicacaoExcel As New Excel.Application      'Application é a aplicação excel
    Dim arquivoXLS As Excel.Workbook                 'Workbook 'e o arquivo xls

    'Abrir o arquivo do Excel
    Set arquivoXLS = aplicacaoExcel.Workbooks.Open("D:\Excel\Fornecedor.xls")

    'definir qual a planilha de trabalho - neste caso chama-se lista
    arquivoXLS.Sheets("lista").Select

    'Exibe o conteúdo da célula na posição 5,1  e 5,2

   ' variavel = xlw.Application.Cells(2, 3).Value
    MsgBox arquivoXLS.Application.Cells(5,1).Value
MsgBox arquivoXLS.Application.Cells(5,2).Value


    ' Fechar a planilha sem salvar alterações
    ' Para salvar mude False para True

    arquivoXLS.Close False

    ' Liberamos a memória

    Set arquivoXLS = Nothing
    Set aplicacaoExcel = Nothing
lerFicheiroExcel="leu?"
End Function

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código em baixo está a funcionar  ;) agora depende de como se chama a função, usando o function ou o sub.... eu acho que devia usar o function, mas depois nao sei como a chamo no main, dai usar o function  :hmm:

bom trabalho

tofas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tem nada a ver com o chamar, usas function se quiseres retornar um valor, usas sub se for so um procedimento, para chamar é igual para os dois

para mexer com os dados do excel por exemplo não é perciso tar a fazer uma aplicação em vb, basta utilizarem o VBA (macros) e faz o mesmo que fazem ai, so no ficheiro de excel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

versão mais completa e mais correcta :

Function lerFornecedorExcel( ByVal valorInserido As String) As String

Dim NaoLeu As Boolean
                     Dim Nlinhas As Integer
Dim nome As String
Dim numero As String

nome="Não foi encontrado nenhum resultado."
  	Nlinhas=2
NaoLeu=False

    Dim aplicacaoExcel As New Excel.Application      'Application é a aplicação excel
    Dim arquivoXLS As Excel.Workbook                 'Workbook 'e o arquivo xls

    'Abrir o arquivo do Excel
    Set arquivoXLS = aplicacaoExcel.Workbooks.Open("D:\FornecedorAux.xls")

    'definir qual a planilha de trabalho - neste caso chama-se lista
    arquivoXLS.Sheets("lista").Select

If( IsNumeric(valorInserido) ) Then


	While ( ( aplicacaoExcel.Cells(Nlinhas, 2) <> Empty ) Or NaoLeu=False )

		' ler o NIF na linha Nlinha e coluna 2
		numero = aplicacaoExcel.Cells(Nlinhas, 2)

		' se os NFIs são iguais le o nome
		If(numero=valorInserido)Then

			nome = aplicacaoExcel.Cells(Nlinhas, 1)
			NaoLeu = True

		End If

		Nlinhas = Nlinhas + 1

	Wend
Else
	MsgBox ("Valor inválido")
End If


    ' Fechar a planilha sem salvar alterações
    ' Para salvar mude False para True

    arquivoXLS.Close( False)

    ' Sair da aplicação
    aplicacaoExcel.Quit()

    ' Liberamos a memória
    Set arquivoXLS = Nothing
    Set aplicacaoExcel = Nothing

    ' retorna o nome com o NIF dado
    lerFornecedorExcel=nome

End Function

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