Outlook Addin: пытался удалить текст из RTFBody с помощью WordEditor - PullRequest
0 голосов
/ 26 апреля 2020

Я пытался удалить URL из RTFBody Outlook. Назначение. Я использую этот код для этого:

            byte[] rtfBody = myAppointment.RTFBody;
            if (rtfBody.Length > 0)
            {
                if (myAppointment == null)
                {
                    return;
                }
                Outlook.Inspector myInspector = myAppointment.GetInspector;
                Microsoft.Office.Interop.Word.Document document = myInspector.WordEditor;
                var findObject = document.Application.Selection.Find;
                findObject.ClearFormatting();
                findObject.Text = url;
                findObject.Replacement.ClearFormatting();
                findObject.Replacement.Text = "";

                object replaceAll = WdReplace.wdReplaceAll;
                findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref replaceAll, ref missing, ref missing, ref missing, ref missing);

К сожалению, код не заменяет URL-адрес RTFBody. Чего-то не хватает? Может ли быть так, что некоторые специальные символы, включенные в URL, такие как ":", "/", приводят к этой проблеме?

После вызова Save () в пункте назначения он все еще не показывает замену

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Выяснили причину: если вы попытаетесь (например, в Word) найти и заменить текст, который содержит гиперссылку (как объект гиперссылки в документе Word), это будет (по какой-то причине НЕ работает). Поэтому я добавил следующий код перед поиском и заменой кода (см. Выше): Microsoft.Office.Interop.Word.Hyperlinks links = document.Hyperlinks;

                foreach (Hyperlink link in links)
                {
                    string c = link.TextToDisplay; // perhaps concatenating Address and SubAddress would be better
                    if (c != null)
                    {
                        if (c.Equals(myUrl))
                        {
                            link.Delete();
                        }
                    }
                }

Чтобы уточнить это: URL содержит весь текст блок, который читает что-то вроде этого

"бла бла бла https://something.com/blabla"

, тогда как myUrl содержит

https://something.com/blabla

Теперь все работает.

0 голосов
/ 26 апреля 2020

Прежде всего, вам нужно вызвать метод Сохранить , чтобы применить ваши изменения. Только тогда вы можете проверить свои результаты, используя свойство RTFBody или в пользовательском интерфейсе Outlook.

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

...