powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить данные из таблицы в Word'е
25 сообщений из 28, страница 1 из 2
Получить данные из таблицы в Word'е
    #36622936
Добрый день, уважаемые коллеги. Есть следующая задача :
В Word файле есть таблица, в которую извне заливается некая служебная информация. Нужно макросом пробежаться по этой табличке и, используя эту инфу сделать что-то другое (конкретно - переложить эту информацию в XML-файл).
После работы таблицу нужно скрыть, уничтожать нельзя.

Скрывать пока решил так : - Шрифт - скрытый
Если кто-нибудь может предложить более удобное решение - буду признателен. Основное требование - доступность данных из этой таблицы из макроса и её невидимость при редактировании файла пользователем и печати.

По части считывания информации ничего не ясно.
Знаю такой вариант :
Код: plaintext
Tables(номер).Cell(R,C).Range.Text
Но не понятно, как определить индекс таблицы.
Подскажите пожалуйста как из всех таблиц документа выбрать одну конкретную (получить её индекс). Править документ в части оформления и расположения этой конкретной таблицы можно практически как угодно.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36622972
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель Word'аПодскажите пожалуйста как из всех таблиц документа выбрать одну конкретную

Вы сами не чувствуете маразмнекоторую недосказанность в вашем вопросе

Сначала вы нам скажите, чем эта таблица отличается от других. Способов найти нужную таблицу много.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36622985
Shocker.Pro,

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

Лучше Вы скажите, как бы так выделить эту таблицу, чтобы однозначно её найти и какой способ поиска этой таблицы использовать.
Если ничего лучше, чем перебор всех таблиц документа с проверкой имени первого столбца нет, то тему можно закрывать, я так и сделаю. Но уж очень неохота применять такие решения.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623003
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
word-файл - это не база данных, никаких специфичных идентификаторов объектов внутри документа для его текстовых таблиц не предусмотрено
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623006
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же не знаю вашей квалификации. А так как вы не зарегистрированы, не могу посмотреть список ваших тем.

Любитель Word'аЛучше Вы скажите, как бы так выделить эту таблицу, чтобы однозначно её найти

Что значит "лучше выделить"? Это должен сделать пользователь? Или у вас некий код формирует это документ?


Любитель Word'аи какой способ поиска этой таблицы использовать.
Если ничего лучше, чем перебор всех таблиц документа с проверкой имени первого столбца нет

Зачем? Например есть поиск.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623011
Konst_One,
Хорошо. А способ поиска таблицы, лучше чем тот, что я предложил тут есть?
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623018
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneword-файл - это не база данных, никаких специфичных идентификаторов объектов внутри документа для его текстовых таблиц не предусмотрено

Предусмотрено свойство ID, туда можно вписать чё угодно.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623019
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель Word'аKonst_One,
Хорошо. А способ поиска таблицы, лучше чем тот, что я предложил тут есть?

по известным вам заголовкам вполне нормально. есть ещё такое понятие как "слияние данных" в ворде. посмотрите в документации, может вам это подойдёт больше.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623031
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЧто значит "лучше выделить"? Это должен сделать пользователь? Или у вас некий код формирует это документ?

Если таблицу можно курочить, как вы упоминали, достаточно вписать в любое ее место некий UID, а макрос найдет его методом .Find
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623063
Shocker.Pro,
В VBA моя квалификация между 1 и 2 по 5-ти балльной шкале :)
Не сталкивался с ним более-менее серьёзно :)
Как выделить.

Есть doc-файл (назовем его шаблон). Внешняя программа готовит отчет, после чего открывает этот шаблон и заполняет его данными.
Теперь, при формировании документа по шаблону мне нужно готовить xml, информация внутри которого должна браться из этого заполненного шаблона. При подготовке xml ничем, кроме данных из заполненного doc-файла пользоваться нельзя. Часть информации является служебной, читателям и распечатывателям этого word- документа она ни к чему, она нужна только в xml.

Эту информацию я хочу вынести в доп табличку, использовать её при формировании xml и скрыть. Как планирую скрывать описал в первом посте. Какую табличку создать мне все равно.
Табличку создам я, в файле-шаблоне. При этом я могу пометить её как захочу, лишь бы потом, в макросе, однозначно и быстро её (таблицу) найти. Информацию в эту табличку положит приложение.

Shocker.ProЗачем? Например есть поиск.
Если Вы про Find, то подскажите. что именно мне лучше искать? Если мне надо будет обращаться к ячейкам таблицы по
Код: plaintext
Tables(номер).Cell(R,C).Range.Text
, то как, сделав таблицу текущей, я могу узнать её [номер]
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623075
Shocker.ProЕсли таблицу можно курочить, как вы упоминали, достаточно вписать в любое ее место некий UID, а макрос найдет его методом .FindСпасибо. Тогда имя первого заголовка будет таким : 6B3340FE-1965-4A8F-9430-66AF91333F84

Я этот текст нашел. Но теперь мне надо обращаться к ячейкам таблицы, содержащеё найденный текст.
Как мне определить индекс текущей таблицы?
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623080
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель Word'аЕсли Вы про Find, то подскажите. что именно мне лучше искать? Если мне надо будет обращаться к ячейкам таблицы по
Код: plaintext
Tables(номер).Cell(R,C).Range.Text
, то как, сделав таблицу текущей, я могу узнать её [номер]

Не нужен вам ее номер.
Код: plaintext
.Find(....).Tables( 1 )
это ссылка на нужную вам таблицу.
Можете присвоить ее переменной и перебирать потом в ней ячейки (строки, столбцы) с помощью For... Each
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623093
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.vbforums.com/archive/index.php/t-402098.html
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623105
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще вот тут полное собрание сочинений на тему программирования в ворде для таблиц
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623160
Shocker.Pro
Не нужен вам ее номер.
Код: plaintext
.Find(....).Tables( 1 )
это ссылка на нужную вам таблицу.
Можете присвоить ее переменной и перебирать потом в ней ячейки (строки, столбцы) с помощью For... Each
Shocker.Pro,
будьте добры, раскройте пример пожалуйста. Не пойму куда .Tables(1) добавлять.
Код: plaintext
1.
2.
3.
    Set WdRange = ActiveDocument.Content
    Set WdTable = WdRange.Find(.Text = "6B3340FE-1965-4A8F-9430-66AF91333F84").Tables( 1 )
    
    MsgBox (WdTable.Cell( 1 ,  1 ).Range.Text)
Это я правильно сделал? Получаю Invalid or unqualified reference.
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623163
Konst_Oneа вообще вот тут полное собрание сочинений на тему программирования в ворде для таблицKonst_One,
Спасибо!
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623169
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель Word'аЭто я правильно сделал? Получаю Invalid or unqualified reference.

Код: plaintext
MsgBox (WdTable.Cells( 1 ).Range.Text)
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623178
Shocker.ProЛюбитель Word'аЭто я правильно сделал? Получаю Invalid or unqualified reference.

Код: plaintext
MsgBox (WdTable.Cells( 1 ).Range.Text)

Слетает на этой строке
Код: plaintext
1.
    Set WdTable = WdRange.Find(.Text = "6B3340FE-1965-4A8F-9430-66AF91333F84").Tables( 1 )
В чем я тут ошибся?
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623179
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель Word'аВ чем я тут ошибся?

А где вы взяли такой синтаксис поиска?
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623189
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, наверное, вас сам немножко спутал

Код: plaintext
.Find.Execute.Tables( 1 )
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623191
Shocker.ProА где вы взяли такой синтаксис поиска?
Ой, лучше не спрашивайте!

А какой должен быть синтаксис, чтобы в конце дописать .Tables(1) и получить ссылку на нужную таблицу?
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623205
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сам немножно спутал с экселем

Код: plaintext
1.
2.
Set WdRange = ActiveDocument.Content
WdRange.Find.Text = "6B3340FE-1965-4A8F-9430-66AF91333F84"
Set WdTable = WdRange.Find.Execute.Tables( 1 )

но ща сам еще проверю... засомневался
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623218
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623222
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так
проверил

Sub Макрос1()

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim wdTable As Table, WdRange As Range
Set WdRange = ActiveDocument.Content
WdRange.Find.ClearFormatting
WdRange.Find.Text = "456456"
WdRange.Find.Execute
Set wdTable = WdRange.Tables( 1 )
MsgBox wdTable.Cell( 1 ,  1 )

End Sub
...
Рейтинг: 0 / 0
Получить данные из таблицы в Word'е
    #36623235
Konst_One и, особенно, Shocker.Pro!

Большое Вам спасибо!
Что мне было надо, то получилось!
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить данные из таблицы в Word'е
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]