Boavida Postado Novembro 6, 2006 Denunciar Share Postado Novembro 6, 2006 Uso o Visual Studio 2005Pessoal, eu estou querendo criar um relatório e exportá-lo pra .doc ou .rtf.A minha idéia é criar antes, pelo Word mesmo, um relatório padrão, deixando umas variáveis nele ($nome, por exemplo) para posterior substituição.Então, eu gostaria que alguém me ajudasse e me dissesse como faz pra localizar uma determinada palavra no documento do Word e substituí-la por outra.Desde já agradeço pela atenção e disposição em ajudar-me.Valeu! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rudolfo Borges Postado Novembro 6, 2006 Denunciar Share Postado Novembro 6, 2006 Opa beleza cara? É o seguinte eu programo em C# mas nunca acertei fazer esse código nesta linguagem então vou mostrar como eu sei em vb.net dai se conseguir passar para C# você divide a proeza conosco.Importe essa bibliotecaImports Microsoft.VisualBasic Nem sempre é necessario tente fazer sem ela caso aprensente algum erro você importa. Aqui eu faço sem importar no entanto na minha faculdade só funciona importanto. Adicione esses atributos ou então use como variaveis locais do metodo Private objWord As Object Private achar As String Private subistituir As String Código 'Instancia a Aplicação Word. objWord = CreateObject("Word.Application") 'Abre o documento aviso.doc do Microsoft Word. objWord.Documents.Open("e:\teste\teste.doc") 'procura a variável e substitui o valor achar = "@valor" subistituir = "teste" With objWord.Selection.Find .Text = achar.ToString .Replacement.Text = subistituir.ToString .Forward = True .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False While .Execute = True objWord.Selection.Select() System.Windows.Forms.Clipboard.SetDataObject(subistituir) objWord.Selection.Paste() End While End With 'torna o Word visivel objWord.visible = True 'Fecha o Word objWord.Quit() objWord = NothingBom é isso espero ter ajudado e qualquer coisa to aí.falows boa sorte!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 6, 2006 Denunciar Share Postado Novembro 6, 2006 É o seguinte eu programo em C# mas nunca acertei fazer esse código nesta linguagem então vou mostrar como eu sei em vb.net dai se conseguir passar para C# você divide a proeza conosco.Dê uma olhada neste tutorial que escrevi: http://www.onmasters.com.br/?area=ler_arti...os&artid=61Acredito que ele vá te ajudar a fazer isso.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rudolfo Borges Postado Novembro 7, 2006 Denunciar Share Postado Novembro 7, 2006 Então Graymalkin, pelo que pude ver no código passado é que eu estava fazendo certo em C# alias não tem segredo transformar meu código vb.net em C#, mas o problema que eu encontrava era na hora de instanciar o atributo objWord por que eu colocava private Objetc objWord então tentava private object objWord e também dava erro.No entanto o artigo do site que você passou diz que é Object. Vou fazer mais um teste e tentar entender o que esta acontecendo.Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 7, 2006 Denunciar Share Postado Novembro 7, 2006 Em C# tanto faz você usar object ou Object (sendo System.Object o nome real deste último), já que eles são a mesma coisa. A diferença na utilização é em como chamar os métodos e propriedades deste, e é justamente isso que o artigo mostra. Enquanto em VB.NET você pode fazer...objWord.Documents.Open("e:\teste\teste.doc") ... em C# a mesma linha seria algo como (baseada nos objetos do artigo): tipoDocuments.InvokeMember("Open", BindingFlags.InvokeMethod, null, Documents, new Object[[]] {"e:/teste/teste.doc"});Isso porque C# não tem o recurso de late-binding.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Boavida Postado Novembro 7, 2006 Autor Denunciar Share Postado Novembro 7, 2006 Graymalkin,Excelente sua ajuda!Estretanto, percebo que preciso conhecer quais os métodos utilizados neste tipo objeto, os quais desconheço. Conheço apenas estes que você me passou agora (Add, Open,...) e "deduzo" outros como, por exemplo, Find; só que já tentei aqui, mas não consegui utilizá-lo da maneira correta para localizar uma palavra no documento.você poderia me passar essa parte do código pra localizar e substituir a palavra, ou então me explicar como se faz pra utilizar qualquer dos métodos deste objeto? E também, onde posso saber quais os métodos suportados por este objeto do Word? Quais são eles?E, o que se precisa entender pra utilização e escrita correta destes métodos?Espero não estar pedindo muito.Desde já agradeço.Valeu! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 8, 2006 Denunciar Share Postado Novembro 8, 2006 A descrição e utilização destes métodos você encontra no help do VBA do Word, sendo que o jeito mais prático de utilizá-los é, no próprio Word, gravando uma macro fazendo exatamente o que você quer e depois indo no Editor do VBA (ALT+F11) e vendo o código gerado. Daí, é só adaptar.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Boavida Postado Novembro 9, 2006 Autor Denunciar Share Postado Novembro 9, 2006 Rapaz, Graymalkin, está ralado.É porque eu sou novo em C# e em programação OO.Tentei um bocado de coisa aqui, mas ainda não consegui resolver meu problema.Olha o que eu fiz:Pesquisei a ajuda do VBA do Word pra conhecer algumas coisas e, depois, simulei a localização de uma palavra pra gerar a macro. A macro ficou assim:Sub TesteLocalizar() ' ' TesteLocalizar Macro ' Macro gravada 9/11/2006 por Andre ' Selection.Find.ClearFormatting With Selection.Find .Text = "$nome$" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute End Sub Tentei colocar isso no C# e escrevi assim (a alteração que fiz foi apenas na 3ª linha com relação ao código que li no seu artigo): Selection = tipoWord.InvokeMember("Selection", BindingFlags.GetProperty, null, winword, new Object[] { }); tipoSelection = Selection.GetType(); tipoSelection.InvokeMember("Find", BindingFlags.InvokeMethod, null, Selection, new Object[] { "$nome$" }); Só que não funcionou. Tentei também colocar alguns outros parâmetros ao lado de "$nome$", mas também não deu. (Não sei nem se é ali mesmo onde se colocam parâmetros) Aí, achei que esta linha pudesse retornar a string da palavra, aí coloquei assim: resultado = tipoSelection.InvokeMember("Find", BindingFlags.InvokeMethod, null, Selection, new Object[] { "$nome$" }).ToString();sendo resultado uma string, mas também não funcionou.você pode me dar uma ajuda aí?Em que que eu estou errando?Com relação a parâmetros, como faz?Desde já, agradeço muito.Valeu! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 11, 2006 Denunciar Share Postado Novembro 11, 2006 O problema é que Find *não* é um método, e sim uma propriedade. Para executar mesmo é o método Execute() desta propriedade. Veja um código de exemplo:Type tipoWord = Type.GetTypeFromProgID("Word.Application"); Type tipoDocuments, tipoSelection, tipoFind; object winword = Activator.CreateInstance(tipoWord); object Documents, Selection, Find; Documents = tipoWord.InvokeMember("Documents", BindingFlags.GetProperty, null, winword, new Object[] {}); tipoDocuments = Documents.GetType(); tipoDocuments.InvokeMember("Add", BindingFlags.InvokeMethod, null, Documents, new Object[] {}); Selection = tipoWord.InvokeMember("Selection", BindingFlags.GetProperty, null, winword, new Object[] {}); tipoSelection = Selection.GetType(); tipoSelection.InvokeMember("TypeText", BindingFlags.InvokeMethod, null, Selection, new Object[] {"um $nome$ e outro teste"}); tipoSelection.InvokeMember("HomeKey", BindingFlags.InvokeMethod, null, Selection, new Object[] { 6 }); Find = tipoSelection.InvokeMember("Find", BindingFlags.GetProperty, null, Selection, new Object[] {}); tipoFind = Find.GetType(); tipoFind.InvokeMember("Text", BindingFlags.SetProperty, null, Find, new object[] { "$nome$" }); tipoFind.InvokeMember("Execute", BindingFlags.InvokeMethod, null, Find, new Object[] {}); tipoWord.InvokeMember("Visible", BindingFlags.SetProperty, null, winword, new object[] {true});Certo? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Janeiro 13, 2009 Denunciar Share Postado Janeiro 13, 2009 Povo que programa.Eis que estou em seria dificuldade.Estou gerando relatórios que veem do MySql em PrintDocument eexibindo o relatório em PrintPrewiewDialog.Agora preciso pegar o que esta sendo mostrado (conteudo) no relatório e exportar para um documento do word e depois envia-lo por e-mail.Isso em windows application!Acontece que estou ralando nas pesquisas e não consigo achar nada que resolva.Caso alguém possa ajudar segue o link onde esta o projeto que estou fazendo.Ob.: O botão "EXPORTAR .DOC" la no PrintPreviewDialog já criei e já esta adicionado la.Só esta sem o código para exportação.http://www.carcleo.com/Pedidos.zip Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Janeiro 13, 2009 Denunciar Share Postado Janeiro 13, 2009 Oh turma, dessa forma deu certo mas, e agora?Como faço para pegar o que esta no formulario e jogar para o word?Lembrando que desse jeito já exta criando o documento word com os dados que estão dentro do whit:Private Sub MeuClickExportar(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) If e.ClickedItem.Text = "EXPORTAR .DOC" Then Dim word As Microsoft.Office.Interop.Word.Application word = CreateObject("Word.Application") word.Documents.Add() word.Visible = True With word .Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter .Selection.Font.Size = 20 .Selection.Font.Bold = True .Selection.TypeText(Text:="VISUAL BASIC - JCMSOFT") .Selection.TypeParagraph() .Selection.Font.Size = 15 .Selection.TypeText(Text:="www.geocities.com/macoratti") .Selection.TypeParagraph() .Selection.TypeParagraph() .Selection.Font.Size = 10 .Selection.Font.Italic = True .Selection.TypeText(Text:="Tudo para Visual Basic e Banco de dados") End With End If End Sub Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Janeiro 14, 2009 Denunciar Share Postado Janeiro 14, 2009 Bom, será que alguém poderia me ajudar pelo menos nessa: .Selection.TypeText(Text:="VISUAL BASIC - JCMSOFT"Eu insiro um texto no documento word criado.Agora. Como faço para inserir uma imagem?Isso já resolvbe o problema! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 quintelab Postado Janeiro 14, 2009 Denunciar Share Postado Janeiro 14, 2009 http://scriptbrasil.com.br/forum/index.php?showtopic=131026Tente manter suas dúvidas em um único tópico, ficará mais fácil auxiliar.Abraços... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Boavida
Uso o Visual Studio 2005
Pessoal, eu estou querendo criar um relatório e exportá-lo pra .doc ou .rtf.
A minha idéia é criar antes, pelo Word mesmo, um relatório padrão, deixando umas variáveis nele ($nome, por exemplo) para posterior substituição.
Então, eu gostaria que alguém me ajudasse e me dissesse como faz pra localizar uma determinada palavra no documento do Word e substituí-la por outra.
Desde já agradeço pela atenção e disposição em ajudar-me.
Valeu!
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.