Edycja pliku MS Word, bez uruchamiania Worda ?

0

<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>
0

Raczej nie ma takiej możliwości, gdyż w obydwu tych kodach odwołujesz się przez com do worda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1