07.09.2006, 14:10 | #1 |
Участник
|
Я знаю как обращаться к этим полям с помощью Automation через индексы (метод Range) и по именам (метод Selection). Проблема возникает в следующем, как обратится к ним по имени, если в документе присутствуют не только FormField, но и обычный текст - шаблон? Как переходить по секциям в в документе?
Хотелось бы увидеть код в Наве, т.к. код VB в MSDN и справке Word я видел! |
|
08.09.2006, 22:55 | #2 |
Заноза в заднице
|
Дружище, выложите код VB,- спробуем проаналогизировать...
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
13.09.2006, 10:43 | #3 |
Участник
|
Вот! Это справка по FormFields из Ворда!
Use FormFields(index), where index is a bookmark name or index number, to return a single FormField object. The following example sets the result of the Text1 form field to "Don Funk." ActiveDocument.FormFields("Text1").Result = "Don Funk" The index number represents the position of the form field in the selection, range, or document. The following example displays the name of the first form field in the selection. If Selection.FormFields.Count >= 1 Then MsgBox Selection.FormFields(1).Name End If Use the Add method with the FormFields object to add a form field. The following example adds a check box at the beginning of the active document and then selects the check box. Set ffield = ActiveDocument.FormFields.Add( _ Range:=ActiveDocument.Range(Start:=0, End:=0), _ Type:=wdFieldFormCheckBox) ffield.CheckBox.Value = True Remarks Use the CheckBox, DropDown, and TextInput properties with the FormField object to return the CheckDown, DropDown, and TextInput objects. The following example selects the check box named "Check1." ActiveDocument.FormFields("Check1").CheckBox.Value = True А вот что у меня получилось: // Создание ОБъекта IF ISCLEAR(WordApp) THEN CREATE(WordApp); // Путь к шаблону ( Здесь под шаблоном понимается, не шаблон Ворда, который используется в Мerge, а шаблон как обычный файл док для заполнения) FileName:='C:\TEst.doc'; // ОТкурытие файла шаблона WrdDoc := WordApp.Documents.Open2000(FileName); WrdDoc.Activate; //WrdDoc.FormFields.count; // ОБъявление переменной для задания значения WordFieldsLoc:=WrdDoc.Fields; FOR j:=1 TO WrdDoc.FormFields.Count DO BEGIN //объявление переменной для получения имени WordApp.ActiveDocument.Fields.Item(j).Select; WordApp.Selection ; FieldName:=WrdSelect.FormFields.Item(j).Name; // далее следует заполение полей по их именам end; Этот пример работает, если в документе одни FormFields. Как только появляется другой текст, то этот алгоритм не может , как я понял, правильно идти по Selection, т.к. ему нужно указывать начало и конец параграфа и идти по объектам этого Selection. Если что-то не понятно, могу обсказать. |
|
13.09.2006, 12:54 | #4 |
Участник
|
А чего не работает? У меня нормально отрабатывает и подставляет все значения по всему документу в нужных местах.
Набросал такой пример: Код: IF ISCLEAR(wrdApp) THEN CREATE(wrdApp); FileName := 'c:\test.doc'; wrdDoc := wrdApp.Documents.Open2000(FileName); FOR i := 1 TO wrdDoc.FormFields.Count DO CASE wrdDoc.FormFields.Item(i).Name OF 'НомерДоговора': wrdDoc.FormFields.Item(i).Result := '52748596-КС'; 'ДатаЗаключения': wrdDoc.FormFields.Item(i).Result := '01-05-2006'; END; wrdDoc.Saved := TRUE; wrdApp.Visible := TRUE; CLEAR(wrdDoc); CLEAR(wrdApp); |
|
13.09.2006, 13:03 | #5 |
Заноза в заднице
|
Вот этот кусок меня сильно смущает. Подозреваю, что в данном случае Selection был лишним. И вообще код какой-то слишком сложный. FormFields - простая и удобная штука. Оцените хотя бы предыдущий пост коллеги E-Statik'а. Которому респект адназначна!
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
13.09.2006, 15:22 | #6 |
Участник
|
Спасибо, посмотрю!
эээээээээээээээээээ |
|
13.09.2006, 16:05 | #7 |
Участник
|
Большое, спасибо всем!
Сработало! Я в своих поисках залез конечно в такие дебри, что ппц! |
|