procedure TWordEditForm.WriteBookmark(BookmarkName, Text: String);
Var olestr: OleVariant;
function SEmpty(s: String): String;
begin
if s='' then Result := ' ' else Result := s;
end;
begin
olestr := BookmarkName;
if WordObject.Application.ActiveDocument.Bookmarks.Exists(olestr) then
begin
WordObject.Application.ActiveDocument.Bookmarks.Item(olestr).Select;
WordObject.Application.Selection.TypeText(SEmpty(Text));
end;
end;
Как сделать с MS Word доккументами следующее ?
[COLOR=darkblue]Персональные Данные :[/COLOR]
[COLOR=darkred]Имя :[/COLOR][COLOR=red] <Name>[/COLOR]
[COLOR=darkred]Фамилия :[/COLOR][COLOR=red] <Surname>[/COLOR]
[COLOR=darkred]Персональный код :[/COLOR][COLOR=red] <PersonalID>[/COLOR]
Как сделать так, чтоб моя программа при открытии документа сама находила тэги <> и забивала вместо них одноимённые данные из списка ? Буду очень благодарен за помощь.
Цитата:
Originally posted by Red-Storm
Как сделать так, чтоб моя программа при открытии документа сама находила тэги <> и забивала вместо них одноимённые данные из списка?
Как сделать так, чтоб моя программа при открытии документа сама находила тэги <> и забивала вместо них одноимённые данные из списка?
В данном случае я использую закладки.
Вот код моей функции для замены текста на закладке своим.
Код:
Переделай как тебе нужно.
WordObject - взял из примера Delphi по OLE.
Код:
procerdure TForm1.Button1Click(Sender: TObject);
var
//Объявление переменных, для передачи их в
//eкачестве формальных параметров в сервер автоматизации
Shablon,FileName,oldStr,newStr,replace,ext:OleVariant;
begin
Table1.Active:=false;
Table1.Active:=true;
Shablon:=ExtractFilePath(Application.EXEName)+'shablon.DOC';
FileName:=ExtractFilePath(Application.EXEName)+'report.DOC';
//Открываем шаблон документа
WordApplication1.Documents.Open
(Shablon,EmptyParam, EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
//Связываем компоненту с существующим интерфейсом
WordDocument1.ConnectKind:=ckAttachToInterface;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
//Следующие переменные понадобятся нам
//для выполнения методов сервера
replace:=1; oldStr:='@1'; newStr:=DateTimeToStr(Now);
//Находим в документе метки и производим их замены
WordDocument1.Range.Find.Execute(oldStr,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,newStr,replace);
oldStr:='@2'; newStr:=WordApplication1.UserName;
WordDocument1.Range.Find.Execute(oldStr,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,newStr,replace);
//сохранение документа и отображение его в OLE контейнере
//(предварительный просмотр)
WordDocument1.SaveAs(FileName); WordDocument1.Close;
OleContainer1.CreateLinkToFile(FileName,false); OleContainer1.Refresh;
end;
var
//Объявление переменных, для передачи их в
//eкачестве формальных параметров в сервер автоматизации
Shablon,FileName,oldStr,newStr,replace,ext:OleVariant;
begin
Table1.Active:=false;
Table1.Active:=true;
Shablon:=ExtractFilePath(Application.EXEName)+'shablon.DOC';
FileName:=ExtractFilePath(Application.EXEName)+'report.DOC';
//Открываем шаблон документа
WordApplication1.Documents.Open
(Shablon,EmptyParam, EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
//Связываем компоненту с существующим интерфейсом
WordDocument1.ConnectKind:=ckAttachToInterface;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
//Следующие переменные понадобятся нам
//для выполнения методов сервера
replace:=1; oldStr:='@1'; newStr:=DateTimeToStr(Now);
//Находим в документе метки и производим их замены
WordDocument1.Range.Find.Execute(oldStr,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,newStr,replace);
oldStr:='@2'; newStr:=WordApplication1.UserName;
WordDocument1.Range.Find.Execute(oldStr,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,newStr,replace);
//сохранение документа и отображение его в OLE контейнере
//(предварительный просмотр)
WordDocument1.SaveAs(FileName); WordDocument1.Close;
OleContainer1.CreateLinkToFile(FileName,false); OleContainer1.Refresh;
end;
Люди помогите пожалуйсто, очень нужно, а-то трудно быть ДЕРЕВЯННЫМ :( !!!
Вид диалога такой :
'this->Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,
WritePasswrdTemplate, Format, Encoding, Visible,
(Word_2k::WordDocument**)&prop'):Type mismath.
@C:\program files\borland\cbuilder6\include\vcl\Word_2k.h/7261
если нажать на "N to continue" то выплывает есчо один диалог :
(this->get_ActiveDocument((Word_2k::WordDocument**)&prop)) Error: 800A1098
(-2146824040)@C:\program files\borland\cbuilder6\include\vcl\Word_2k.h/5165
Если честно, я вообще не понимаю что я не правильно делаю. посмотрите пожалуйсто в чём ошибка.
Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleVariant DocName;
OleVariant ConfConv;
OleVariant ReadOnly;
OleVariant AddToRecFiles;
OleVariant Psw;
OleVariant PswTmp;
OleVariant Revert;
OleVariant WritePsw;
OleVariant WritePswTmp;
OleVariant Fmt;
OleVariant replace;
OleVariant RepLabel;
OleVariant RepToText;
OleVariant FinalFile;
DocName = "c:\\Blank.doc";
ConfConv = True;
ReadOnly = False;
AddToRecFiles = False;
Psw = "";
PswTmp = "";
Revert = False;
WritePsw = False;
WritePswTmp = False;
Fmt = wdOpenFormatAuto;
replace = wdReplaceAll;
WordApplication1->Connect();
WordApplication1->Documents->Open(DocName, ConfConv, ReadOnly,
AddToRecFiles, Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt);
WordDocument1->ConnectKind = ckAttachToInterface;
WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
RepLabel = "TestLabel";
RepToText = Edit1->Text;
WordDocument1->Range(EmptyParam,EmptyParam)->Find->Execute(RepLabel,EmptyParam,EmptyParam,EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, RepToText,
replace);
FinalFile = "c:\\Output.doc";
WordDocument1->SaveAs(FinalFile);
WordDocument1->Close();
WordApplication1->Application->Visible = True;
OleContainer1->CreateLinkToFile(FinalFile, false);
OleContainer1->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleVariant DocName;
OleVariant ConfConv;
OleVariant ReadOnly;
OleVariant AddToRecFiles;
OleVariant Psw;
OleVariant PswTmp;
OleVariant Revert;
OleVariant WritePsw;
OleVariant WritePswTmp;
OleVariant Fmt;
OleVariant replace;
OleVariant RepLabel;
OleVariant RepToText;
OleVariant FinalFile;
DocName = "c:\\Blank.doc";
ConfConv = True;
ReadOnly = False;
AddToRecFiles = False;
Psw = "";
PswTmp = "";
Revert = False;
WritePsw = False;
WritePswTmp = False;
Fmt = wdOpenFormatAuto;
replace = wdReplaceAll;
WordApplication1->Connect();
WordApplication1->Documents->Open(DocName, ConfConv, ReadOnly,
AddToRecFiles, Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt);
WordDocument1->ConnectKind = ckAttachToInterface;
WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
RepLabel = "TestLabel";
RepToText = Edit1->Text;
WordDocument1->Range(EmptyParam,EmptyParam)->Find->Execute(RepLabel,EmptyParam,EmptyParam,EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, RepToText,
replace);
FinalFile = "c:\\Output.doc";
WordDocument1->SaveAs(FinalFile);
WordDocument1->Close();
WordApplication1->Application->Visible = True;
OleContainer1->CreateLinkToFile(FinalFile, false);
OleContainer1->Refresh();
}
//---------------------------------------------------------------------------
Может Это из за MS Office 2003 ? У меня он стоит. Хотя бред какой-то...