Как перечислить текстовый документ, используя API взаимодействия с офисом? - PullRequest
2 голосов
/ 18 августа 2010

Я хочу пройти по всем элементам текстового документа по одному и в соответствии с типом элемента (заголовок, предложение, таблица, изображение, текстовое поле, форма и т. Д.), Я хочу обработать этот элемент.Я пытался найти любой перечислитель или объект, который может представлять элементы документа в API взаимодействия с офисом, но не смог их найти.API предлагает предложения, абзацы, коллекции форм, но не предоставляет общий объект, который может указывать на следующий элемент.Например:

<header of document>
<plain text sentences>
<table with many rows,columns>
<text box>
<image>
<footer>

(представьте, что это текстовый документ)


Итак, теперь мне нужен некоторый перечислитель, который сначала даст мне <header of document>, а затем на следующей итерациидай мне <plain text sentences>, <table with many rows,columns> и так далее.Кто-нибудь знает, как этого добиться?Возможно ли это?

Я использую C #, Visual Studio 2005 и Word 2003.

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

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

Например, документ может иметь несколько верхних и нижних колонтитулов для первой страницы, а также четных и нечетных страниц, содержать более одного раздела с различными настройками верхнего и нижнего колонтитула, содержать сноски, комментарии и ревизии и объекты, такие как таблицы текстовые поля, изображения и фигуры могут отображаться как встроенные в текст или как плавающие. Короче говоря, нет последовательности исправлений элементов.

Вы должны проверить, насколько сложны ваши входные документы и на основе результатов этого анализа решить, как перебирать абзацы и прикрепленные изображения и формы и т. Д.

3 голосов
/ 09 января 2011

например:

        // open the file
        Word.ApplicationClass app = new Word.ApplicationClass();
        object path = @"c:\Users\name\Desktop\Весь набор.docx";
        object missing = System.Reflection.Missing.Value;

        Word.Document doc = null;
        try
        {
            doc = app.Documents.Open(ref path,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing);

            // index
            foreach ( Word.Section section in doc.Sections)
            {
                Debug.WriteLine("Section index:" + section.Index);
                Debug.WriteLine("section start: " + section.Range.Start + ", section end: " + section.Range.End);

            }


            bool processNextTable = false;
            foreach (Word.Paragraph paragraph in doc.Paragraphs)
            {
                string toWrite = paragraph.Range.Text;
                System.Diagnostics.Debug.WriteLine(toWrite);
            }

            foreach (Word.Table table in doc.Tables)
            {
                foreach (Word.Row wRow in table.Rows)
                    foreach (Word.Cell cell in wRow.Cells)
                    {
                    }
            }

        }
        finally
        {
            if (doc != null)
            {
                bool saveChanges = false; // temporary not save any changes
                app.Quit(ref saveChanges, ref missing, ref missing);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...