Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# and MS Word, считывание таблицы 
:(
    Опции темы
MFSham
Дата 24.4.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Мне требуется средствами С# работать с word'ом. За основу брал эту ссылку wladm.narod.ru
Прочитал, изучил, но возник вопрос.

Требуется открыть документ word, в которм содержится таблица, состоящая из 4 столбцов и N строк. Надо считать эту таблицу в массив размера Nx4, т.е. чтобы каждой строке таблицы word соответствовала строка массива. 
Как осуществить считывание таблицы?
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Wanderer2019
Дата 24.4.2007, 14:50 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



вот пример с просторов инета....
написан на 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){
}
}
}


Это сообщение отредактировал(а) Wanderer2019 - 24.4.2007, 15:01
PM ICQ MSN   Вверх
MFSham
  Дата 24.4.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



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

Если у меня поле содержит только текст, то все прокатывает классно. А вот если кроме текста имеются вставленные рисунки(размер небольшой). Как это все загнать в переменную, чтобы потом использовать? 
Насколько я понял, все переменные Word.Cell имеют тип System.__ComObject.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
iddqd
Дата 25.4.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 2
Всего: 2



is не поможет?


--------------------
PM MAIL   Вверх
MFSham
Дата 26.4.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



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

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

Мне нужно просто скопировать поле из ворда, которое содержит помимо текста рисунки, а затем вывести это все на экран моей программы. Т.е тип данных конкретно не определишь.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
mr.DUDA
Дата 27.4.2007, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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



--------------------
user posted image
PM MAIL WWW   Вверх
MFSham
Дата 30.4.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



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

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

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

Вроде уже все что можно перепробовал, ничего не выходит  smile 
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Red Wind
Дата 30.4.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



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

Это сообщение отредактировал(а) Red Wind - 30.4.2007, 22:49
PM MAIL ICQ   Вверх
Legolas
Дата 1.5.2007, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 14.2.2007

Репутация: 2
Всего: 5



Скажите, как можно вывести Word-таблицу, допустим, в RichTextBox, то есть принажатии кнопки появлялась полноценная таблица с разделителями. Я просто не совсем понял.
PM MAIL   Вверх
MFSham
Дата 1.5.2007, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



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

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

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

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

Может у кого есть другие предложения?
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Red Wind
Дата 1.5.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



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

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

PM MAIL ICQ   Вверх
MFSham
Дата 1.5.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



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

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

А во вторых я нашел такие интересные методы как WordCell.Range.Copy() и WordCell.Range.CopyAsPicture()
Они копируют в буфер обмена содержимое ячейки. Пока я толком не разобрался как их заюзать, но это в процессеsmile Почему-то если ячейка содержит текст, то все копируется нормально, а как только появляется картинка - выскакивает исключение. 
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
MFSham
Дата 1.5.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



У меня что-то получилось! 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
            {
                ...
            }

выдает ошибку, как только встречает ячейку с изображением, а на остальных работает норм. Пока не могу понять почему. 
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1270 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.