Thema: Delphi Fernsteuerung von Word

Einzelnen Beitrag anzeigen

MaxMara

Registriert seit: 27. Apr 2004
Ort: Wien
77 Beiträge
 
Delphi 2007 Enterprise
 
#1

Fernsteuerung von Word

  Alt 18. Aug 2004, 07:01
Hallo Leute.

Ich habe derzeit ein kleines Problem mit Word und Delphi 7. Ich möchte über meine Delphiapplikation einen Datenbankquery (ich verwende die MyComponents) machen und das Ergebnis davon als Adressetiketten in Word ausgeben.
Das ganze funktioniert zwar, aber nur ziiiiemlich langsam. Im Endeffekt sollen immer so ca. 9000 Etiketten ausgegeben werden, dass würde dann in etwa 1 Stunde dauern bis alles im Worddokument drinnen ist.

Das ganze sieht so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FileName, ov : OleVariant;
  AdrStr : String;
  Counter,Anzahl : Integer;

begin
   with MySQLDataset1 do begin
       ClearMacros;
       TableName := 'adr_adressen';
       MacroByName('JOIN').AsString := 'INNER JOIN adr_countries ON (adr_adressen.adr_cou_id = adr_countries.cou_id)';
       MacroByName('WHERE').AsString := 'WHERE adr_kat1_id like "%bc%"';
       MacroByName('ORDER').AsString := 'order by adr_countries.cou_name, adr_adressen.adr_plz';
       open;
   end;
   Anzahl := MySQLServer1.DatasetFrom('Select count(*) as MyMenCount from adr_adressen WHERE adr_kat1_id like "%bc%"','MyCount').FieldByName('MyMenCount').AsInteger;
   MySQLServer1.FreeDataset('MyMenCount');
  Progressbar1.Max := Anzahl;
  Progressbar1.Step := 1;
  if OpenDialog1.Execute then
    FileName:=OpenDialog1.FileName
  else
    exit;
  WordApplication1.Connect;
  WordApplication1.Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
  Counter := 1;
  WordApplication1.Visible := true;
  while not MySQLDataset1.Eof do begin
      AdrStr := MySQLDataset1.FieldByName('adr_anrede').AsString + ' ' + MySQLDataset1.FieldByName('adr_titel').AsString + Chr(13);
      if (MySQLDataset1.FieldByName('adr_vorname').AsString = '') and (MySQLDataset1.FieldByName('adr_nachname').AsString = '') then
         AdrStr := AdrStr + MySQLDataset1.FieldByName('adr_institut').AsString + Chr(13)
      else
         AdrStr := AdrStr + MySQLDataset1.FieldByName('adr_vorname').AsString + ' ' + MySQLDataset1.FieldByName('adr_nachname').AsString + Chr(13);
      AdrStr := AdrStr +
                MySQLDataset1.FieldByName('adr_strasse').AsString + Chr(13) +
                MySQLDataset1.FieldByName('adr_plz').AsString + ' ' + MySQLDataset1.FieldByName('adr_ort').AsString;
      WordApplication1.Selection.TypeText(AdrStr);
      if MySQLDataset1.FieldByName('adr_cou_id').AsInteger <> 153 then
      begin
         AdrStr := Chr(13) + MySQLDataset1.FieldByName('cou_name').AsString;
         WordApplication1.Selection.Font.Bold := integer(True);
         WordApplication1.Selection.TypeText(AdrStr);
         WordApplication1.Selection.Font.Bold := integer(False);
      end;
      If counter <> 3 then
        WordApplication1.Selection.Cells.Item(1).Next.Select;
      If Counter = 3 then
      begin
        ov := 1;
        WordApplication1.Selection.InsertRowsBelow(ov);
        Counter := 0;
      end;
      MySQLDataset1.Next;
      Counter := Counter + 1;
      Progressbar1.StepIt;
  end;
  WordApplication1.Disconnect;
  MySQLDataset1.Close;
end;
Hat jemand von euch eine schnellere Lösung für mich bzw. einen Tipp was ich da machen könnte?

Vielen Dank und Grüße aus Wien
Christian.

BTW: Happy Birthday Daniel
  Mit Zitat antworten Zitat