Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > MS Mord - заполнение полей формы - Help me!!!


Автор: LIND 25.1.2011, 10:21
Доброго времени суток!

Про это много написано, но... 
Вот не выходит и все тут (и по примерам и без) - может кто поможет разобраться в чем ошибка?
Билась с большим шаблоном - не выходит. Решила проверить на примитивном. Сделала простейший - шаблон: состоит из текста и в середине просто вставила поле формы (DOCVARIABLE ttt \* MERGEFORMAT) c именем ttt. Теперь хочу вставить в него хоть что-нибудь. Текст ниже. 
И на тебе ошибка: 'Запрашиваемый номер семейства не существует'. 

Перебирала варианты (кроме нижеуказанного в тексте): 
newWord.ActiveDocument.FormFields.item(1).Result:='1111111999999999';
newDoc.FormFields.item(1).Result:='1111111999999999';
newDoc.FormFields.item('ttt').Result:='1111111999999999';
НЕ ПОМОГАЕТ!

Помогите плз!!!

Код

function Tfrm_prih.open_word(schablon:string):boolean;
begin
  fileTemplate := GetCurrentDir + '\DOC\'+schablon;
  if FileExists(fileTemplate)=false then
    begin
     ShowMessageFmt('Ôàéë "%s" îòñóòñòâóåò èëè ïîâðåæäåí...', [schablon]);
     open_word:=false;
     exit;
    end;
  try
   newWord:=CreateOleObject('Word.Application');
  except
   raise Exception.Create('Îùèáêà çàïóñêà MS Word !');
   open_word:=false;
   exit;
  end;
  newDoc := newWord.Documents.Add(fileTemplate);
  open_word:=true;
end;

procedure Tfrm_prih.N3Click(Sender: TObject);
begin
 if open_word('t.dot')=true then
   begin
    try
     newWord.ActiveDocument.FormFields.Item('ttt').Result:='1111111999999999';
     newWord.Visible := True;
    finally
     newDoc:= Unassigned;
     newWord:= Unassigned;
    end;
   end;
end;

Автор: Ymnuk 25.1.2011, 11:52
Здраствуйте.
А если включить запись макросов, выполнить подстановку и после посмотреть что он написал? Не пробовали? Много раз спасало. Я так делал, когда надо было сделать слияние шаблона в ворде с таблицей данных экселя. Запись макросов очень часто спасало. После записи можно практически все переписать с VB в Delphi (благо методы там практически одинаковы)  smile 

Автор: uwannadie 4.2.2011, 11:24
писал в свое время прогу, которая по закладкам в шаблоне ворда вставляла текст и картинки.
собственно вот код:
Код

Uses ComObj, Clipbrd, WordXP, OleServer; //лишнее убрать, т.к.сейчас уже не помню что и куда совать

procedure InsertString(pBookmark, data: string);
var
  What, Which, Count, Name: OLEVariant;
begin
  What := -1;
  Which := unAssigned;
  Count := unAssigned;
  Name := pBookmark;
  MsWord.Selection.goto(What, Which, Count, Name);
  MsWord.Selection.TypeText(data);
end;

procedure InsertImage(pBookmark: string; aPicture: TFileName);
var
  What, Which, Count, Name: OLEVariant;
  pBitmap: TBitmap;
begin
  pBitmap := TBitmap.Create;
  pBitmap.LoadFromFile(aPicture);
  Clipboard.Assign(pBitmap);
  What := -1;
  Which := unAssigned;
  Count := unAssigned;
  Name := pBookmark;
  MsWord.Selection.goto(What, Which, Count, Name);
  MsWord.Selection.Paste;
end;

использование:
Код

begin
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := False;
      MsWord.Documents.Add(DOTPath, EmptyParam);
      InsertString('метка в документе', text_to_insert);
      InsertImage('метка в документе', path_to_picture);
      MsWord.Visible := True;
    except
      MessageBox(Handle, 'Ошибка при создании отчета','Ошибка',MB_ICONERROR);
      MsWord.Quit;
    end;
end;

прилагаю сам шаблон:

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)