saravanan6 Ответов: 2

как обнаружить пустой абзац в документе Word с помощью Microsoft.Офис.Взаимодействие.Слово в C#4.0?


Всем Привет,

Я хочу обнаружить пустые абзацы в документе Word с помощью Microsoft.Офис.- Взаимодействия.Слово. Предположим, если в моем документе word есть несколько пустых абзацев,то

Предположим, что пункт 3 является пустым абзацем...

Microsoft.Office.Interop.Word.Paragraph para = wordDoc.Content.Paragraphs[3];
int cSent = para.Range.Sentences.Count;

for (int j = 1; j <= cSent; j++)
{
 Microsoft.Office.Interop.Word.Range sent = para.Range.Sentences[j];
 MessageBox.Show("Sent lines :" + sent.Text.ToString());
}

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

Есть ли способ получить пустой список абзацев?

Пожалуйста, помогите мне выбраться из этой проблемы...

2 Ответов

Рейтинг:
2

Member 11973990

//Add Library
using Word = Microsoft.Office.Interop.Word;

try
{
object oMissing = System.Type.Missing;
            Word.Application wordApp = new Word.Application();
            Microsoft.Office.Interop.Word.Paragraphs paragraphs = null;

            Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref wordPath, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                 ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            doc.Activate();
 //To delete empty paragraph
                paragraphs = doc.Paragraphs;
foreach (Word.Paragraph paragraph in paragraphs)
                    {
                        if (paragraph.Range.Text.Trim() == string.Empty)
                        {
                            paragraph.Range.Select();
                            wordApp.Selection.Delete();
                        }
                    }
}catch (Exception)
            {
            }
            finally
            {
                if (doc != null)
                {
                    ((_Document)doc).Close(ref oMissing, ref oMissing, ref oMissing);
                    Marshal.FinalReleaseComObject(doc);
                }
                if (wordApp != null)
                {
                    ((_Application)wordApp).Quit();
                    Marshal.FinalReleaseComObject(wordApp);
                }
            }


CHill60

Этот вопрос был задан, на него был дан ответ и принято решение почти 6 лет назад.
Хотя вы представили еще один способ определить, является ли абзац пустым, вы не включили никаких слов, чтобы привлечь наше внимание к нему.
Хуже того, у вас есть пустой блок catch, который "глотает" каждое исключение - это очень плохая практика

Рейтинг:
13

Sergey Alexandrovich Kryukov

Ты делаешь это неправильно. Вы предполагаете 3 пустых абзаца (почему? вам нужно обнаружить их все), но вместо этого вы берете один абзац № 3. Почему?!

Возьмите все абзацы и перечислите их:

using Microsoft.Office.Interop.Word;
using ParagraphsList =
    System.Collections.Generic.List<Microsoft.Office.Interop.Word.Paragraph>;

//...

static Paragraph[] FindEmptyParagraphs(Document document) {
    ParagraphsList list = new ParagraphsList();
    foreach (Paragraph para in document.ListParagraphs)
        if ((para.Range.End - para.Range.Start) < 1)
            list.Add(para);
    return list.ToArray();
}


различный способ:
using Microsoft.Office.Interop.Word;
using ParagraphsList =
    System.Collections.Generic.List<Microsoft.Office.Interop.Word.Paragraph>;

//...

static Paragraph[] FindEmptyParagraphs(Document document) {
    ParagraphsList list = new ParagraphsList();
    foreach (Paragraph para in document.Content.Paragraphs)
        if ((para.Range.End - para.Range.Start) < 1)
            list.Add(para);
    return list.ToArray();
}


- Готово!

—СА