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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 18:39   #1
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию Вопрос по слиянию полей Word и Excel.

Здравствуйте.
Имеем вордовский документ который использует поля слияния, которые в свою очередь беруться из екселевского документа. При нажатии на "слияние в новый документ", программа размножает "шаблон" столько раз, сколько строк содержит экселевская таблица. Можно ли как-нибудь сделать исполнение данной операции (скриптом или макросом), в результате которой всё не в один документ бы складывалось а создавался отдельно новый документ под каждый "шаблон", и затем либо каждый в новом окне бы открывался, либо же чтобы автоматически сохранялось сразу всё это количество созданных документов в одной папке?
Sanek_81 вне форума Ответить с цитированием
Старый 07.02.2011, 10:11   #2
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

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


------------ добавлено модератором ----------------
Можно сделать. Например, при помощи этой программы:

Цитата:
Программа для заполнения документов данными из таблицы 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 файл (с таблицей, содержащей строку заголовка)

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

--------------------------------
В каких случаях вам может пригодиться эта надстройка:
  • если у вас в таблице Excel хранится список контрагентов (с их реквизитами), и вы хотите нажатием одной кнопки формировать договоры, акты или коммерческие предложения для каждого из них
  • если в вашей таблице Excel хранятся паспортные данные сотрудников, и вам необходимо быстро сформировать по шаблону приказы или прочие документы в формате Word, заполнив созданные документы данными сотрудников
  • подготовить письма, уведомления, грамоты в формате PDF или Word, заполнив созданные файлы информацией с листа Excel
  • и т.д. и т.п. - надстройку можно применять для создания любых документов на основе данных из Excel
--------------------------------

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

Последний раз редактировалось EducatedFool; 20.04.2012 в 00:10.
Sanek_81 вне форума Ответить с цитированием
Старый 07.02.2011, 13:16   #3
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию мм

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

-каждый лист --независим
-сколько их(порядок)
-может стоило формировать сразу по-штучно
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 07.02.2011, 15:35   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

http://www.sql.ru/forum/actualthread...300911&hl=word
http://wordexpert.ru/page/slijanie-m...nyh-dokumentov
Почему бы вам не генерировать ваши документы как письма ?

Последний раз редактировалось Aent; 07.02.2011 в 15:59.
Aent вне форума Ответить с цитированием
Старый 07.02.2011, 15:41   #5
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Цитата:
-каждый лист --независим
-сколько их(порядок)
-может стоило формировать сразу по-штучно
В данном случае каждые 2 листа нужно. Количество их всё время разное зависит от того каким получиться документ после нажатие на "слияние в новый документ", что в свою очередь зависит от количества строк в экселевском файле.

Последний раз редактировалось Sanek_81; 07.02.2011 в 15:47.
Sanek_81 вне форума Ответить с цитированием
Старый 07.02.2011, 19:47   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

Цитата:
Сообщение от Sanek_81 Посмотреть сообщение
В данном случае каждые 2 листа нужно. Количество их всё время разное зависит от того каким получиться документ после нажатие на "слияние в новый документ", что в свою очередь зависит от количества строк в экселевском файле.
может тогда и формировать ворд-док в формате НТМ , если конечго у вас не очень сложное оформление ворд- дока

хотя на днях давала совет, как
-сформировать ворд-док с местами вставки типа [фамилия]
-преобразовать в НТМ
-в НТМ искать место вставки и заменять [фамилия] на Иванов И.П.
-там тоже требовалось много файлов на основе сложного шаблона

я же предпочитаю прямое формирование ворд-дока в формате НТМ с таблицами, полями и прочее
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 08.02.2011, 12:04   #7
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Да в принципе подобное решение вполне устраивает:
Код:
Sub each_sheet_into_new_document()
'помещает каждый лист в отдельный документ
Dim word_App As New Word.Application
Dim word_Doc As Word.Document
Dim word_Shape As Shape
Selection.HomeKey Unit:=wdStory

pages_count = ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
For i = 1 To pages_count
    Set word_Doc = word_App.Documents.Add
    With word_Doc
    If i = pages_count Then
        Selection.EndKey Unit:=wdStory, Extend:=wdExtend
    Else
        Selection.ExtendMode = True
        Selection.GoToNext wdGoToPage
        Selection.MoveLeft wdCharacter, 1, False
                
    End If
        text_for_input = Selection
        Selection.ExtendMode = False
        Selection.MoveRight wdCharacter, 2, False
        .StoryRanges(wdMainTextStory) = text_for_input
        word_App.Visible = True

        
        If i < 10 Then
            p = "0" & i
        Else
            p = i
        End If
        
        .SaveAs "C:\Лист-" & p & ".doc"
    End With
Next i

'этот кусок кода переносит shapes в новый документ
        For Each word_Shape In ActiveDocument.Shapes
            'MsgBox ActiveDocument.Shapes.Count
            word_Shape.Select
            p = Selection.Information(wdActiveEndPageNumber)
            If p < 10 Then
                p = "0" & Selection.Information(wdActiveEndPageNumber)
            End If
            Selection.Copy
            word_App.Documents("Лист-" & p & ".doc").Activate
            word_App.Selection.Paste
        Next word_Shape
        
        For Each doc In word_App.Documents
            doc.Save
        Next doc

Set word_App = Nothing
End Sub
Как переменной "P", которая берётся в роли заголовка файла призвоить значение которое содержится в одном из полей слияний, взятого из экселя, и заодно всё-таки сделать процесс в фоновом режиме, не открывая при этом кучу вордовых окон - возможно ли?

Последний раз редактировалось Sanek_81; 08.02.2011 в 17:26.
Sanek_81 вне форума Ответить с цитированием
Старый 09.02.2011, 10:00   #8
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Так, как сделать в фоновом режиме, доехал сам, за это отвечает строка word_App.Visible = True. Однако если отключить видимость, то по окончанию всей процедуры памяти остаётся висеть процесс WINWORD.EXE и блокирует созданные файлы. Не подскажете как завершить этот процесс? Также остался вопрос, как мне значение поля присвоить переменной?

Последний раз редактировалось Sanek_81; 09.02.2011 в 10:15.
Sanek_81 вне форума Ответить с цитированием
Старый 09.02.2011, 10:50   #9
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

Код:
word_app.quit
Set word_App = Nothing
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 09.02.2011, 11:18   #10
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Ага, спасибо, разобрался. Ещё бы допилить задачу с названием документа.
Логически я себе представляю так: открыть в фоновом режиме excel-документ, получить объект типа recordset наипростейшим sql- запросом из таблицы по одному полю (выбрать все значения), и в дальнейшем подставить эти значения в вышеуказанный цикл переменной "p". Подскажите мне основные команды как это всё сделать, так как очень не силён в этом всём программировании под офис.

Последний раз редактировалось Sanek_81; 09.02.2011 в 11:51.
Sanek_81 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выгрузка вычисляемых полей Table в Excel Nika03 БД в Delphi 2 20.05.2010 14:46
обновление полей Word Jaroslav Microsoft Office Excel 0 06.05.2010 19:06
Сумма полей при слиянии в Word zax Microsoft Office Word 2 11.12.2009 15:21
Вопрос о связях Excel и Word nuzhnoff Помощь студентам 6 11.06.2009 15:05