Замена слов по шаблону 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д