Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2009, 23:13   #1
YSL
 
Регистрация: 26.01.2009
Сообщений: 4
По умолчанию Автоматический перенос данных с таблиц Excel в текст Word

Есть задача организовать автоматический перенос данных с таблиц Excel в текст Word, как и в какой версии это лутше сделать.
YSL вне форума Ответить с цитированием
Старый 27.01.2009, 01:45   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Как — смотрите вопрос (внизу этой страницы) от "неправильно понятой" девушки по имени Aleksandra.

В какой версии лучше — да по большому счёту всё равно.

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

А пока «пристрелочный» вариант. Все таблицы открытого документа он преобразует в табулированный (разбитый символами табуляции) текст.

Код:
Sub ConvertTablesToText()
Dim TablesAmount As Long

    With ActiveDocument.Tables      'с таблицами в активном документе Word'
        If .Count = 0 Then
            MsgBox "В документе " & ActiveDocument & " нет таблиц Excel и Word."
        Else
            TablesAmount = .Count 'запомнили, сколько таблиц было в документе до преобразования их в текст'
            
            Do
            .Item(1).ConvertToText vbTab 'преобразует первую таблицу (из имеющихся) в текст,'
                                                         'разделяя бывшие колонки символами табуляции'
            TablesAmount = TablesAmount - 1
            Loop Until TablesAmount = 0 'выходим; теперь все таблицы преобразованы в текст'
            
        End If
    End With
    
End Sub

Последний раз редактировалось Sasha_Smirnov; 27.01.2009 в 04:12. Причина: вопрос — а вообще как часто Вы сталкиваетесь с этой задачей? или это так, для общего развития?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 27.01.2009, 04:30   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
автоматический перенос данных с таблиц Excel в текст Word
Сложного ничего нет. Прикрепите файл с таблицей Excel - тогда и макрос напишем...
Можно прикрепить и пример того, что должно получиться после вставки в Word.

Если известно, какой диапазон ячеек является таблицей (например, [a2:g35]), то макрос для переноса займёт 3 строки...

Кстати, тема неоднократно обсуждалась на форуме...

Цитата:
в какой версии это лутше сделать
В любой. По крайней мере, в Office XP, 2003, 2007 это будет работать.

--------------------- добавлено позже - вдруг кому окажется полезным ------------------------
Цитата:
Сделал программу для заполнения документов данными из таблицы Excel (из Excel в Word)

--------------------
Надстройка предназначена для формирования (подготовки) документов по шаблонам, с заполнением созданных файлов данными из текущей книги Excel.

В качестве шаблонов могут выступать следующие типы файлов:
  • документы Word (расширения DOC, DOCX, DOCM)
  • шаблоны Word (расширения DOT, DOTX, DOTM)
  • книги Excel (расширения XLS, XLSX, XLSM, XLSB)
  • шаблоны Excel (расширения XLT, XLTX, XLTM)
  • текстовые документы (расширения TXT, DAT, XML и т.д.)

В качестве исходных данных для заполнения, используется открытый в Excel файл (с таблицей, содержащей строку заголовка)

Количество шаблонов документов не ограничено


ПРОГРАММА ПОДДЕРЖИВАЕТ ФОРМИРОВАНИЕ ДОКУМЕНТОВ В ФОРМАТЕ PDF
(создаётся файл DOC, и преобразуется в PDF средствами Word 2007 - 2010)
--------------------------------
В каких случаях вам может пригодиться эта надстройка:
  • если у вас в таблице Excel хранится список контрагентов (с их реквизитами), и вы хотите нажатием одной кнопки формировать договоры, акты или коммерческие предложения для каждого из них
  • если в вашей таблице Excel хранятся паспортные данные сотрудников, и вам необходимо быстро сформировать по шаблону приказы или прочие документы в формате Word, заполнив созданные документы данными сотрудников
  • подготовить письма, уведомления, грамоты в формате PDF или Word, заполнив созданные файлы информацией с листа Excel
  • и т.д. и т.п. - надстройку можно применять для создания любых документов на основе данных из Excel
--------------------------------

Скачать надстройку можно здесь:
http://excelvba.ru/programmes/FillDocuments

Последний раз редактировалось EducatedFool; 28.03.2012 в 11:14.
EducatedFool вне форума Ответить с цитированием
Старый 27.01.2009, 05:02   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Да это работало ещё в Windows 95 и 98.
И вообще офисные программы (Excel и Word) хорошо стыкуются.

Последний раз редактировалось Sasha_Smirnov; 28.01.2009 в 02:05.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 29.01.2009, 22:07   #5
YSL
 
Регистрация: 26.01.2009
Сообщений: 4
По умолчанию

Есть документ excel в нем 9 столбиков, и 300 строк, №,фамилия, имя, отчество,серия паспорта, номер паспорта, кем выдан паспорт, дата выдачи паспорта,и идентификационный номер.
И есть документ word, с договором, нужно чтобы как то нажатием пару клавиш, переносить строчки из excel в определенные строчки в договоре.
Если можно по подробней, что нажать, куда вставить, я новичок в этом.
Спасибо.
YSL вне форума Ответить с цитированием
Старый 29.01.2009, 22:28   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Пролистайте эту страницу вниз - увидите список похожих тем.
В них Вы, скорее всего, найдёте ответ на свой вопрос.

Поиском по форуму сможете найти ещё множество подобных тем, где уже не раз обсуждался этот вопрос.
EducatedFool вне форума Ответить с цитированием
Старый 30.01.2009, 06:21   #7
YSL
 
Регистрация: 26.01.2009
Сообщений: 4
По умолчанию

Да спасибо, есть похожая тема
http://programmersforum.ru/showthread.php?t=28058
но есть проблема, вот макрос который я переделал для себя.

Sub CreateDocs()
Dim WA As New Word.Application
Dim WD As Word.Document, ra As Word.Range
Set WD = WA.Documents.Add(ThisWorkbook.Path & Application.PathSeparator & "шаблон.dot")
With WA.Selection
.HomeKey Unit:=wdStory: .EndKey Unit:=wdStory, Extend:=wdExtend
.Copy
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
.Paste
.EndKey Unit:=wdStory: .HomeKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{призвище}", False, , , , , , , , Cells(i, 1), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{імя}", False, , , , , , , , Cells(i, 2), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{побатькові}", False, , , , , , , , Cells(i, 3), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{серія}", False, , , , , , , , Cells(i, 4), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{номер}", False, , , , , , , , Cells(i, 5), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{кім виданий}", False, , , , , , , , Cells(i, 6), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{дата}", False, , , , , , , , Cells(i, 7), True
.EndKey Unit:=wdStory, Extend:=wdExtend
.Find.Execute "{ідентифікаційний}", False, , , , , , , , Cells(i, 8), True
.EndKey Unit:=wdStory
Next i
End With
WD.SaveAs ThisWorkbook.Path & Application.PathSeparator & "договора.doc"
WD.Close False: WA.Quit False
End Sub

Проблема в том что данные в шаблоне word повторяются два раза, и фамилия,имя,отчество три раза, в верху и внизу документа. Этот код вставляет все по очереди,получается в верху договора одна фамилия а внизу другая, по списку следующая в таблице excel? а нужно чтобы каждая строка из excel повторялась два раза.
И еще, как сделать чтобы все сохранялось в отдельных файлах, (название файла, например по фамилии) а не все в одном.
Спасибо.

Последний раз редактировалось YSL; 30.01.2009 в 06:47.
YSL вне форума Ответить с цитированием
Старый 30.01.2009, 06:46   #8
YSL
 
Регистрация: 26.01.2009
Сообщений: 4
По умолчанию

Вот файлы помогите кто может, очень нужно.
Вложения
Тип файла: zip mail.zip (26.5 Кб, 290 просмотров)
YSL вне форума Ответить с цитированием
Старый 31.01.2009, 09:56   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Извлеките файлы из вложения в одну папку (например, на Рабочий стол), откройте файл договор.xls, и нажмите на желтую кнопочку.

Проверено в Office 2003.

Если у Вас установлен Office 2007, придётся в проекте VBA поменять ссылку на библиотеку Word (c 11-й на 12-ю версию)
Вложения
Тип файла: rar Формирование договоров.rar (35.3 Кб, 1055 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 02.02.2009, 00:48   #10
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию А так?

Можно, не программируя, поставить на место всех заключённых в фигурные скобки «полей» реальные поля LINK, которые ссылаются на нужные Вам ячейки таблицы с работниками.

Я несколько часов «морочил» справку, но пока не рискую предъявить готовый договор. В приложенном примере поля работают (у меня) адекватно, и если (очень аккуратно!) их расставить по местам, то при открытии договора — сами будут заполняться, когды Вы (всего лишь) введёте номер строки работника из Вашей таблицы, поместив предварительно её (таблицу spisok.xls) в папку Мои документы*.

И, разумеется, полный путь к файлу spisok.xls у Вас будет другим, без каталога Sasha! Краткий путь (одно имя файла) работает только в папке по умолчанию (Мои документы), и лучше указать полный: в кавычках и через двойные левые слэши (\\). Всё это есть в справке (по F1).

В приложенном dogovor.doc Вы видите поле ASK и 7 полей LINK (по одному на колонку таблицы). Переключение к виду значений этих полей (и обратно): альт-F9. Обновляются эти линки сразу после нажатия OK при заполнении поля ASK.

ВАЖНО: там, в полях LINK, есть ещё поля REF, содержащие закладку работник, равную (сразу после ответа на ASK) номеру строки в таблице spisok.xls, и вот эти REF автоматически заменяются на номер строки — и всё, пропадают. Поэтому заполненный договор надо сохранять под другим именем, а проще — хранить незаполненную копию отдельно, на будущее.

__________________________
* или в какую Вам угодно, но быстрее — в ту, что по умолчанию
Вложения
Тип файла: doc dogovor.doc (30.0 Кб, 561 просмотров)
Тип файла: rar spisok.rar (12.2 Кб, 537 просмотров)

Последний раз редактировалось Sasha_Smirnov; 02.02.2009 в 01:07.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных из Excel в Word Volch Microsoft Office Excel 6 19.10.2008 20:36
Автоматический перенос данных из общего листа в другие InvoiceControl Microsoft Office Excel 3 02.10.2008 13:21
Перенос текста из Excel в Word Aleksandra Microsoft Office Word 3 23.09.2008 08:46
Перенос данных из MS Word в MS Excel ? Nickd5 Помощь студентам 2 28.06.2008 20:40
Интеграция таблиц excel в документ word SergeyPaterson Microsoft Office Excel 1 29.05.2008 23:39