Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/создать реестр, вытянув данные из вордовского документа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » создать реестр, вытянув данные из вордовского документа (Макросы/Sub)
создать реестр, вытянув данные из вордовского документа
SergeyKorotun Дата: Понедельник, 16.06.2014, 11:47 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
В вордовском документе каждая страница представляет собой однотипный шаблон. Нужно в Excel создать реестр, чтобы одной странице вордовского документа соответствовала одна строка в Excel. Макрос можно создать или в word или в excel.
К сообщению приложен файл: data_for_reestr.doc (37.5 Kb) · reestr.xlsx (9.4 Kb)
 
Ответить
СообщениеВ вордовском документе каждая страница представляет собой однотипный шаблон. Нужно в Excel создать реестр, чтобы одной странице вордовского документа соответствовала одна строка в Excel. Макрос можно создать или в word или в excel.

Автор - SergeyKorotun
Дата добавления - 16.06.2014 в 11:47
KuklP Дата: Понедельник, 16.06.2014, 15:15 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Это приказ? Стесняюсь спросить - кому?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЭто приказ? Стесняюсь спросить - кому?

Автор - KuklP
Дата добавления - 16.06.2014 в 15:15
Rioran Дата: Понедельник, 16.06.2014, 15:25 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Сергей, здравствуйте.

Во вложении файл с макросом.

Код жёсткий, поэтому просьба строго соблюсти условия, иначе код может не сработать:

1). Все вордовские документы на момент запуска кода должны быть закрыты. Иначе их закроет принудительно без сохранения.
2). Вместо "C:\Data_1.docm" в двух местах надо вставить точный путь к вордовскому документу на Вашем ПК.
3). Там же точно укажите разрешение файла. Я за какой-то надобностью Ваш вордовский документ сохранил с поддержкой макросов, это .docm =) В самом вордовском файле ничего не менял.

Код перебирает все таблицы в документе и из ячеек с расположением как в примере вытягивает данные.

[vba]
Код
Sub Take_Data_From_Word()
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(1)

Dim objWrdApp As Object
Dim objWrdDoc As Object
Dim A As Long 'Счётчик

.Cells(1, 1).Value = "ФИО"
.Cells(1, 2).Value = "ИД"
.Cells(1, 3).Value = "Сумма"

On Error Resume Next

Set objWrdApp = GetObject(, "Word.Application")

If objWrdApp Is Nothing Then
     Set objWrdApp = CreateObject("Word.Application")
     Set objWrdDoc = objWrdApp.Documents.Open("C:\Data_1.docm")
     objWrdApp.Visible = False
End If

Set objWrdDoc = objWrdApp.Documents.Open("C:\Data_1.docm")

A = 1

Dim TableX As Object

For Each TableX In objWrdDoc.tables
     .Cells(A + 1, 1).Value = Left(objWrdDoc.tables(A).Rows(2).Cells(1).Range.Text, Len(objWrdDoc.tables(A).Rows(2).Cells(1).Range.Text) - 1)
     .Cells(A + 1, 2).Value = Left(objWrdDoc.tables(A).Rows(3).Cells(3).Range.Text, Len(objWrdDoc.tables(A).Rows(3).Cells(3).Range.Text) - 1)
     .Cells(A + 1, 3).Value = Left(objWrdDoc.tables(A).Rows(4).Cells(5).Range.Text, Len(objWrdDoc.tables(A).Rows(4).Cells(5).Range.Text) - 1)
     A = A + 1
Next TableX

.Columns("A:C").EntireColumn.AutoFit

objWrdDoc.Close False
objWrdApp.Quit

Set objWrdDoc = Nothing
Set objWrdApp = Nothing

End With
Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: Data_1.docm (20.2 Kb) · Data_Manager.xlsm (22.6 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеСергей, здравствуйте.

Во вложении файл с макросом.

Код жёсткий, поэтому просьба строго соблюсти условия, иначе код может не сработать:

1). Все вордовские документы на момент запуска кода должны быть закрыты. Иначе их закроет принудительно без сохранения.
2). Вместо "C:\Data_1.docm" в двух местах надо вставить точный путь к вордовскому документу на Вашем ПК.
3). Там же точно укажите разрешение файла. Я за какой-то надобностью Ваш вордовский документ сохранил с поддержкой макросов, это .docm =) В самом вордовском файле ничего не менял.

Код перебирает все таблицы в документе и из ячеек с расположением как в примере вытягивает данные.

[vba]
Код
Sub Take_Data_From_Word()
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(1)

Dim objWrdApp As Object
Dim objWrdDoc As Object
Dim A As Long 'Счётчик

.Cells(1, 1).Value = "ФИО"
.Cells(1, 2).Value = "ИД"
.Cells(1, 3).Value = "Сумма"

On Error Resume Next

Set objWrdApp = GetObject(, "Word.Application")

If objWrdApp Is Nothing Then
     Set objWrdApp = CreateObject("Word.Application")
     Set objWrdDoc = objWrdApp.Documents.Open("C:\Data_1.docm")
     objWrdApp.Visible = False
End If

Set objWrdDoc = objWrdApp.Documents.Open("C:\Data_1.docm")

A = 1

Dim TableX As Object

For Each TableX In objWrdDoc.tables
     .Cells(A + 1, 1).Value = Left(objWrdDoc.tables(A).Rows(2).Cells(1).Range.Text, Len(objWrdDoc.tables(A).Rows(2).Cells(1).Range.Text) - 1)
     .Cells(A + 1, 2).Value = Left(objWrdDoc.tables(A).Rows(3).Cells(3).Range.Text, Len(objWrdDoc.tables(A).Rows(3).Cells(3).Range.Text) - 1)
     .Cells(A + 1, 3).Value = Left(objWrdDoc.tables(A).Rows(4).Cells(5).Range.Text, Len(objWrdDoc.tables(A).Rows(4).Cells(5).Range.Text) - 1)
     A = A + 1
Next TableX

.Columns("A:C").EntireColumn.AutoFit

objWrdDoc.Close False
objWrdApp.Quit

Set objWrdDoc = Nothing
Set objWrdApp = Nothing

End With
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Rioran
Дата добавления - 16.06.2014 в 15:25
SergeyKorotun Дата: Вторник, 17.06.2014, 12:42 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
В примере вордовский документ был упрощенный, поэтому перенести данный макрос на реальный файл не выйдет.
Вы в макросе конкретно указываете координаты ячейки, а мне желательно немного другой алгоритм поиска ячейки со значением, например:
- ищем в таблице "FIO" и считываем значение из ячейки ниже
- то же самое для ID
- ищем "Summa" и считываем значение с ячейки справа
- ищем ... и считываем значение с ячейки, смещенной относительно данной на две ячейки влево/вправо и на три вниз/вверх
Искомые значения (FIO, ID, Summa, ...) могут располагаться в разных таблицах . Но количество таблиц на страницах постоянно.
 
Ответить
СообщениеВ примере вордовский документ был упрощенный, поэтому перенести данный макрос на реальный файл не выйдет.
Вы в макросе конкретно указываете координаты ячейки, а мне желательно немного другой алгоритм поиска ячейки со значением, например:
- ищем в таблице "FIO" и считываем значение из ячейки ниже
- то же самое для ID
- ищем "Summa" и считываем значение с ячейки справа
- ищем ... и считываем значение с ячейки, смещенной относительно данной на две ячейки влево/вправо и на три вниз/вверх
Искомые значения (FIO, ID, Summa, ...) могут располагаться в разных таблицах . Но количество таблиц на страницах постоянно.

Автор - SergeyKorotun
Дата добавления - 17.06.2014 в 12:42
Rioran Дата: Вторник, 17.06.2014, 12:53 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
SergeyKorotun, вопросы:

- количество столбцов и строк в таблицах одинаковое?
- сколько всего искомых значений? Нужен список с указанием в какую сторону на сколько ячеек отступать для вывода данных.
- оторвали ли руки тому, кто организовал систему с таким классным расположением данных? =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеSergeyKorotun, вопросы:

- количество столбцов и строк в таблицах одинаковое?
- сколько всего искомых значений? Нужен список с указанием в какую сторону на сколько ячеек отступать для вывода данных.
- оторвали ли руки тому, кто организовал систему с таким классным расположением данных? =)

Автор - Rioran
Дата добавления - 17.06.2014 в 12:53
SergeyKorotun Дата: Вторник, 17.06.2014, 13:46 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
- программа формирует платежные уведомление. Одно уведомление - один файл. Но во-первых файл занимает немного больше одной страницы, а во вторых мы в целях экономии печатаем два уведомления на одном листе, а в третьих программа не все заполняет, и приходится дозаполнять вручную. Поэтому все файлы собираю в один, форматирую чтобы уведомление помещалось на одну страницу и вставляю разрыв страницы. Так вот вроде как бы количество строк и столбцов постоянно, но при редактировании макросом приходилось изловчаться, чтобы правильно выделить искомое значение. То какое то верхнее значение искал, чтобы перескочить в от него в нужную ячейку, то снизу или справа заходил. Вобщем есть объединенные ячейки. Кроме того форма уведомления иногда корректируется.
-искомых значений будет больше, чем я приводил в примере. Мне бы примерчик как найти искомое значение и как переместится на x ячеек вверх/вниз и на y ячеек влево вправо. К тому же коллеги в любой момент могут попросить еще какие-то данные добавить в реестр.
- не поверите, но от творений этих программистов страдают тысячи человек.
 
Ответить
Сообщение- программа формирует платежные уведомление. Одно уведомление - один файл. Но во-первых файл занимает немного больше одной страницы, а во вторых мы в целях экономии печатаем два уведомления на одном листе, а в третьих программа не все заполняет, и приходится дозаполнять вручную. Поэтому все файлы собираю в один, форматирую чтобы уведомление помещалось на одну страницу и вставляю разрыв страницы. Так вот вроде как бы количество строк и столбцов постоянно, но при редактировании макросом приходилось изловчаться, чтобы правильно выделить искомое значение. То какое то верхнее значение искал, чтобы перескочить в от него в нужную ячейку, то снизу или справа заходил. Вобщем есть объединенные ячейки. Кроме того форма уведомления иногда корректируется.
-искомых значений будет больше, чем я приводил в примере. Мне бы примерчик как найти искомое значение и как переместится на x ячеек вверх/вниз и на y ячеек влево вправо. К тому же коллеги в любой момент могут попросить еще какие-то данные добавить в реестр.
- не поверите, но от творений этих программистов страдают тысячи человек.

Автор - SergeyKorotun
Дата добавления - 17.06.2014 в 13:46
Rioran Дата: Вторник, 17.06.2014, 14:13 | Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
SergeyKorotun, есть ли возможность выгружать данные в Excel? Это откроет больше возможностей для обработки.

Похоже, что работа объёмная. Здесь на форуме есть раздел "Работа и Фриланс" где светлые рыцари Excel готовы решить Ваши вопросы.

Если хотите пробовать сами - то Вам надо изучать .offset() метод VBA - он позволяет перенести на Х по вертикали и на Y по горизонтали ячейку. Также изучите циклы со счётчиками - они позволят перебирать таблицы по ячейкам и сравнивать значения. Например, нашли ячейку со значением "FIO" и говорим программе - нашёл, молодец, а теперь вытяни с помощью .offset() значение в таком-то направлении от неё.

По сути, это будет прикладыванием подорожника. По совести - надо настроить корректную выгрузку. И если есть IT-отдел - то это они тогда должны работать над макросами, если не смогли ничего сделать с изначальным источником. Такая выгрузка нарушает почти все известные правила организации Баз Данных.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Вторник, 17.06.2014, 14:14
 
Ответить
СообщениеSergeyKorotun, есть ли возможность выгружать данные в Excel? Это откроет больше возможностей для обработки.

Похоже, что работа объёмная. Здесь на форуме есть раздел "Работа и Фриланс" где светлые рыцари Excel готовы решить Ваши вопросы.

Если хотите пробовать сами - то Вам надо изучать .offset() метод VBA - он позволяет перенести на Х по вертикали и на Y по горизонтали ячейку. Также изучите циклы со счётчиками - они позволят перебирать таблицы по ячейкам и сравнивать значения. Например, нашли ячейку со значением "FIO" и говорим программе - нашёл, молодец, а теперь вытяни с помощью .offset() значение в таком-то направлении от неё.

По сути, это будет прикладыванием подорожника. По совести - надо настроить корректную выгрузку. И если есть IT-отдел - то это они тогда должны работать над макросами, если не смогли ничего сделать с изначальным источником. Такая выгрузка нарушает почти все известные правила организации Баз Данных.

Автор - Rioran
Дата добавления - 17.06.2014 в 14:13
SergeyKorotun Дата: Вторник, 17.06.2014, 15:33 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Спасибо. С основами программирования знаком, просто на vba мало опыта. Благодаря вам буду сам пытаться что то написать, так как вы показали как в excel подтянуть данные из ворда. Если будут какие то затруднения, буду обращаться, уверен что поможете.
 
Ответить
СообщениеСпасибо. С основами программирования знаком, просто на vba мало опыта. Благодаря вам буду сам пытаться что то написать, так как вы показали как в excel подтянуть данные из ворда. Если будут какие то затруднения, буду обращаться, уверен что поможете.

Автор - SergeyKorotun
Дата добавления - 17.06.2014 в 15:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » создать реестр, вытянув данные из вордовского документа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!