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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
            }
        }
Exemple #8
0
        // ИЩЕТ ПЕРВОЕ ВХОЖДЕНИЕ функция поиска 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);
        }
Exemple #9
0
        // поиск строки и ее замена на заданную строку
        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
        }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        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
        }
Exemple #12
0
        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("Допустимая Ошибка Документа");
                }
            }
        }
Exemple #14
0
        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
        }