Jump to content

Copiar dados para word


security
 Share

Recommended Posts

Boas...

eu tenho um codigo que copia os dados de um formulario para o word mas quando vou copiar valores de Combobox nao consigo. Ou seja, apenas copia se tiver por exemplo: comboBox1.SelectedIndex. se tiver ComboBox1.SelectedText ou SelectedItem nao copia.

o codigo para copiar e o seguinte

 Private Sub SubstituiVariavel(ByVal Achar As String, ByVal Substituir As String)
        'procura a variável e substitui o valor 
        With objWord.Selection.Find
            .Text = Achar.ToString
            .Replacement.Text = Substituir.ToString
            .Forward = True
            .Format = True
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            While .Execute = True
                objWord.Selection.Select()
                System.Windows.Forms.Clipboard.SetDataObject(Substituir)
                objWord.Selection.Paste()
            End While
        End With

depois utilizo

SubstituiVariavel("pmarca", ComboBox2.SelectedText)

este substituivariavel serve para substituir os dados do formulario pela variavel no Word.

alguem me pode ajudar a resolver este problema pf... :wallbash:

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

    Boa noite,

    Tenda desta forma, uma vez que apenas vais passar o valor da combobox para uma form word, podes passa-lo como string.

 Private Sub SubstituiVariavel(ByVal Achar As String, ByVal Substituir As String)
        Dim combvalor as string
        'procura a variável e substitui o valor 
        With objWord.Selection.Find
            .Text = Achar.ToString
            .Replacement.Text = Substituir.ToString
            .Forward = True
            .Format = True
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            While .Execute = True
                objWord.Selection.Select()
                System.Windows.Forms.Clipboard.SetDataObject(Substituir)
                objWord.Selection.Paste()
            End While
        End With

SubstituiVariavel("pmarca", ComboBox2.GetItemText(combvalor))

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Bom dia,

    Ainda bem que já resolves-te, podias era colocar cá a solução, para caso mais alguém se depare com esse mesmo problema, tenha alguma orientação de como fazer para o resolver.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

afinal ainda estou com um problema  😁

A combobox resolvi-o.

mas continuo na mesma com um problema. É que quando o equipamento é reparado é  dada a entrada do material utilizado/substituido.

e eu nao consigo copiar todos os items da listView para o word sabes como faço isso?? assim no fim coloco todo o codigo ja sem erros

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

    Boa tarde,

   


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim headers = (From ch In ListView1.Columns _
         Let header = DirectCast(ch, ColumnHeader) _
         Select header.Text).ToArray()

  Dim items = (From item In ListView1.Items _
        Let lvi = DirectCast(item, ListViewItem) _
        Select (From subitem In lvi.SubItems _
            Let si = DirectCast(subitem, ListViewItem.ListViewSubItem) _
            Select si.Text).ToArray()).ToArray()

  Dim table As String = String.Join(vbTab, headers) & Environment.NewLine
  For Each a In items
    table &= String.Join(vbTab, a) & Environment.NewLine
  Next
  table = table.TrimEnd(CChar(Environment.NewLine))
  Clipboard.SetText(table)
    
End Sub

    Assim passas todos os itens de uma listview1 para o clipboard, agora só tens de fazer o past. Penso que este pedaço de codigo te ajude a fazer o que pertendes, pois na pratica só tens de ler item a item da listview e passa-lo para o word, para o local correspondente. utilizando por exemplo um ciclo For Each .

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Boa noite,

    Permite-me a pergunta: Lês-te o código?


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim headers = (From ch In ListView1.Columns _ ' cria uma variável chamada header onde será guardado o valor de cada cabeçalho de 'cada coluna, num vector.
         Let header = DirectCast(ch, ColumnHeader) _
         Select header.Text).ToArray() 'aqui tens a criação do vector com os valores

  Dim items = (From item In ListView1.Items _ ' cria a estrutura dos items e coloca-os num vector'
        Let lvi = DirectCast(item, ListViewItem) _
        Select (From subitem In lvi.SubItems _
            Let si = DirectCast(subitem, ListViewItem.ListViewSubItem) _
            Select si.Text).ToArray()).ToArray()

  Dim table As String = String.Join(vbTab, headers) & Environment.NewLine ' cria uma tabela, onde vai inserir os dados cabeçalhos, e ' 'linhas de toda a listbox
  For Each a In items 'inicia o ciclo for each para preencher a tabela
    table &= String.Join(vbTab, a) & Environment.NewLine
  Next ' termina o ciclo
  table = table.TrimEnd(CChar(Environment.NewLine)) ' coloca os dados na tabela e prepara-a para ser enviada para a clipboard.
  Clipboard.SetText(table) ' envia a tabela inteira para a clipboard
    
End Sub

      Penso que assim já tenhas percebido o que faz, de qualquer das formas convem sempre ler o código.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

    Bom dia,

    Ser novo, não implica que não se faça algum esforço para entender. Cá tens sempre onde tirar duvidas. O código que coloquei, já todo documentado foi apenas para te explicar o que faz o quê e onde. Eu considero uma boa pratica de programação a documentação do código, (não tão extensivamente), mas uma boa documentação, porque hoje sou eu mexer neste programa, amanha poderá ser outra pessoa, e claro como eu aprecio ler código comentado, quem for ler o meu, por certo apreciará ler código comentado também.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

sim eu sei... mas o meu problema é entender o codigo sem uma pequena explicação como me deste com os comentarios ao longo do codigo...  isto em codigo que nao sei construir... ainda nao entendo bem...

Contudo tenho aprendido bastante com as duvidas que aqui tenho colocado mesmo que por vezes às pessoas que estão  mais "à vontade " as duvidas sao pareces coisas "bastante simples" foi graças a este forum e à preciosa ajuda que aqui tenho tido que consegui fazer o software que estou praticamente a concluir e que no ultimo ano lectivo me ajudou a chegar ao 16 na nota de final de ano na apresentação do prototipo.

cumprimentos,

Security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

    Bom dia,

    Eu também passei por isso, também já fui mais novo, não nasci com a idade que tenho, nem com os anos que tenho de informática em cima. Na altura não havia forums havia os "grupinhos de amigos" que se juntavam em telnet talks, para trocar informação e tirar duvidas.      Maioritariamente gabarem-se das suas façanhas 🙂 Eram outros tempos.

    Compreendo que tenhas dificuldade, e eu devia ter comentado o código logo de inicio. Só não o fiz porque não sabia que irias ter dificuldade em interpretar o código, caso soubesse teria documentado como vim a fazer.

    Não tem qualquer problema ter duvidas, e mais uma vez fico feliz por saber que o forum te ajudou a concluir e terminar o projecto com uma boa nota. Espero que ao longo do processo tenhas aprendido mais e mais, pois o saber não ocupa lugar.

    Quando precisares de código comentado, escreve isso no post, se for eu a responder, respondo-te com o código todo comentado. Por mim não tem qualquer problema.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Bom dia,

eu tenho no word a tabela formatada, se eu utilizar parte do codigo (como vou mostrar em baixo) poderei copiar coluna a coluna?!

ate aqui o codigo cria a tabela

Dim table As String = String.Join(vbTab, headers) & Environment.NewLine ' cria uma tabela, onde vai inserir os dados cabeçalhos, e ' 'linhas de toda a listbox
  For Each a In items 'inicia o ciclo for each para preencher a tabela
    table &= String.Join(vbTab, a) & Environment.NewLine
  Next ' termina o ciclo
  table = table.TrimEnd(CChar(Environment.NewLine)) ' coloca os dados na tabela e prepara-a para ser enviada para a clipboard.
  Clipboard.SetText(table) ' envia a tabela inteira para a clipboard

agora dentro do ciclo (abaixo) possso definir os campos que quero copiar ou seja. vou colocar quais as colunas da listview q vou copiar???

For Each a In items 'inicia o ciclo for each para preencher a tabela
    table &= String.Join(vbTab, a) & Environment.NewLine
  Next ' termina o ciclo
  

Abc,

security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

ocodigo que tenho actualmente para imprimir é o seguinte

'Instancia a Aplicação Word.
            objWord = CreateObject("Word.Application")

            'Abre o documento reparaçao.doc do Microsoft Word.
            objWord.Documents.Open(Application.StartupPath & "\Docs\pedidoAssistencia_via2.doc")

            SubstituiVariavel("pID_cliente", TextBox1.Text)
            SubstituiVariavel("pnome", TextBox2.Text)
            SubstituiVariavel("pmorada", TextBox6.Text)
            SubstituiVariavel("pporta", TextBox7.Text)
            SubstituiVariavel("pcp", MaskedTextBox1.Text)
            SubstituiVariavel("pfreguesia", TextBox10.Text)
            SubstituiVariavel("plocal", TextBox11.Text)
            SubstituiVariavel("pcontacto", MaskedTextBox2.Text)

            'Dados do equipamento
            'Em espera/reparação
            If ComboBox3.SelectedValue = 1 Then
                SubstituiVariavel("pID_rpr", Label23.Text)
                SubstituiVariavel("pdata", DateTimePicker1.Value)
                SubstituiVariavel("paparelho", tipo)
                SubstituiVariavel("pmarca", marca)
                SubstituiVariavel("pmodelo", TextBox12.Text)
                SubstituiVariavel("pSerie", TextBox16.Text)
                If TextBox4.Text = "" Then
                    SubstituiVariavel("pacessorios", " ")
                Else
                    SubstituiVariavel("pacessorios", TextBox4.Text)
                End If
                SubstituiVariavel("pproblema", TextBox13.Text)
                SubstituiVariavel("pmaterial", " ")
                SubstituiVariavel("data_rpr", " ")
                SubstituiVariavel("pvalor_rpr", " ")
            Else
                'Reparado
                If ComboBox3.SelectedValue = 2 Then
                    SubstituiVariavel("pID_rpr", Label23.Text)
                    SubstituiVariavel("pdata", DateTimePicker1.Value.Date.ToString)
                    SubstituiVariavel("paparelho", tipo)
                    SubstituiVariavel("pmarca", marca)
                    SubstituiVariavel("pmodelo", TextBox12.Text)
                    SubstituiVariavel("pSerie", TextBox16.Text)
                    If TextBox4.Text = "" Then
                        SubstituiVariavel("pacessorios", " ")
                    Else
                        SubstituiVariavel("pacessorios", TextBox4.Text)
                    End If
                    SubstituiVariavel("pproblema", TextBox13.Text)
              
                      'Aqui deve ficar o codigo para copiar a listview para o word

                    SubstituiVariavel("data_rpr", DateTimePicker2.Value.Date.ToString)
                    SubstituiVariavel("pvalor_rpr", TextBox8.Text)
              
  Else
                   

                   'Sem reparação
                    If ComboBox3.SelectedValue = 3 Then
                        SubstituiVariavel("pID_rpr", Label23.Text)
                        SubstituiVariavel("pdata", DateTimePicker1.Value)
                        SubstituiVariavel("paparelho", tipo)
                        SubstituiVariavel("pmarca", marca)
                        SubstituiVariavel("pmodelo", TextBox12.Text)
                        SubstituiVariavel("pSerie", TextBox16.Text)
                        If TextBox4.Text = "" Then
                            SubstituiVariavel("pacessorios", " ")
                        Else
                            SubstituiVariavel("pacessorios", TextBox4.Text)
                        End If
                        SubstituiVariavel("pproblema", TextBox13.Text)
                        SubstituiVariavel("pmaterial", " ")
                        SubstituiVariavel("data_rpr", DateTimePicker2.Value.Date.ToString)
                        SubstituiVariavel("pvalor_rpr", TextBox8.Text)
                    End If
                End If
            End If
            Dim PrintDialog1 As New PrintDialog()

            PrintDialog1.Document = PrintDocument1
            Dim result As DialogResult = PrintDialog1.ShowDialog()
            If (result = DialogResult.OK) Then
                objWord.PrintOut()
            End If
            objWord.visible = False
            'objWord.PrintOut()
            fechaword()

pois tenho a tabela ja formatada num documento Word

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

Falta o codigo para imprimires....

Se de tarde tiver oportunidade de ligar a maquina vejo isso, que hoje entro de banco às 13:00 e saio às 23:00.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

o unico codigo que falta é isto

Private Sub SubstituiVariavel(ByVal Achar As String, ByVal Substituir As String)
        'procura a variável e substitui o valor 
        With objWord.Selection.Find
            .Text = Achar.ToString
            .Replacement.Text = Substituir.ToString
            .Forward = True
            .Format = True
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            While .Execute = True
                objWord.Selection.Select()
                System.Windows.Forms.Clipboard.SetDataObject(Substituir)
                objWord.Selection.Paste()
            End While
        End With
    End Sub

    Private Sub fechaword()
        'Fecha o documento Word sem guardar
        objWord.ActiveDocument.Close(False)
        'Fecha o Word
        objWord.Quit()
        objWord = Nothing
    End Sub

o

imports System.Drawing.Pinting

e uma variavel publica

Dim objWord As Object

ok entao de tarde ca nos encontramos.

Abc,

security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Link to comment
Share on other sites

    Boa noite,

    Sim, penso que sim, não "coluna a coluna" mas sim com 2 ciclos um para copiar a estrutura da coluna, e um segundo ciclo dentro do primeiro para copiar todas as linhas dessa coluna". Usas 2 ciclos For Each, um para copiar o columnheader, e um dentro desse, para copiar todas as linhas.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

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
 Share

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