Abrir documento Docx pelo Windows Application

06/07/2012

0

Preciso fazer o seguinte. Abrir um documento modelo em DOC ou DOCX. Ao abrir, eu preciso substituir umas strings que começam assim: @NOME e colocar o nome que vem de uma base de dados. É necessário algum WordApplication para abrir documentos DOCX ou DOC? Alguém tem alguma sugestão para mim?
Pjava

Pjava

Responder

Posts

07/07/2012

Pjava

Fiz essa rotina. Coloquei alguns valores fixos apenas para testar e dá erro:

class WordFill {
public void PreencherPorReplace(string CaminhoDocMatriz)
{
object missing = System.Reflection.Missing.Value;
Word.Application oApp = new Word.Application();
object template = CaminhoDocMatriz;
Word.Document oDoc = oApp.Documents.Add(ref template, ref missing, ref missing, ref missing);

Word.Range oRng = oDoc.Range(ref missing, ref missing);
object FindText = [@NOME];
object ReplaceWith = PAULO;
object MatchWholeWord = true;
object Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@CPF];
ReplaceWith = 000.000.000-00;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@ENDERECO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@CEP];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CIDADE];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@UF];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CONTRATO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@NOME_BANCO];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@END_BANCO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@BAI_BANCO];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CID_BANCO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@UF_BANCO];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CEP_BANCO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

FindText = [@VENCTO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@ASSESSORIA];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@END_ASSE];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@BAI_ASSE];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CID_ASSE];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@UF_ASSE];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@CEP_ASSE];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);

oRng = oDoc.Range(ref missing, ref missing);
FindText = [@FONE_ASSE];
ReplaceWith = Pajero;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
oApp.Visible = true;

FindText = [@VENCTO];
ReplaceWith = azul;
MatchWholeWord = true;
Forward = false;
oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing, ref missing, ref Forward,
ref missing, ref missing, ref ReplaceWith, ref missing, ref missing, ref missing, ref missing, ref missing);
}
}


private void button3_Click(object sender, EventArgs e)
{
try

{
WordFill clsWord = new WordFill();
clsWord.PreencherPorReplace(Application.StartupPath + \\NOTIFICAÇÃO_EXTRAJUDICIAL_MODELO_ITAU1.docX);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}


Esse é o erro:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Responder

07/07/2012

Pjava

O código acima dá erro no application e Documents. Veja meus using e o erro. Peguei esse código em um outro forum:

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Configuration;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.OleDb;
using Microsoft.Office.Interop.Word;



Application application = new Application(); ==>> Erro no Application
Document document = application.Documents.Open(C:\\word.doc); ==>> Erro no Documents

// Loop through all words in the document.
int count = document.Words.Count;
for (int i = 1; i <= count; i++)
{
// Write the word.
string text = document.Words[i].Text;
Console.WriteLine(Word = , i, text);
}
// Close word.
application.Quit(); ==>> Erro no Quit
Responder

07/07/2012

Pjava

Resolvi o erro assim:
Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();
Responder

07/07/2012

Pjava

Agora ele não substitui. Fiz esse código e mesmo assim, o arquivo não é substituido. E sempre que eu abro o arquivo me dá a seguinte mensagem:

1.Deseja abrir o arquivo emmodo leitura?

2. Deseja mesclar .....

Esse é o código escrito:

string nome = NOME;

// Loop through all words in the document.
int count = document.Words.Count;
for (int i = 1; i <= count; i++)
{
if (nome == document.Words[i].Text)
{
nome.Replace(NOME, Paulo);
}
// Write the word.
//string text = document.Words[i].Text;
//Console.WriteLine(Word = , i, text);
}
Responder

07/07/2012

Pjava

Errei no método acima. Eu deveria substituir a string no word e não a variável. Bem, ela substitui no Debug, mas não salva e sempre faz a pergunta se quero abrir em modo leitura ou mesclar e eu não gostaria que essa mensagem apareça e que o documento fique salvo, pois virá do banco de dados dentro de um while a substituição das variáveis. Como proceder?

Código correto:

for (int i = 1; i <= count; i++)
{
if (nome == document.Words[i].Text)
{
document.Words[i].Text = Paulo;
}
}
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar