Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Построчное чтение из документа Word


Автор: Katran7 1.10.2012, 22:23
Доброго всем времени суток. Обращаюсь к вам с просьбой о помощи. Скажите может кто-то сталкивался с такой задачей. 
Имеется документ Word(*.doc или *.docx) в нем хранятся такого вида строки строки:
ФИО : Фамилия Имя Отчество
Домашний адрес  : улица, дом
.... и т.д и т.п. 
В общем информация о человеке.

Необходимо считать из документа, из каждой строки, те значения которые находятся после двоеточия и записать эти значения в определенные TextBox'ы на форме.

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

Заранее благодарен!

Автор: diadiavova 2.10.2012, 21:45
Цитата(Katran7 @  1.10.2012,  23:23 Найти цитируемый пост)
Как вывести полностью весь текст из документа в переменную (другой документ) знаю

Не совсем понятно, что это значит. В смысле извлечь текст из документов ты можешь и задача только в том, чтобы прочитать его построчно? Если так, то откуда берется этот текст вообще не имеет значения. Разбить текстовую переменную на строки можно к примеру с помощью метода Split класса String. В качестве сепараторов передавай \r\n

Автор: Katran7 4.10.2012, 21:38
Подскажите еще такуе пожалуйста. С помощью приведенного ниже кода считываю содержимое из docx - документа.  В документе хронятся строки вида:
А : Б
З : Г
 
Из строки считываю данные которые стоят после двоеточия. Из первой строки считывает нормально, но при считывании второй выдает предупреждение  такого рода : Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index. 

И указыает на строку textBox2.text = paths[1];

Подскажите, как побороть данное предупрежедение?
Код

        public static string ReadWordDocument(string path)
        {
            Object filename = path;
            Object confirmConversions = Type.Missing;
            Object readOnly = Type.Missing;
            Object addToRecentFiles = Type.Missing;
            Object passwordDocument = Type.Missing;
            Object passwordTemplate = Type.Missing;
            Object revert = Type.Missing;
            Object writePasswordDocument = Type.Missing;
            Object writePasswordTemplate = Type.Missing;
            Object format = Type.Missing;
            Object encoding = Type.Missing;
            Object visible = Type.Missing;
            Object openConflictDocument = Type.Missing;
            Object openAndRepair = Type.Missing;
            Object documentDirection = Type.Missing;
            Object noEncodingDialog = Type.Missing;
            Word.Application Progr = new Microsoft.Office.Interop.Word.Application();
            Progr.Documents.Open(ref filename,
             ref confirmConversions,
            ref readOnly,
            ref addToRecentFiles,
            ref passwordDocument,
            ref passwordTemplate,
            ref revert,
            ref writePasswordDocument,
            ref writePasswordTemplate,
            ref format,
            ref encoding,
            ref visible,
            ref openConflictDocument,
            ref openAndRepair,
            ref documentDirection,
            ref noEncodingDialog);
            Word.Document Doc = new Microsoft.Office.Interop.Word.Document();
            Doc = Progr.Documents.Application.ActiveDocument;
            object start = 0;
            object stop = Doc.Characters.Count;
            Word.Range Rng = Doc.Range(ref start, ref stop);
            string Result = Rng.Text;
            object sch = Type.Missing;
            object aq = Type.Missing;
            object ab = Type.Missing;
            Progr.Quit(ref sch, ref aq, ref ab);
            return Result;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            string doc = ReadWordDocument(textBox9.Text);
            var paths = new List<string>();
            {
                var arr = doc.Split(':');
                paths.Add(arr[1]);
            }
            textBox1.Text = paths[0];
            textBox2.Text = paths[1];
        }


Добавлено через 47 секунд
Кстати, diadiavova, спасибо за ответ!

Автор: diadiavova 4.10.2012, 22:04
Цитата(Katran7 @  4.10.2012,  22:38 Найти цитируемый пост)
Подскажите, как побороть данное предупрежедение?

Ну так ты ведь добавляешь в список только одну строку, а здесь ты обращаешься к несуществующей второй, вот и получаешь исключение.

Автор: Katran7 6.10.2012, 15:54
Спасибо, понял ошибку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)