Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MS Word 2003 Serienbiref / mailMerge aus xls File (https://www.delphipraxis.net/120042-ms-word-2003-serienbiref-mailmerge-aus-xls-file.html)

uranop 4. Sep 2008 20:47


MS Word 2003 Serienbiref / mailMerge aus xls File
 
Hi Leute,

folgendesProblem.

Ich habe hier nen Doc, das mit MailMerge Felder kreuzundquer versehen ist.
dieses ding dient als serienbriefVorlage.
als Input wird eine xls datei verwendet.

diese datei ist so aufgebaut, das in der ersten zeile die ganzen namen der mailmerge felder stehen
und in der 2ten die jeweiligen variablen dazu .

ich habe schon einige lösungstips gesehen mit sql varianten etc, diese helfen mir aber nicht.

mein vorhaben ist es,
automatisch im hintergrund die vorlage mit den daten aus dem xls zu bedampfen und unter neuem namen abzuspeichern.

ich komm einfach nicht auf den trichter wie man sowas zustande bringt.
btw ein umstieg auf odbc, sql oder so ist nicht drin, da dies einen validierten vorgang "verletzen" wuerde.

habt ihr zufaellig irgendwo sources dazu rumfliegen, oder vll auch componenten ander hand, die das von sich aus machen ?

vielen dank

Chemiker 4. Sep 2008 21:39

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
Hallo uranob,

ich gebe zu das ich Deine Frage nicht so ganz verstanden habe. Ich würde sagen, dass ein Programm überflüssig ist.
Wenn Du eine XLS-Datei hast bittet sich doch an mit Excel Word aufzurufen und die Daten in das Word-Formular zu übernehmen.

Bis bald Chemiker

uranop 5. Sep 2008 04:51

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
richtig ,
das sind die von haus aus eingebundenen funktionen von ms .
da ich aber aufwand minimieren moechte, wuerde ich das dann doch gerne mit in mein prog aufnehmen,

Chemiker 5. Sep 2008 06:46

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
Hallo uranop,

man kann über die OLE-Automation oder ADO die Daten aus Excel laden. Welche Methode man wählt hängt zum Teil von der Datenmenge ab. Wenn die Daten in Deinem Programm sichtbar sein sollen könnte man ein StringGrid dafür einsetzen.
Sind die Daten in Deinem Programm geladen, wird Excel geschlossen und anschließend Word mit OLE aufgerufen und die Daten an Word übergeben.
Zweckmäßig ist es wohl sich einen Macro in VBA von Word zu erstellen und anschließend das in Deinem Delphiprogramm nachzubilden.
Ich weise aber darauf hin, dass das bei einem sehr umfangreichen Datenbestand relativ lange dauern kann.

Bis bald Chemiker

uranop 5. Sep 2008 16:21

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
hallo,

ich kann garnicht sagen wie sehr ich dir fuer den tipp mit dem vba makro danke ... ich habe den wald vor baeumen
nicht mehr gesehen und bin auf das simpelste nicht draufgekommen.

Vielen Vielen dank !!

ich weiss nicht ob ich das hier noch mit dranschieben kann, ich mach einfach mal ...

die erstellung des serienbriefes geht, aber nur teilweise.
in der vorlage sind noch diverse Checkboxen drinne.

diese gilt es ebenfalls noch einzustellen ...

da die makro aufzeichnung beim aendern der werte streikt habe ich das mal anders versucht.
ich habe im netz was gefunden was sich rel simpel durchfuehren laesst

Delphi-Quellcode:

// SerienBrief
procedure TForm4.Image8Click(Sender: TObject);
var
Word : OLEVariant;
wState, wName: OleVariant;
strPfad: string;
begin
wState := OleVariant(flag);
wName := OleVariant(cbName);
 strPfad := ExtractFilePath(ParamStr(0)); //ExtractFilePath(Application.ExeName);
   // Define a string list object, and point our variable at it
          try
             Word:=CreateOleObject('Word.Application');
          except
             ShowMessage('Kann Word nicht starten!');
             Exit;
          end;
          Word.Visible:=false;

       Word.Documents.Open(FileName:=strPfad +'\geraetebuecher\Gerätebuch v8.0.doc', ConfirmConversions:=
        False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:='',
        PasswordTemplate:='', Revert:=False, WritePasswordDocument:='',
        WritePasswordTemplate:='', Format:=wdOpenFormatAuto, XMLTransform:='');

   Word.ActiveDocument.MailMerge.OpenDataSource(Name:=
        strPfad +'\geraetebuecher\' + Edit1.Text +'_HW.xls',
        ConfirmConversions:=False, ReadOnly:=True, LinkToSource:=True,
        AddToRecentFiles:=False, PasswordDocument:='', PasswordTemplate:='',
        WritePasswordDocument:='', WritePasswordTemplate:='', Revert:=False,
        Format:=wdOpenFormatAuto, Connection:='Provider=Microsoft.Jet.OLEDB.4.0;Password='''
        , SQLStatement:='SELECT * FROM `'+ Edit1.Text +'$`', SQLStatement1:='', SubType:=
        wdMergeSubTypeAccess);

    Word.ActiveDocument.MailMerge.Execute(Pause:= True) ;

    // Peripherie
    if Checkbox1.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox1).CheckBox.Value := TRUE;
    if Checkbox4.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox2).CheckBox.Value := TRUE;
    if Checkbox5.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox3).CheckBox.Value := TRUE;
    if Checkbox6.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox4).CheckBox.Value := TRUE;
    if Checkbox7.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox5).CheckBox.Value := TRUE;
    if Checkbox8.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox6).CheckBox.Value := TRUE;
    if Checkbox9.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox7).CheckBox.Value := TRUE;
    if Checkbox10.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox8).CheckBox.Value := TRUE;

    // Reguliertes codex Umfeld
    if Checkbox11.Checked = TRUE then Word.ActiveDocument.FormFields.Item(CheckBox9).CheckBox.Value := TRUE;
    if Checkbox1.Checked = FALSE then Word.ActiveDocument.FormFields.Item(CheckBox10).CheckBox.Value := TRUE;

    // Codex Client
    if ComboBox5.Text = 'JA' then Word.ActiveDocument.FormFields.Item(CheckBox11).CheckBox.Value := TRUE;
    if ComboBox5.Text = 'NEIN' then Word.ActiveDocument.FormFields.Item(CheckBox12).CheckBox.Value := TRUE;

    Word.ActiveDocument.SaveAs(FileName:= strPfad + 'geraetebuecher\GB_temp_'+ Edit1.Text +'.doc', FileFormat:=wdFormatDocument,
        LockComments:=False, Password:='', AddToRecentFiles:=True, WritePassword
       :='', ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False,
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=
       False );

    Word.Documents.Close(False, EmptyParam, EmptyParam);
    Word.Quit; //Beendet Excel


    Image9.Visible := TRUE;


end;
tjahaa folgendes problem nun ...
der compiler meint nun , dass flag und cbName nicht deklariert waeren ...
bin ich doof oder was, das habe ich doch schon im vorfeld getan ...

etwas ratlos bin momentan


EDIT //
gelöst
if Checkbox10.Checked = TRUE then Word.ActiveDocument.FormFields.Item('CheckBox8').C heckBox.Value := TRUE;

langt vollkommen und alles passt

p80286 5. Sep 2008 17:01

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
Hallo Uranop,

auf den ersten (und zweiten) Blick gebe ich dem Compiler recht, die beiden scheinen wirklich vom Himmel gefallen zu sein.
Aber wofür benötigst Du sie überhaupt?

Delphi-Quellcode:
var
  Word        : OLEVariant;
  wState, wName: OleVariant;
  strPfad     : string;
begin
wState := OleVariant(flag);
wName := OleVariant(cbName);
...
im weiteren Code wird nirgendwo mehr darauf zugegriffen. Oder hab ich da was übersehen?

Gruß
K-H

nachtrag:
Wenns jetzt klappt ists OK
aber irgendwie ist das ein Wunder.

jfheins 5. Sep 2008 17:11

Re: MS Word 2003 Serienbiref / mailMerge aus xls File
 
Zitat:

Zitat von uranop
Delphi-Quellcode:
    if Checkbox1.Checked = TRUE
    if Checkbox4.Checked = TRUE
    if Checkbox5.Checked = TRUE
    if Checkbox6.Checked = TRUE
    if Checkbox7.Checked = TRUE
    if Checkbox8.Checked = TRUE
    if Checkbox9.Checked = TRUE
    if Checkbox10.Checked = TRUE

Bitte nicht!

http://www.delphipraxis.net/internal...ct.php?t=68256 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz