Замена слов по шаблону Word (C#)
Формулировка задачи:
Всем добрый вечер! Помогите плз. Есть Ворд файл: Спарвка1.doc. В нем расставлены метки,
например {name},{lastname}, нужно открыть его изменить на "Вася","Васильев" соответственно. Я нашел нужный класс, который это делает.И вот проблема:
- Заменяется только первая метка т.е. {name}, остальные почему-то нет.
Подскажите, как можно все это исправить. Нужно позарез!!!!!!!!!!!!!
Вызываем:
class myWord
{
private object internalWord;
private object objCurDoc=null;
private bool FAutoClose = false;
private bool IsSuccesLast = false;
public bool IsSucces
{
get { bool old = IsSuccesLast; IsSuccesLast = false; return old; }
}
public myWord (bool AutoClose)
{
FAutoClose = AutoClose;
try
{
Type objClassType;
objClassType = Type.GetTypeFromProgID("Word.Application");
internalWord = Activator.CreateInstance(objClassType);
IsSuccesLast = true;
}
catch
{
IsSuccesLast = false;
}
}
~myWord()
{
if ((FAutoClose) && (objCurDoc!=null))
{
this.CloseDoc();
}
}
public bool CloseDoc()
{
try
{
//Close Active Document
objCurDoc.GetType().InvokeMember("Close", BindingFlags.InvokeMethod,
null, objCurDoc, null);
objCurDoc = null;
return true;
}
catch
{
return false;
}
}
public bool ShowWord(bool is_visible)
{
try
{
object[] Parameters;
Parameters = new Object[1];
Parameters[0] = is_visible;
internalWord.GetType().InvokeMember("Visible", BindingFlags.SetProperty,
null, internalWord, Parameters);
return true;
}
catch
{
return false;
}
}
public bool OpenFile(string FileName)
{
try
{
object objDocs_Late = internalWord.GetType().InvokeMember(
"Documents", BindingFlags.GetProperty, null, internalWord, null);
object[] Parameters;
Parameters = new Object[1];
Parameters[0] = FileName;
objCurDoc = objDocs_Late.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, objDocs_Late, Parameters);
return true;
}
catch
{
return false;
}
}
public bool SaveDocument()
{
if (objCurDoc == null) return false;
try
{
objCurDoc.GetType().InvokeMember("Save",
BindingFlags.InvokeMethod, null, objCurDoc, null);
return true;
}
catch
{
return false;
}
}
public bool FindReplace(string findtext, string replacetext)
{
try
{
object[] Parameters;
object objSelection = internalWord.GetType().InvokeMember(
"Selection", BindingFlags.GetProperty, null, internalWord, null);
objSelection.GetType().InvokeMember("ClearFormatting",
BindingFlags.InvokeMethod, null, objSelection, null);
object objFind = objSelection.GetType().InvokeMember(
"Find", BindingFlags.GetProperty, null, objSelection, null);
Parameters = new Object[11];
Parameters[0] = findtext; //find text
Parameters[1] = false; //match case
Parameters[2] = false; //match while word
Parameters[3] = false; //match wild card
Parameters[4] = false; //match sounds like
Parameters[5] = false; //match all word forms
Parameters[6] = true; //forward
Parameters[7] = false; //wrap
Parameters[8] = false; //format
Parameters[9] = replacetext; //replace text
Parameters[10] = true; //replace?
objFind.GetType().InvokeMember("Execute",
BindingFlags.InvokeMethod, null, objFind, Parameters);
return true;
}
catch
{
return false;
}
}
public bool SaveAs(string filename)
{
if (objCurDoc == null) return false;
object[] Parameters = new Object[1];
Parameters[0] = filename; //find text
try
{
objCurDoc.GetType().InvokeMember("SaveAs",
BindingFlags.InvokeMethod, null, objCurDoc, Parameters);
return true;
}
catch
{
return false;
}
}
public bool PrintPreview()
{
if (objCurDoc == null) return false;
try
{
objCurDoc.GetType().InvokeMember("PrintPreview",
BindingFlags.InvokeMethod, null, objCurDoc, null);
return true;
}
catch
{
return false;
}
}
public bool Print()
{
if (objCurDoc == null) return false;
try
{
object[] Parameters = new Object[14];
Parameters[0] = false; //in bacground?
Parameters[0] = Missing.Value; //append
Parameters[0] = 0; //all document wdPrintAllDocument
Parameters[0] = Missing.Value; //Output file name
Parameters[0] = Missing.Value; //From
Parameters[0] = Missing.Value; //To page
Parameters[0] = Missing.Value; //Item?
Parameters[0] = 1; //Copies
Parameters[0] = Missing.Value; //Pages
Parameters[0] = Missing.Value; //Page type?
Parameters[0] = false; //print to file
Parameters[0] = false; //collate
Parameters[0] = Missing.Value; //only for MAC
Parameters[0] = Missing.Value; //Manual duplex
Parameters[0] = Missing.Value; //collate
objCurDoc.GetType().InvokeMember("PrintOutOld",
BindingFlags.InvokeMethod, null, objCurDoc, Parameters);
return true;
}
catch
{
return false;
}
}
}myWord myW = new myWord(false);
myW.OpenFile(Application.StartupPath + "\\Спарвка1.doc");
myW.FindReplace("{name}", textBox1.Text);
myW.FindReplace("{lastname}", textBox2.Text);
myW.FindReplace("{date}", textBox3.Text);
myW.FindReplace("{nomer_prikaza}", textBox4.Text)Решение задачи: «Замена слов по шаблону Word (C#)»
textual
Листинг программы
private void довідкаВиданаВТомуЩоВінвонаЯвляєтьчсяАспірантомДенноїАспірантуриToolStripMenuItem_Click(object sender, EventArgs e)
{
int i = dataGridView1.SelectedCells[0].RowIndex;
string imya = Convert.ToString(dataGridView1.Rows[i].Cells[0].Value);
string familiya = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
string otchestvo = Convert.ToString(dataGridView1.Rows[i].Cells[2].Value);
string data_rozdeniya = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value);
string n_prikaza = Convert.ToString(dataGridView1.Rows[i].Cells[4].Value);
string specialnost = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
string kafedra = Convert.ToString(dataGridView1.Rows[i].Cells[6].Value);
string nauchniy_rukovoditel = Convert.ToString(dataGridView1.Rows[i].Cells[7].Value);
string s_kakogo_g_v_aspir = Convert.ToString(dataGridView1.Rows[i].Cells[8].Value);
Nik_Word ff = new Nik_Word();
ff.OpenWord(Application.StartupPath + "\\NewDocument.doc");
ff.ShowWord(true);
ff.FindReplace("{imya}", imya);
ff.FindReplace("{familiya}", familiya);
ff.FindReplace("{otchestvo}", otchestvo);
ff.FindReplace("{data_rozdeniya}", data_rozdeniya);
ff.FindReplace("{n_prikaza}", n_prikaza);
ff.FindReplace("{specialnost}", specialnost);
ff.FindReplace("{kafedra}", kafedra);
ff.FindReplace("{nauchniy_rukovoditel}", nauchniy_rukovoditel);
ff.FindReplace("{s_kakogo_g_v_aspir}", s_kakogo_g_v_aspir);
}