Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Замена 2х-3х подряд идущих слов одним

Ответить
Настройки темы
.NET - Замена 2х-3х подряд идущих слов одним

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем Доброго времени суток! У меня есть программа, суть ее такова: берется вордовский документ, в нем выделяются слова желтым цветом, а потом при нажатии на кнопку заменяются тегами. Проблема в том, что если выделено несколько слов подряд, то заменяется каждое отдельно, а мне нужно чтобы одним заменялось. Как выполнить проверку на непрерывность выделения не могу найти... может кто подскажет?

Заранее спасибо!

Отправлено: 10:13, 28-05-2012

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


дурацкий ворд, обкуренные, обколотые создатели этой дурацкой автоматизации и психоделики! И т.д. и т.п.
Marsella_88,
Код: Выделить весь код
        private void button2_Click(object sender, EventArgs e)
        {
            // активный word-документ
            Word.Document thisDocument = thisApplication.ActiveDocument;
            // заменяем на Тег
            string find = "{Тег_";
            string finish = "конец";
            string slovo_1 = "";
            // счетчик
            int s = 0;
            int i = 0;

            // цикл поиска выделений в word-документе
            //foreach (Word.Range Range_1 in thisDocument.Words)
            Word.Range Range_1=thisDocument.Words[1];
            //Range_1.Text = " ";
            while (Range_1.Text!=finish)
            {
                i=i+1;
                Range_1 = thisDocument.Words[i];
                // проверка этого выделения на цвет
                if (Range_1.HighlightColorIndex == Word.WdColorIndex.wdYellow)
                {
                    while (Range_1.HighlightColorIndex == Word.WdColorIndex.wdYellow) 
                    {
                        // сюда записываем выделенное слово
                        slovo_1 = slovo_1+Range_1.Text;
                        Range_1.Text = "";// это приведет к тому, что выделенное слово станет пустым, это нарушит форматирование документа, но никуда от жтого не деться.
                        //i = i + 1;
                        Range_1 = thisDocument.Words[i];

                    };
                    
                    s = s + 1;
                    //Range_1.
далее по тексту
Используя конструкции while получилось добиться того, что выделяются и обрабатываются группы слов. (переделывать поиск дубликатов slovo_1 = slovov_2 я не стал, это не сложно)
Дело в том, что Word, кроме всего прочего относит к слову и следующий за ним пробел, чем делает жизнь интересней (не знаю, то ли радоваться, то ли нет). Это ведет к некоторым подводным камням, как то:
поиск нескольких выделенных слов подряд
Код: Выделить весь код
 while (Range_1.HighlightColorIndex == Word.WdColorIndex.wdYellow) 
                    {
                        // сюда записываем выделенное слово
                        slovo_1 = slovo_1+Range_1.Text;
                        Range_1.Text = "";// это приведет к тому, что выделенное слово станет пустым, это нарушит форматирование документа, но никуда от жтого не деться.
                        //i = i + 1; 
                        Range_1 = thisDocument.Words[i];

                    };
Строка Range_1.Text = "" приводит к тому, что значение становиться 'null', индекс слов сдвигается на -1, и следующие за ним попадает на его место.
Пример: Текст - просто черный текст
Желтый - некоторой текст с желтым выделением
[i] - индекс слова в массиве thisDocument.Words
исходник:
1) текст[1] желтый[2] желтый[3]
нашли "желтый", начали выполнять цикл поиска следующих желтых слов
2) slovo_1 = желтый
Range_1.Text="" -> Range_1.Text = null ->
текст[1] желтый[null] желтый[3] -> текст[1] желтый[null] желтый[2] !
Текст в Word примет вид
текст[1] желтый[2]

Вот такая хитрая вещь, поэтому i=i+1 я закомментировал.
Хочется отметить, что если желтое слово стоит в конце строки, то он съестся вместе с переносом строки.
Поэтому надо все желтые слова обрамлять либо пробелами, либо как то оставлять переносы строк.
Это первое. Второе - я ввел в условное слово, по которому прекращается обработка цикла while - это слово "конец". Его необходимо будет закрасить белым, и шрифту также назначить белый цвет. Т.е. вроде как есть, а вроде как и не видно. Либо заменить другим кодовым словом.
Большой вопрос с конечному оформлению документа. Оно(оформление) поплывет.

надеюсь поможет

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 04:08, 01-06-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


тьфу, не заметила второй страницы

Огромное спасибо за помощь, вечером разберу что к чему

Последний раз редактировалось Marsella_88, 01-06-2012 в 12:43.


Отправлено: 09:08, 01-06-2012 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Замена 2х-3х подряд идущих слов одним

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - [решено] Показ нескольких презентаций подряд AIA Microsoft Office (Word, Excel, Outlook и т.д.) 10 04-07-2011 11:26
HDD - [решено] Умерли подряд два жестких диска. Blackmore Накопители (SSD, HDD, USB Flash) 4 21-09-2010 01:49
[решено] Не работает 2 раза подряд ClipGet sashadeg AutoIt 4 05-03-2010 12:27
Разное - замена двух жестких дисков одним vitslob Microsoft Windows 2000/XP 2 12-06-2008 12:51
[решено] Комп убил две флешки подряд. Elkmann Непонятные проблемы с Железом 17 19-04-2008 12:00




 
Переход