![]() |
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 |
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 |
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, |
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 |
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:
tjahaa folgendes problem nun ... // 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; 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 |
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:
im weiteren Code wird nirgendwo mehr darauf zugegriffen. Oder hab ich da was übersehen?
var
Word : OLEVariant; wState, wName: OleVariant; strPfad : string; begin wState := OleVariant(flag); wName := OleVariant(cbName); ... Gruß K-H nachtrag: Wenns jetzt klappt ists OK aber irgendwie ist das ein Wunder. |
Re: MS Word 2003 Serienbiref / mailMerge aus xls File
Zitat:
![]() |
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