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


Автор: MFSham 24.4.2007, 14:41
Мне требуется средствами С# работать с word'ом. За основу брал эту ссылку http://wladm.narod.ru/C_Sharp/comword.html. 
Прочитал, изучил, но возник вопрос.

Требуется открыть документ word, в которм содержится таблица, состоящая из 4 столбцов и N строк. Надо считать эту таблицу в массив размера Nx4, т.е. чтобы каждой строке таблицы word соответствовала строка массива. 
Как осуществить считывание таблицы?

Автор: Wanderer2019 24.4.2007, 14:50
вот пример с просторов инета....
написан на VB, но сути не меняет... 

Код

Dim MSWord As New Word.Application
Dim WordTable As Word.Table
Dim Doc As Word.Document
Dim r As Word.Row
Dim c As Word.Cell
For Each WordTable In Doc.Tables
For Each r In WordTable.Rows
For Each c In r.Cells
Next
Next
Next


вот под C#
Код

Word.Application MSWord=new Word.Application(...);
Word.Document Doc=MSWord.Documents.Open(...);
foreach(Word.Table WordTable in Doc.Tables){
foreach(Word.Row r in WordTable.Rows){
foreach(Word.Cell c in r.Cells){
}
}
}

Автор: MFSham 24.4.2007, 21:52
Спасибо за ответ. Все считывает, но появился другой вопрос)

Если у меня поле содержит только текст, то все прокатывает классно. А вот если кроме текста имеются вставленные рисунки(размер небольшой). Как это все загнать в переменную, чтобы потом использовать? 
Насколько я понял, все переменные Word.Cell имеют тип System.__ComObject.

Автор: iddqd 25.4.2007, 09:49
is не поможет?

Автор: MFSham 26.4.2007, 23:01
Цитата(iddqd @  25.4.2007,  09:49 Найти цитируемый пост)
is не поможет?

а что мне собственно даст is?

Мне нужно просто скопировать поле из ворда, которое содержит помимо текста рисунки, а затем вывести это все на экран моей программы. Т.е тип данных конкретно не определишь.

Автор: mr.DUDA 27.4.2007, 08:12
Проблема в том что любой кусок документа может содержать произвольные объекты - это относится и к ячейкам таблиц. Вытянуть картинки и прочее можно примерно так: выделяется кусок документа (ячейка таблицы), затем из document.Selection берётся св-во Images.

Автор: MFSham 30.4.2007, 22:03
Цитата(mr.DUDA @  27.4.2007,  08:12 Найти цитируемый пост)
 Вытянуть картинки и прочее можно примерно так

Да мне не надо вытягивать картинки, мне надо их просто отобразить ячейку такблицы на своей форме. Эту ячейку абсолютно не надо разлагать на части как текст, картинки и т.д., просто отобразить не вдаваясь в подробности.

Может как-то можно представить ячейку таблицы как картинку? чтобы ее просто вставить...
Или может еще какой вариант?...

Вроде уже все что можно перепробовал, ничего не выходит  smile 

Автор: Red Wind 30.4.2007, 22:48
Любая часть word документа, представляет собой сложную структуру. Так что скорее всего, для вынесения нужной тебе части документа в свою прогу тебе придёться разбить эту часть на составляющие. То есть на текст картинки, и т.д.

Автор: Legolas 1.5.2007, 00:37
Скажите, как можно вывести Word-таблицу, допустим, в RichTextBox, то есть принажатии кнопки появлялась полноценная таблица с разделителями. Я просто не совсем понял.

Автор: MFSham 1.5.2007, 02:16
Цитата(Red Wind @  30.4.2007,  22:48 Найти цитируемый пост)
Любая часть word документа, представляет собой сложную структуру.

Это конечно понятно.

Цитата(Red Wind @  30.4.2007,  22:48 Найти цитируемый пост)
скорее всего, для вынесения нужной тебе части документа в свою прогу тебе придёться разбить эту часть на составляющие

А вот в этом я бы уже засомневался.

Может у кого есть другие предложения?

Автор: Red Wind 1.5.2007, 12:11
Цитата(MFSham @  1.5.2007,  02:16 Найти цитируемый пост)
А вот в этом я бы уже засомневался.

Обоснуйтеsmile.  smile 

Автор: MFSham 1.5.2007, 15:02
Цитата(Red Wind @  1.5.2007,  12:11 Найти цитируемый пост)
Обоснуйте.

Ну во первых я не нашел ничего, что бы подтверждало это.

А во вторых я нашел такие интересные методы как WordCell.Range.Copy() и WordCell.Range.CopyAsPicture()
Они копируют в буфер обмена содержимое ячейки. Пока я толком не разобрался как их заюзать, но это в процессеsmile Почему-то если ячейка содержит текст, то все копируется нормально, а как только появляется картинка - выскакивает исключение. 

Автор: MFSham 1.5.2007, 17:34
У меня что-то получилось! smile
Если использовать такой код: 
Код

Word.Application MSWord = new Word.Application();
            
            try
            {
                Word.Document Doc = MSWord.Documents.Open(...);                          

                foreach (Word.Table WordTable in Doc.Tables)
                {
                    foreach (Word.Row WordRow in WordTable.Rows)
                    {
                        ...
                        WordRow.Range.CopyAsPicture();
                        ...
                        foreach (Word.Cell WordCell in WordRow.Cells)
                        {                            
                             ...  
                        }
                    }
                }                
            }
            catch
            {
                ...
            }

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

Тогда следующий код: 
Код
Word.Application MSWord = new Word.Application();
            
            try
            {
                Word.Document Doc = MSWord.Documents.Open(...);                          

                foreach (Word.Table WordTable in Doc.Tables)
                {
                    foreach (Word.Row WordRow in WordTable.Rows)
                    {                        
                        foreach (Word.Cell WordCell in WordRow.Cells)
                        {                            
                             ...
                             WordCell.Range.CopyAsPicture();
                             ...  
                        }
                    }
                }                
            }
            catch
            {
                ...
            }

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

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