Jump to content

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


Recommended Posts

Posted

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.

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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?

Posted

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()


"The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod

Posted

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...

Posted

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

  • 4 months later...
Posted

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....  ? é diferente não é?

Posted

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.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

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
Posted

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

Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.