<ort>Witam.
Potrzebuje podmienić 4 wyrazy w pliku Worda 2007 .doc , i potem zapisać tą zmianę do tego samego lub innego pliku ,a następnie go wydrukować.Probowałem robić to za pomocą tego kodu:
uses
ComObj;
...
var
Word: Variant;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Word:=CreateOLEObject('Word.Application');
Word.Visible:=True;
Word.Documents.Open(GetCurrentDir+'\Test.doc');
Word.WordBasic.Insert('Greatis ');
Word.Documents.Save;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Word.Documents.Close;
end;
Próbowałem też za pomocą innego kodu z torry.net :
uses
ComObj;
// Replace Flags
type
TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);
function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var
WordApp: OLEVariant;
begin
Result := False;
{ Check if file exists }
if not FileExists(ADocument) then
begin
ShowMessage('Specified Document not found.');
Exit;
end;
{ Create the OLE Object }
try
WordApp := CreateOLEObject('Word.Application');
except
on E: Exception do
begin
E.Message := 'Word is not available.';
raise;
end;
end;
try
{ Hide Word }
WordApp.Visible := False;
{ Open the document }
WordApp.Documents.Open(ADocument);
{ Initialize parameters}
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := SearchString;
WordApp.Selection.Find.Replacement.Text := ReplaceString;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
{ Perform the search}
if wrfReplaceAll in Flags then
WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
else
WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
{ Save word }
WordApp.ActiveDocument.SaveAs(ADocument);
{ Assume that successful }
Result := True;
{ Close the document }
WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
finally
{ Quit Word }
WordApp.Quit;
WordApp := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Word_StringReplace('C:\Test.doc','Old String','New String',[wrfReplaceAll]);
end;
Niestety przy pomocy tych dwóch kodów na danym komputerze musi być zainstalowany Word Office, na dodatek przy każdej takiej oparcji musi on zostać otwarty, co bardzo spowalnia program.Czy jest jakaś możliwość zmiany zawartości takiego pliku .doc, aby Word nie musiał być otwierany ?
</ort>