Как получить текст из номера строки в MS Word - PullRequest
2 голосов
/ 07 февраля 2012

Можно ли получить текст (строку или предложение) с заданного номера строки в MS Word с помощью автоматизации делопроизводства? Я имею в виду, что все в порядке, если я могу получить либо текст в данном номере строки, либо само предложение (я), которое является частью этой строки.

Я не предоставляю никакого кода, потому что я абсолютно не понимаю, как читать MS Word с помощью автоматизации делопроизводства. Я могу открыть файл так:

var wordApp = new ApplicationClass();
wordApp.Visible = false;
object file = path;
object misValue= Type.Missing; 
Word.Document doc = wordApp.Documents.Open(ref file, ref misValue, ref misValue,
                                           ref misValue, ref misValue, ref misValue,
                                           ref misValue, ref misValue, ref misValue,
                                           ref misValue, ref misValue, ref misValue);

//and rest of the code given I have a line number = 3 ?

Редактировать: Чтобы уточнить @Richard Marskell - сомнения Дракира, хотя текст в MS Word представляет собой длинную цепочку строк, автоматизация делопроизводства все же позволяет нам узнать номер строки. Фактически я получаю номер строки из другого фрагмента кода, например:

Word.Revision rev = //SomeRevision
object lineNo = rev.Range.get_Information(Word.WdInformation.wdFirstCharacterLineNumber);

Например, скажем, файл Word выглядит следующим образом:

fix grammatical or spelling errors

clarify meaning without changing it correct minor mistakes add related resources or links
always respect the original author

Здесь 4 строки.

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

К счастью, после некоторых эпических поисков я нашел решение.

    object file = Path.GetDirectoryName(Application.ExecutablePath) + @"\Answer.doc";

    Word.Application wordObject = new Word.ApplicationClass();
    wordObject.Visible = false;

    object nullobject = Missing.Value;
    Word.Document docs = wordObject.Documents.Open
        (ref file, ref nullobject, ref nullobject, ref nullobject,
        ref nullobject, ref nullobject, ref nullobject, ref nullobject,
        ref nullobject, ref nullobject, ref nullobject, ref nullobject,
        ref nullobject, ref nullobject, ref nullobject, ref nullobject);

    String strLine;
    bool bolEOF = false;

    docs.Characters[1].Select();

    int index = 0;
    do
    {
        object unit = Word.WdUnits.wdLine;
        object count = 1;
        wordObject.Selection.MoveEnd(ref unit, ref count);

        strLine = wordObject.Selection.Text;
        richTextBox1.Text += ++index + " - " + strLine + "\r\n"; //for our understanding

        object direction = Word.WdCollapseDirection.wdCollapseEnd;
        wordObject.Selection.Collapse(ref direction);

        if (wordObject.Selection.Bookmarks.Exists(@"\EndOfDoc"))
            bolEOF = true;
    } while (!bolEOF);

    docs.Close(ref nullobject, ref nullobject, ref nullobject);
    wordObject.Quit(ref nullobject, ref nullobject, ref nullobject);
    docs = null;
    wordObject = null;

Здесь - гениальность кода.Перейдите по ссылке, чтобы узнать больше о том, как это работает.

1 голос
/ 07 февраля 2012

Используйте это, если вы хотите читать стандартные текстовые файлы .txt Вот кое-что, что вы можете использовать для чтения файлов одним вызовом

List<string> strmsWord = 
    new List<string>(File.ReadAllLines(yourFilePath+ YourwordDocName));

, если вы хотите выполнить цикл и посмотреть, какие элементы этобыли возвращены использовать что-то вроде этого

 foreach (string strLines in strmsWord )
 {
   Console.WriteLine(strLines);
 }     

или

Я совершенно забыл о чем-то Документы Word, вероятно, в двоичном формате, так что посмотрите на это и прочитайте содержимое в RichTextBox и оттуда вы можетелибо получите желаемый номер строки, либо загрузите его в список после слов ... эта ссылка покажет вам Чтение из Word Doc , если вы хотите прочитать XML-форматирование слова Document: воттакже хорошая ссылка для оформления заказа ReadXML-формат документа Word

Этот еще более простой пример считывает содержимое в ClipBoard Загрузить слово в ClipBoard

0 голосов
/ 07 февраля 2013
var word = new Word.Application();
object miss = Missing.Value;
object path = @"D:\viewstate.docx";
object readOnly = true;
var docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, 
                               ref miss, ref miss, ref miss, ref miss, ref miss, 
                               ref miss, ref miss, ref miss, ref miss, ref miss, 
                               ref miss, ref miss);
string totaltext = "";

object unit = Word.WdUnits.wdLine;
object count = 1;
word.Selection.MoveEnd(ref unit, ref count);
totaltext = word.Selection.Text;

TextBox1.Text = totaltext;
docs.Close(ref miss, ref miss, ref miss);
word.Quit(ref miss, ref miss, ref miss);
docs = null;
word = null;
...