pcaldeira Posted August 10, 2006 at 11:58 AM Report #43558 Posted August 10, 2006 at 11:58 AM 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.
M6 Posted August 10, 2006 at 12:30 PM Report #43569 Posted August 10, 2006 at 12:30 PM 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."
pcaldeira Posted August 10, 2006 at 09:40 PM Author Report #43660 Posted August 10, 2006 at 09:40 PM 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?
Asgorath Posted August 11, 2006 at 10:44 AM Report #43714 Posted August 11, 2006 at 10:44 AM 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
pcaldeira Posted August 12, 2006 at 02:51 PM Author Report #43941 Posted August 12, 2006 at 02:51 PM 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...
pcaldeira Posted August 13, 2006 at 11:56 AM Author Report #44061 Posted August 13, 2006 at 11:56 AM 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
saramgsilva Posted December 13, 2006 at 06:31 PM Report #70459 Posted December 13, 2006 at 06:31 PM 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 é? www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Hipnoted Posted December 13, 2006 at 09:43 PM Report #70483 Posted December 13, 2006 at 09:43 PM 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"
saramgsilva Posted December 14, 2006 at 11:00 AM Report #70518 Posted December 14, 2006 at 11:00 AM Quero algo do género, mas estou com problemas...porque ele não está a encontra o ficheiro 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 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
saramgsilva Posted December 14, 2006 at 11:15 AM Report #70519 Posted December 14, 2006 at 11:15 AM 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 ? bom trabalho tofas www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Crack Posted December 14, 2006 at 12:54 PM Report #70529 Posted December 14, 2006 at 12:54 PM 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
saramgsilva Posted December 14, 2006 at 05:04 PM Report #70552 Posted December 14, 2006 at 05:04 PM 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 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now