public void FindAndReplace(string findText, string replaceText) { // обьектные строки для Word object strToFindObj = "{" + findText + "}"; object replaceStrObj = replaceText; //тип поиска и замены object replaceTypeObj; replaceTypeObj = Word.WdReplace.wdReplaceAll; // обходим все разделы документа for (int i = 1; i <= document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, replaceStrObj, replaceTypeObj, missingObj, missingObj, missingObj, missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } }
public void Replace(string oldText, string newText) { object strToFindObj = oldText; object replaceStrObj = newText; Word.Range wordRange; object replaceTypeObj; replaceTypeObj = Word.WdReplace.wdReplaceAll; for (int i = 1; i <= document.Sections.Count; i++) { wordRange = document.Sections[i].Range; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, replaceStrObj, replaceTypeObj, missingObj, missingObj, missingObj, missingObj }; wordFindObj.GetType(). InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } }
private void StringReplace(Word._Document document, string strToFind, string replaceStr) { Object missingObj = Missing.Value; // обьектные строки для Word object strToFindObj = strToFind; object replaceStrObj = replaceStr; // диапазон документа Word Word.Range wordRange; //тип поиска и замены object replaceTypeObj = Word.WdReplace.wdReplaceAll; // обходим все разделы документа for (int i = 1; i <= document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = document.Sections[i].Range; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, replaceStrObj, replaceTypeObj, missingObj, missingObj, missingObj, missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } }
Word.Range SearchRange(string stringToFind) { object stringToFindObj = stringToFind; Word.Range wordRange; bool rangeFound; for (int i = 1; i <= document.Sections.Count; i++) { wordRange = document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { stringToFindObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj }; rangeFound = (bool)wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) { return(wordRange); } } return(null); }
public void SwapText(params string[] marks) { bool rangeFound; Word.Range wordRange; foreach (string mark in marks) { rangeFound = false; for (int i = 1; i <= document.Sections.Count; i++) { wordRange = document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { mark, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj }; rangeFound = (bool)wordFindObj.GetType().InvokeMember ("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) { wordRange.Text = sr.ReadLine(); break; } } } }
public void replace(string toFind, string toReplace) { if (Closed) { throw new Exception("Документ уже закрыт"); } object toFindObj = toFind; object toReplaceObj = toReplace; Word.Range wordRange; object typeOfFindAndRep = Word.WdReplace.wdReplaceAll; try { for (int i = 1; i <= _document.Sections.Count; i++) { wordRange = _document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; object[] wordFindParams = new object[15] { toFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, toReplaceObj, typeOfFindAndRep, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", System.Reflection.BindingFlags.InvokeMethod, null, wordFindObj, wordFindParams); } } catch (Exception e) { throw new Exception("Ошибка при замене строк\n" + e.Message); } }
/// <summary> /// Поиск строки внутри Range, при успехе возвращает Range для этой строки /// </summary> /// <param name="containerRange"></param> /// <param name="stringToFind"></param> /// <returns></returns> private Word.Range findRangeByString(Word.Range containerRange, string stringToFind) { // проверяем, не закрыт ли документ или приложение ворд if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); } // оформляем обьектные параметры object stringToFindObj = stringToFind; bool rangeFound; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" * http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * rangeFound = containerRange.Find.Execute(ref stringToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = containerRange.Find; object[] wordFindParameters = new object[15] { stringToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj }; rangeFound = (bool)wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) { return(containerRange); } else { return(null); } }
// ИЩЕТ ПЕРВОЕ ВХОЖДЕНИЕ функция поиска Range в документе Word строке, возвращает соответствующий строке Range, на входе строка для поиска private MSWord.Range findRangeByString(string stringToFind) { // проверяем, не закрыт ли документ или приложение ворд if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); } // оформляем обьектные параметры object stringToFindObj = stringToFind; MSWord.Range wordRange; bool rangeFound; //в цикле обходим все разделы документа, получаем Range, запускаем поиск // если поиск вернул true, он долже ужать Range до найденное строки, выходим и возвращаем Range // обходим все разделы документа for (int i = 1; i <= _document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = _document.Sections[i].Range; /* * // Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * rangeFound = wordRange.Find.Execute(ref stringToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ MSWord.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { stringToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj }; rangeFound = (bool) wordFindObj.GetType() .InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) { return(wordRange); } } // если ничего не нашли, возвращаем null return(null); }
// поиск строки и ее замена на заданную строку public void ReplaceAllStrings(string strToFind, string replaceStr) { if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); } // обьектные строки для Word object strToFindObj = strToFind; object replaceStrObj = replaceStr; // диапазон документа Word Word.Range wordRange; //тип поиска и замены object replaceTypeObj; replaceTypeObj = Word.WdReplace.wdReplaceAll; try { // обходим все разделы документа for (int i = 1; i <= _document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = _document.Sections[i].Range; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } } catch (Exception error) { throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllStrings)"); } // завершение функции поиска и замены SearchAndReplace }
private void ReplaceAllStr(object strToFind, object strToReplace) { List <Word.Range> ranges = new List <Word.Range>(); Word.Range wordRange; bool rangeFound; object replaceTypeObj = Word.WdReplace.wdReplaceAll; // обходим все разделы документа for (int i = 1; i <= _document.Sections.Count; i++) { wordRange = _document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFind, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, strToReplace, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } }
public void Inv(StructuresAlones alones) { #region открываем шаблон application = new Word.Application(); object templatePathObj = Path.Combine(Application.StartupPath, @"карта обследования ребенка-инвалида.dotx"); try { document = application.Documents.Add(ref templatePathObj, ref _missingObj, ref _missingObj, ref _missingObj); }catch (Exception ex) { document.Close(ref falseObj, ref _missingObj, ref _missingObj); application.Quit(ref _missingObj, ref _missingObj, ref _missingObj); document = null; application = null; throw ex; } application.Visible = true; #endregion #region Замена Word.Range wordRange; object replaceTypeObj = Word.WdReplace.wdReplaceAll; for (int i = 1; i <= document.Sections.Count; i++) { wordRange = document.Sections[i].Range; Word.Find wordFindObj = wordRange.Find; //основное object[] wordFindParameters = new object[15] { (object)"@@Adres", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.alone.Country + " " + alones.alone.TypeUl + alones.alone.Street + " д." + alones.alone.House + " корп." + alones.alone.Apartament + " кв." + alones.alone.Housing, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@Telephon", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.alone.Phone, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@FIO", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.alone.Family + " " + alones.alone.Name + " " + alones.alone.Surname, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@DateRo", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.alone.DateRo, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); //инвалидность wordFindParameters = new object[15] { (object)"@@Stepen", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.invalidnost.stepen, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@Diagnoz", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.invalidnost.diagnoz, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@DateInv", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.invalidnost.date_start, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@DatePereos", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.invalidnost.date_pere, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); //родители wordFindParameters = new object[15] { (object)"@@Mather", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.family.fioMather, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); wordFindParameters = new object[15] { (object)"@@Father", _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, (object)alones.family.fioFather, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } #endregion #region сохранение #endregion }
private void poisk() { string[] marks = new string[8] { "FIO", "sex", "age", "experience", "company", "department", "profession", "factors" }; string[] privData = new string[8] { D.FIO, D.sex, D.age, D.experience, D.company, D.department, D.profession, D.factors }; Microsoft.Office.Interop.Word.Application application; Microsoft.Office.Interop.Word.Document document; Object missingObj = System.Reflection.Missing.Value; Object trueObj = true; Object falseObj = false; application = new Microsoft.Office.Interop.Word.Application(); string exeDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); Object pathObj = System.IO.Path.Combine(exeDir, "извещение 1"); try { document = application.Documents.Add(ref pathObj, ref missingObj, ref missingObj, true); } catch (Exception error) { //document.Close(ref falseObj, ref missingObj, ref missingObj); application.Quit(ref falseObj, ref missingObj, ref missingObj); document = null; application = null; throw error; } application.Visible = true; // обьектные строки для Word //object strToFind = null; //object replaceStr = null; object strToFindObj; // = strToFind; object replaceStrObj; //= replaceStr; // диапазон документа Word Microsoft.Office.Interop.Word.Range wordRange; //тип поиска и замены object replaceTypeObj; replaceTypeObj = WdReplace.wdReplaceAll; //object bookmarkNameObj = "department"; //заменяем по очереди нужные слова for (int j = 0; j < 8; j++) { strToFindObj = marks[j]; replaceStrObj = privData[j]; // обходим все разделы документа for (int i = 1; i <= document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = document.Sections[i].Range; Microsoft.Office.Interop.Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, missingObj, replaceStrObj, replaceTypeObj, missingObj, missingObj, missingObj, missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } } }
private void toolStripButton2_Click(object sender, EventArgs e) { /*string pathToTemplate=""; * * * // выход, если была нажата кнопка Отмена и прочие (кроме ОК) * if (openFileDialog1.ShowDialog() != DialogResult.OK) * { * pathToTemplate = openFileDialog1.FileName; * } * * WordDocument wordDoc = null; * * wordDoc = new WordDocument(pathToTemplate); * * string[] toFindStrTextBox = new string[identytay.dataGridView1.RowCount]; * string[] replaceStrTextBox = new string[identytay.dataGridView1.RowCount]; * * for(int i=0;i<identytay.dataGridView1.RowCount;i++) * { * toFindStrTextBox[i] = (string)identytay.dataGridView1.Rows[i].Cells[2].Value; * replaceStrTextBox[i] = (string)identytay.dataGridView1.Rows[i].Cells[1].Value; * wordDoc.ReplaceAllStrings(toFindStrTextBox[i], replaceStrTextBox[i]); * } * * wordDoc.Visible = true;*/ if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { object[] strToFind = new object[identytay.dataGridView1.RowCount]; object[] replaceStr = new object[identytay.dataGridView1.RowCount]; for (int i = 0; i < identytay.dataGridView1.RowCount; i++) { strToFind[i] = identytay.dataGridView1.Rows[i].Cells[2].Value; replaceStr[i] = identytay.dataGridView1.Rows[i].Cells[1].Value; } dynamic app = new word.Application(); dynamic doc = app.Documents.Add(openFileDialog1.FileName, false); // обьектные строки для Word object strToFindObj = "3"; object replaceStrObj = "4"; // диапазон документа Word word.Range wordRange; //тип поиска и замены object replaceTypeObj; replaceTypeObj = word.WdReplace.wdReplaceAll; // обходим все разделы документа for (int j = 0; j < identytay.dataGridView1.RowCount; j++) { for (int i = 1; i <= doc.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = doc.Sections[i].Range; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFind[j], _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStr[j], replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } } doc.Save(); doc.Close(); } catch { MessageBox.Show("Допустимая Ошибка Документа"); } } }
private void searchWord( Word.Range objRange, string findStr, ref long startPos, ref long endPos ) { Word.Find objFind = objRange.Find; // objFind.ClearFormatting(); object oFtxt = findStr; object oMis = System.Reflection.Missing.Value; object oTru = true; object oFal = false; // Console.WriteLine("Start: {0}", objRange.Start); // Console.WriteLine("End: {0}", objRange.End); object[] Parameters; Parameters = new object[15]; Parameters[0] = oFtxt; // FindText Parameters[1] = oMis; // MatchCase Parameters[2] = oTru; // MatchWholeWord Parameters[3] = oMis; // MatchWildcards Parameters[4] = oMis; // MatchSoundsLike Parameters[5] = oMis; // MatchAllWordForms Parameters[6] = oTru; // Forward Parameters[7] = oMis; // Wrap Parameters[8] = oMis; // Format Parameters[9] = oMis; // ReplaceWith Parameters[10] = oMis; // Replace Parameters[11] = oMis; // MatchKashida Parameters[12] = oMis; // MatchDiacritics Parameters[13] = oMis; // MatchAlefHamza Parameters[14] = oMis; // MatchControl bool bFound = (bool)objFind.GetType().InvokeMember( "Execute", System.Reflection.BindingFlags.InvokeMethod, null, objFind, Parameters ); // objFind.Execute( // oFtxt, // FindText // oMis, // MatchCase // oTru, // MatchWholeWord // oMis, // MatchWildcards // oMis, // MatchSoundsLike // oMis, // MatchAllWordForms // oTru, // Forward // oMis, // Wrap // oMis, // Format // oMis, // ReplaceWith // oMis, // Replace // oMis, // MatchKashida // oMis, // MatchDiacritics // oMis, // MatchAlefHamza // oMis // MatchControl // ); // if (objFind.Found == true) // { // startPos = objRange.Start; // endPos = objRange.End; // } // else // { // startPos = 0; // endPos = 0; // } if (bFound == true) { // Console.WriteLine("True"); startPos = objRange.Start; endPos = objRange.End; } else { // Console.WriteLine("False"); startPos = 0; endPos = 0; } // Console.WriteLine("Start: {0}", objRange.Start); // Console.WriteLine("End: {0}", objRange.End); }
// поиск строки и ее замена на заданную строку public void ReplaceAllStrings(string strToFind, string replaceStr) { if (Closed) { throw new Exception("Ошибка при обращении к документу Word. Документ уже закрыт."); } // обьектные строки для Word object strToFindObj = strToFind; object replaceStrObj = replaceStr; // диапазон документа Word Word.Range wordRange; //тип поиска и замены object replaceTypeObj; replaceTypeObj = Word.WdReplace.wdReplaceAll; try { FindAndReplaceCalantitul(_document, strToFind, replaceStr); ////**Калантитул) //foreach (Word.Range range in _document.StoryRanges) //{ // //Например так: (поиск всех фигур и замена в них текста) // foreach (Word.Shape My_Shape in range.ShapeRange) // { // My_Shape.TextFrame.TextRange.Text = My_Shape.TextFrame.TextRange.Text.Replace(strToFind, replaceStr); // } // //или для колонитула верхнего: // foreach (Word.Shape My_Shape in range.Sections[1].Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes) // { // My_Shape.TextFrame.TextRange.Text = My_Shape.TextFrame.TextRange.Text.Replace(strToFind, replaceStr); // } // ////или для колонитула нижнего: // //foreach (Word.Shape My_Shape in range.Sections[1].Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes) // //{ // // My_Shape.TextFrame.TextRange.Text = My_Shape.TextFrame.TextRange.Text.Replace(strToFind, replaceStr); // //} // ////Замена в калантитулах // //foreach (Word.Shape My_Shape in range.Sections[1] // // .Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes) // //{ // // My_Shape.TextFrame.TextRange.Text = My_Shape.TextFrame.TextRange.Text.Replace(strToFind, replaceStr); // //} //} // обходим все разделы документа for (int i = 1; i <= _document.Sections.Count; i++) { // берем всю секцию диапазоном wordRange = _document.Sections[i].Range; /* * Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data" Подробности: http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 * // выполняем метод поиска и замены обьекта диапазона ворд * wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = wordRange.Find; object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj }; wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); } } catch (Exception error) { throw new Exception("Ошибка при выполнении замене всех строк в документе Word. " + error.Message + " (ReplaceAllStrings)"); } // завершение функции поиска и замены SearchAndReplace }