Replace file doc

sabato 26 luglio 2008 - 12.35

mame37 Profilo | Junior Member

Buongiorno a tutti sono alle prese con un'applicazione windows form che in base a dei valori inseriti tramite dei text box mi vadano a sostituire dei valori all'interno di un file .doc. Il mio problema è quello che quando vado a fare il replace al momento del salvataggio del file modificato quando vado ad aprirlo non mi viene codificato da word. Quello che volevo capire se è possibile fare un'operazione del genere ovvero fare il replace su un file doc di più valori. Vi posto il mio codice per essere più chiaro


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
string Nome = textBox1.Text.ToString();
string Cognome = textBox2.Text.ToString();


StreamReader streamReader = File.OpenText(@"C:\replace.doc");
string contents = streamReader.ReadToEnd();
streamReader.Close();

StreamWriter streamWriter = File.CreateText(@"C:\prova_" + Nome + ".doc");
streamWriter.Write(contents.Replace("%NOME%", Nome));
streamWriter.Write(contents.Replace("%COGNOME%", Cognome));
streamWriter.Close();
MessageBox.Show("Compilata");

}
}
}


Grazie per ogni eventuale risposta.. se fosse possibile potete dirmi se è possibile da doc fare il replace e salvare in pdf? grazie a tutti!

Cteniza Profilo | Guru

Un file di word NON è un file di testo sul quale funziona il comando Replace.
Per poter arrivare alla modifica hai alcuni modi:
- automazione word (apri l'applicazione word e applichi le variazioni)
- hai non un .doc ma un .rtf (allora puoi aprire il file come file di testo, fare delle sostituzioni in posizioni già ben distinte
- vsto (fai un progetto con visual studio for office), per poterlo fare devi avere visual studio for office installato e office 2003/2007
- openxml (non un .doc comunque), mediante l'interfacciamento con la libreria e le classi xml

mame37 Profilo | Junior Member

ho convertito il file .doc in xml e mi sostituisce il primo campo tramite il replace ma tutti gli altri no rimangono invariati. Non so dove sbattere la testa. qualcuno può aiutarmi posto il codice:


private void button1_Click(object sender, EventArgs e)
{

tutte le variabili dichiarate string



string tempFileName = System.IO.Path.GetTempFileName();

string NomeFile = "C:\\Users\\..\\replace.xml";

using (StreamReader sr = new StreamReader(NomeFile, Encoding.GetEncoding(1252)))
{
using (StreamWriter sw = new StreamWriter(tempFileName, false, Encoding.GetEncoding(1252)))
{
while (sr.Peek() != -1)
{


//sw.WriteLine(sr.ReadToEnd().Replace("%NOME%", Nome));
sw.WriteLine(sr.ReadToEnd().Replace("%COGNOME%", Cognome));
sw.WriteLine(sr.ReadToEnd().Replace("%PERSONE%", Persone));
sw.WriteLine(sr.ReadToEnd().Replace("%RECAPITO%", Recapito));
sw.WriteLine(sr.ReadToEnd().Replace("%TELEFONO%", Telefono));

}
}
}

string Destinazione = (@"C:\Users\..\MODIFICATO"+Nome+".XML");
File.Move(tempFileName, Destinazione);
}


Mi sostituisce solo il nome mentre gli altri rimangono invariati. grazie x eventuali suggerimenti

Cteniza Profilo | Guru

Ti ho detto che il formato è xml non che devi fare un file con estensione xml.
Per poter gestire un doc con il formato xml supportato da microsoft devi scaricare la libreria sdk e poi interfacciarti con questa.
In ogni caso si tratta di scrivere un file in formato xml con le specifiche di microsoft per i documenti word.

mame37 Profilo | Junior Member

Ma in questo modo me lo sostituisce e mi rimane la formattazione del file solo che mi sostituisce solo il primo campo %NOME% mentre tutti gli altri no

StefanoLep Profilo | Senior Member

Il metodo che ti ha suggerito Cteniza è sicuramente più elegante di questo che ti posto, si tratta di creare un file .Doc con dei "Bookmark" in modo da valorizzarli come fossero textbox, ti allego uno snippet
Dim objword As Object 'new Word.Application ' 'New Word.ApplicationClass objword = CreateObject("Word.Application") objword.Visible = False Dim filename As String filename = txtPercorso.Text.Trim objword.Documents.Open(filename) objword.ActiveDocument.Bookmarks.Item("Cliente").Select() objword.Selection.Text = Cliente objword.ActiveDocument.Bookmarks.Item("Data").Select() objword.Selection.Text = Data objword.ActiveDocument.Bookmarks.Item("Protocollo").Select() objword.Selection.Text = Protocollo objword.ActiveDocument.Bookmarks.Item("Reparto").Select() objword.Selection.Text = Reparto objword.ActiveDocument.Bookmarks.Item("Sigla").Select() objword.Selection.Text = Sigla objword.ActiveDocument.Bookmarks.Item("Ore").Select() objword.Selection.Text = Ore


Spero di averti aiutato, ciao :-)

E' la passione che genera il progresso :-)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5