Философия

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Философия » Задачи по Excel » Привязка полей Word документа и данных Excel


Привязка полей Word документа и данных Excel

Сообщений 1 страница 11 из 11

1

Пусть есть ворд-документ со следующей строкой:
"Уважаемая Лора Ипполитовна!  Просим Вас предоставить следующие данные: Ученое звание,  должность, шифр специальности, ученая степень".  Пусть также есть excel--документ с таблицей имен, ученых званий, должностей, шифров, ученых степеней.  Пусть заполнено 5 строк.  Необходимо: по нажатию кнопки (или любому иному событию) сгенерировать 5 документов на основе вышеописанного ворд-документа. В каждый из 5 документов на места, выделенные мной здесь для визуализации жирным шрифтом (которые в ворд-документе должны быть оформлены в виде полей или, возможно, закладок) , должны быть вставлены данные из соответствующих столбцов еxcel-таблицы.

0

2

Решение. Общий смысл такой: есть шаблон Word (dot-файл), в нём имеются поля, которые необходимо заполнить. Есть Excel файл с кнопкой внутри, по нажатию на которую появляется диалог выбора файла, где нужно выбрать шаблон, затем создаётся Word-документ на основе выбранного шаблона и поля созданного документа заполняются данными из строки Excel.

Ниже приведен код нажатия кнопки на Excel листе.

Код:
Sub GenerateButton_Click()

    Dim OpnFileDlg As FileDialog    ' Диалог открытия файла. Для выбора шаблона
    Dim wdApp As Object             ' Приложение Word
    Dim wdDoc As Object             ' Документ Word
    
' Показываем диалог выбора файла для того, чтобы выбрать шаблон
Set OpnFileDlg = Application.FileDialog(msoFileDialogOpen)
With OpnFileDlg
    .ButtonName = "Выбрать"
    .AllowMultiSelect = False
    .Filters.Add "Файлы Microsoft Word ", "*.dot;*.dotx", 1
    .Title = "Выбор шаблона Word-документа для экспорта"
    .InitialView = msoFileDialogViewDetails
    .Show
End With

    ' Создаём приложение Word
    Set wdApp = CreateObject("Word.application")
    ' Приложение Word видимо
    wdApp.Visible = True

' Здесь логика выборки данных из Excel написана для таблицы с двумя колонками (A, B)
' Первая колонка - ФИО, вторая - ученая степень. Таблица имеет шапку, поэтому начинаем
' выборку со второй строки (counter + 1). Код выборки написан "в лоб" и довольно неграмотный:
' например, задано четкое число строк в цикле (10).
' Правильную выборку надо писать с конкретного примера.
For counter = 1 To 10
    ' Если не пустая ячейка с именем, то создаем документ на основе выбранного шаблона
    ' и заполняем поля документа
    If IsEmpty(Cells(counter + 1, 1).Value) = False Then
        Set wdDoc = wdApp.Documents.Add(OpnFileDlg.SelectedItems(1))
        wdDoc.FormFields(1).Result = Cells(counter + 1, 1)
        wdDoc.FormFields(2).Result = Cells(counter + 1, 2)
    End If
Next counter

End Sub

Сами файлы для демонстрации примера можно скачать тут:
http://depositfiles.com/files/m7o76540q

0

3

Максим,

отлично работает. Под конкретную выборку переделаю сам.
Пока остаются такие вопросы:

1. Подскажите по пунктам меню, как Вы делали закладки полей в ворде. У меня Вставка-Закладка не срабатывают. Возможно, упускаю некую галочку?
2. Необходимо, чтобы файлы не открывались, как в случае Вашего кода, а складывались в ту же папку, где и шаблон. Имена файлов должны соответствовать
именам преподавателей, н-р, ЛораИпполитовна.doc

0

4

Сергей написал(а):

1. Подскажите по пунктам меню, как Вы делали закладки полей в ворде. У меня Вставка-Закладка не срабатывают. Возможно, упускаю некую галочку?

Я использовал поля как элементы управления. В Word 2010 (и наверное справедливо для 2007-го) добавляются они след. образом:
Вкладка «Разработчик» -> Группа «Элементы управления» -> Выпадающий список «Инструменты из предыдущих версий» -> Кнопка «Поле (элемент управления формы)»

Вкладка "Разработчик" по-умолчанию скрыта. Включается она в Параметрах Word  (Файл - Параметры). В 2007-м доступ к Параметрам Word осуществляется через Application Menu (Круглая большая кнопка сверху слева).

0

5

Понял, Максим.

На всякий случай и для других задач: я никогда не использовал поля, наблюдал их лишь в чужих файлах - под полями там подразумевается зарезервированное место под дату, время и т.п.
Но теперь понял, что Вы имели в виду.

0

6

Сергей написал(а):

2. Необходимо, чтобы файлы не открывались, как в случае Вашего кода, а складывались в ту же папку, где и шаблон. Имена файлов должны соответствовать
именам преподавателей, н-р, ЛораИпполитовна.doc

Добавилось еще одно диалоговое окно для выбора места сохранения сгенерированных документов.

Код:
Sub GenerateButton_Click()

    Dim OpnFileDlg  As FileDialog    ' Диалог открытия файла. Для выбора шаблона
    Dim SaveFileDlg As FileDialog
    Dim wdApp As Object             ' Приложение Word
    Dim wdDoc As Object             ' Документ Word
    Dim TemplatePath, SavePath As String 'Путь к шаблону и путь сохранения документов
    
    ' Показываем диалог выбора файла для того, чтобы выбрать шаблон
    Set OpnFileDlg = Application.FileDialog(msoFileDialogOpen)
    With OpnFileDlg
        .ButtonName = "Выбрать"
        .AllowMultiSelect = False
        .Filters.Add "Файлы Microsoft Word ", "*.dot;*.dotx", 1
        .Title = "Выбор шаблона Word-документа для экспорта"
        .InitialView = msoFileDialogViewDetails
        .Show
    End With
    
    ' Выбранный шаблон
    TemplatePath = OpnFileDlg.SelectedItems(1)


    ' Создаём приложение Word
    Set wdApp = CreateObject("Word.application")

    ' Выбираем место сохранения сгенерированных документов
    Set SaveFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    SaveFileDlg.Show
    SavePath = SaveFileDlg.SelectedItems(1)
    
    

' Здесь логика выборки данных из Excel написана для таблицы с двумя колонками (A, B)
' Первая колонка - ФИО, вторая - ученая степень. Таблица имеет шапку, поэтому начинаем
' выборку со второй строки (counter + 1). Код выборки написан "в лоб" и довольно неграмотный:
' например, задано четкое число строк в цикле (10).
' Правильную выборку надо писать с конкретного примера.

For counter = 1 To 10
    ' Если не пустая ячейка с именем, то создаем документ на основе выбранного шаблона
    ' и заполняем поля документа
    If IsEmpty(Cells(counter + 1, 1).Value) = False Then
        Set wdDoc = wdApp.Documents.Add(TemplatePath)
        wdDoc.FormFields(1).Result = Cells(counter + 1, 1)
        wdDoc.FormFields(2).Result = Cells(counter + 1, 2)

        wdDoc.SaveAs2 (SaveFileDlg.SelectedItems(1) + "\" + Cells(counter + 1, 1) + ".doc")
        wdDoc.Close
        
        
    End If
Next counter

' Закрываем Word
wdApp.Quit (False)

End Sub

http://depositfiles.com/files/vugpd90aj

Отредактировано Ничипорчук Максим (2010-12-01 00:44:01)

0

7

Максим,

выдает ошибку в строке
        wdDoc.SaveAs2 (SaveFileDlg.SelectedItems(1) + "\" + Cells(counter + 1, 1) + ".doc")

Пишет  object doesn/t support this value or method

Тестировал в 2003 и 2007.  В 2003  в окне выбора папки не отображает выбранную папку в строке сохранения. В 2007 - отображает, но выдает указанную ошибку.

Может быть, не предлагать выбор пользователю, а складировать автоматически в ту же папку, где и шаблон?

0

8

Переделал, чтобы сохранялось автоматически в папку с шаблоном. И теперь должно работать в 2003-м. Попробуйте, пожалуйста.

Код:
Sub GenerateButton_Click()

    Dim OpnFileDlg  As FileDialog    ' Диалог открытия файла. Для выбора шаблона
    Dim SaveFileDlg As FileDialog
    Dim wdApp As Object             ' Приложение Word
    Dim wdDoc As Object             ' Документ Word
    Dim TemplatePath, SavePath As String 'Путь к шаблону и путь сохранения документов
    
    ' Показываем диалог выбора файла для того, чтобы выбрать шаблон
    Set OpnFileDlg = Application.FileDialog(msoFileDialogOpen)
    With OpnFileDlg
        .ButtonName = "Выбрать"
        .AllowMultiSelect = False
        .Filters.Add "Файлы Microsoft Word ", "*.dot;*.dotx", 1
        .Title = "Выбор шаблона Word-документа для экспорта"
        .InitialView = msoFileDialogViewDetails
        .Show
    End With

SavePath = OpnFileDlg.InitialFileName
    
    ' Выбранный шаблон
    TemplatePath = OpnFileDlg.SelectedItems(1)


    ' Создаём приложение Word
    Set wdApp = CreateObject("Word.application")
    
    

' Здесь логика выборки данных из Excel написана для таблицы с двумя колонками (A, B)
' Первая колонка - ФИО, вторая - ученая степень. Таблица имеет шапку, поэтому начинаем
' выборку со второй строки (counter + 1). Код выборки написан "в лоб" и довольно неграмотный:
' например, задано четкое число строк в цикле (10).
' Правильную выборку надо писать с конкретного примера.

For counter = 1 To 10
    ' Если не пустая ячейка с именем, то создаем документ на основе выбранного шаблона
    ' и заполняем поля документа
    If IsEmpty(Cells(counter + 1, 1).Value) = False Then
        Set wdDoc = wdApp.Documents.Add(TemplatePath)
        wdDoc.FormFields(1).Result = Cells(counter + 1, 1)
        wdDoc.FormFields(2).Result = Cells(counter + 1, 2)

        wdDoc.SaveAs (SavePath + "\" + Cells(counter + 1, 1) + ".doc")
        wdDoc.Close
        
        
    End If
Next counter

' Закрываем Word
wdApp.Quit (False)

End Sub

http://depositfiles.com/files/aj8wrf2iq

0

9

Максим, все работает в 2003 и в 2007, отлично!

Была странность в 2007 сначала выдала ошибку и сгенерировала только 3 файла, запнувшись на докторе философии. Это было горько - всем, даже макросу, мешает философия.

А так - задача решена, Максим,

большое спасибо.

0

10

Да уж, философия вещь непростая во всех своих проявлениях. Но я думаю макрос задумался над своим поведением и впредь подобных ошибок повторять не будет :)

Переходим к след. задаче.

Отредактировано Ничипорчук Максим (2010-12-02 00:08:00)

0

11

Добрый день,

У меня сделана привязка к таблице в Word из Excel. Как сохранить шрифт привязок? при сохранении шрифт изменяется(и увеличивается). Мне нужно поставить определенный и приизменений самих данных при сохранении.выходи из документа и при новом открытии, ранее сохраненных шрифт остался. Как это сделать, помогите, пожалуйста?

0


Вы здесь » Философия » Задачи по Excel » Привязка полей Word документа и данных Excel