Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   moderne Word-Anbindung (https://www.delphipraxis.net/181915-moderne-word-anbindung.html)

baumina 17. Sep 2014 15:29

moderne Word-Anbindung
 
Ich habe ein Adressverwaltungs-Programm (mySQL-Datenbank). Für eine Anbindung an Word fallen mir da unterschiedliche Vorgehensweisen ein, doch welche benutzen denn andere "moderne" Programme so? Im Moment fülle ich meine Daten in eine Access-Tabelle, die wiederum als Datenquelle für verschiedene Worddokumente (Serienbriefe) dient. Irgendwie gefällt mir das nimmer so gut. Einen Direktzugriff auf die mySQL-Datenbank möchte ich deswegen nicht, weil ich sonst auf jedem Rechner einen ODBC-Treiber installieren müsst und die Daten dann auch nicht so einfach als komplettes Adressfeld zu formatieren sind. Das Ersetzen von Platzhaltern innerhalb der Worddokumente erscheint mir auch nicht so prickelnd. Mein Chef hätte gern so ne Art Button "Kopiere Adresse in Worddokument", das angeblich andere Programme zur Verfügung stellen würden. Wie machen denn andere Programme das?

p80286 17. Sep 2014 16:53

AW: moderne Word-Anbindung
 
Zitat:

Zitat von baumina (Beitrag 1272910)
Einen Direktzugriff auf die mySQL-Datenbank möchte ich deswegen nicht, weil ich sonst auf jedem Rechner einen ODBC-Treiber installieren müsst

Wie willst Du sonst an die DB-Daten kommen?
Zitat:

Zitat von baumina (Beitrag 1272910)
und die Daten dann auch nicht so einfach als komplettes Adressfeld zu formatieren sind.

??? Das kommt doch sehr auf Deine Daten an

Zitat:

Zitat von baumina (Beitrag 1272910)
Das Ersetzen von Platzhaltern innerhalb der Worddokumente erscheint mir auch nicht so prickelnd.

Das kommt jetzt darauf an, was Du unter Platzhalter verstehst, Ich nutze gerne Textmarken. Allerdings muß man für Daten in Kopf- und Fußzeile auch Referenzfelder nutzen.

Zitat:

Zitat von baumina (Beitrag 1272910)
Mein Chef hätte gern so ne Art Button "Kopiere Adresse in Worddokument", das angeblich andere Programme zur Verfügung stellen würden. Wie machen denn andere Programme das?

WO hätte er denn gerne diesen Button?

Nichts für ungut, aber diese Ansprüche sind immer kurz vor "ich hab mir das so gedacht".
"Haben Sie das auch gesagt?"
"Wieso reicht Denken nicht?"

Gruß
K-H

P.S.
Es gibt solch "andere" Programme z.B. für die Rechnungserstellung, da wird dann einfach der Text in einem TRichedit zusammen gesetzt.

PPs.
vielleicht schaust Du hier mal rein scheint interessant zu sein, hab ich aber nicht intensiv verfolgt.

pelzig 17. Sep 2014 17:22

AW: moderne Word-Anbindung
 
Ist schon sehr lange her, aber in den guten alten Zeiten konnte man Word eine CSV-Datei als Datenquelle für Serienbriefe unterjubeln.

Die tatsächliche Datenbank hatte z.B. ein Feld "Geschlecht" und machte daraus zusätzlich in der exportierten CSV ein "Anrede" um in der Word-Dokumentvorlage ein "WennDannSonst" zu umschiffen.

War natürlich ein elendes Gefrickel in Delphi und ging damals schon über Access/Exel deutlich einfacher :cry:

Der Kunde wollte aber unbedingt dBase III und hat dafür auch bezahlen müssen :-D
Im Datenbankprogramm war der Button [Word-Serienbrief an markierte Empfänger].

MfG aus dem letzten Jahrtausend :shock:

Lemmy 17. Sep 2014 17:44

AW: moderne Word-Anbindung
 
Hi,

Text suchen und ersetzen ist wirklich nicht prickelnd, aber Du kannst über OLE-Automation und Bookmarks (Textmarken) an definierte Stellen springen und dort Text einfügen (geht im übrigen auch genauso einfach mit OpenOffice/LibreOffice).

Einen "Kopiere Adresse" ist einfach zu implementieren - einfach das Zeugs in die Zwischenablage einfügen, dann kann der Chef das manuell in Word einfügen. Ist aber sicher nicht das was er gerne möchte ;-)

Dann kannst Du noch versuchen, das neue Word-Format direkt zu schreiben. Ist sicherlich nicht ganz angenehm. Und zum Schluss: Verwende eine gute RichEdit Komponente, damit kannst Du dann eine Textverarbeitung direkt in dein Programm "integrieren"...

Grüße

punktl 17. Sep 2014 17:47

AW: moderne Word-Anbindung
 
In meinen Anwendungen gibt es einen Menüpunkt "Seriendruck Word" bzw. "Datenexport Word". Da erstelle ich einfach eine .csv-Datei, welche entsprechend für die Nutzer dokumentiert ist und als Seriendruckquelle genutzt wird. Für die - überall vorkommenden - DAU's sind dann noch entsprechende Makros in Word hinterlegt.
Für relativ feststehende Dokumente, die aber anschließend in Word noch bearbeitet werden sollen, verwende ich oft die ekRtf-Komponente (http://www.code.net.ru/). Gibts bei torry.net frei, ich habe jedoch die paar Euro für den Quelltext bezahlt. Funktioniert anstandslos beides hier mit Word 2002, 2007, 2010 und 2013.
Natürlich bleibt dir immer noch die OLE-Automation. Da empfehle ich das Studium von Deborah Pate's Seiten (http://www.djpate.freeserve.co.uk/Automation.htm).

Viele Grüße

Punktl

Sir Rufo 17. Sep 2014 18:04

AW: moderne Word-Anbindung
 
Um eine Adresse in Word einzufügen nimmt man eine DLL, die die Adresse von wo auch immer holt (MySQL, Adressverwaltung, ...) und an das Makro zurückliefert. Das Makro fügt diese Adresse dann z.B. an der aktuellen Adresse ein.

pelzig 17. Sep 2014 18:14

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Lemmy (Beitrag 1272921)
Und zum Schluss: Verwende eine gute RichEdit Komponente, damit kannst Du dann eine Textverarbeitung direkt in dein Programm "integrieren"...

Grüße

Sehr richtig! Die "gute RichEdit Komponente" sollte vor Allem mit Tabellen klarkommen!

Manche (meiner damals entscheidungsbefugten) Abteilungsleiter konnten nur Excel-Tabellen, für Word-Serienbriefe hatten sie SekretärInnen.

Abteilungsleiter sind beliebig austauschbar, SekretärInnen eher nicht!!!

Edith bestreitet ausdrücklich, daß sie jemals direkt für die Druckerei von Formularen für Steuerberater gearbeitet hat!

MfG

Dejan Vu 17. Sep 2014 19:15

AW: moderne Word-Anbindung
 
Also ich weiß jetzt nicht, wo das Problem besteht, die Steuerdatei für die Serienbrieffunktion zu erstellen und diese Funktion über OLE aufzurufen. In der Bankensoftware, die gerade hier entwickelt wird/wurde, wird das auch so gemacht. Die Datei wird dann abgespeichert und ausgedruckt (Kreditvertrag).

Ob ich das per OLE Replace mache, oder per Serienbrieffunktion mit Temp-Datei ist doch Jacke wie Hose. Ich kann ja auch meine Serienbrieffelder so wählen, das die Logik im Programm bleibt, d.h. überhaupt keine Makros in Word ausgeführt werden müssen.

baumina 18. Sep 2014 06:07

AW: moderne Word-Anbindung
 
Danke euch für die Ideen und Vorschläge. Die maximale Flexibilität bei minimalen Endnutzer(Word)kenntnissen war leider (wie befürchtet) nicht dabei, aber gute Ansatzpunkte meine jetzige Vorgehensweise ein bisschen anwenderfreundlicher zu gestalten.

Nachmals Merci!

Dejan Vu 18. Sep 2014 06:39

AW: moderne Word-Anbindung
 
Ach so. Der Endbenutzer kann die Vorlagen verändern.

Dann könnte ich mir Folgendes vorstellen:
  1. Der Benutzer erzeugt eine Vorlage auf die denkwürdig einfachste Weise. Dies ist mit dem Endbenutzer abzuklären. Er könnte z.B. $Anrede$ für die Anrede verwenden.
  2. Anhand #1 erzeugst Du einen kleinen Prozessor, der per OLE die $xy$ sucht. Dabei muss '$xy$' aus einem Fundus von erlaubten Bezeichnern stammen. Ist hier was faul => meckern. In einer Übersicht kannst Du zudem alle gefundenen '$xy$' anzeigen. So hat der Benutzer eine Kontrolle, ob er das so gewollt hat.
  3. Variante 1: Du speicherst diese Datei dann ab und verwendest den gleichen Prozessor, um dann die Platzhalter zu ersetzen.
  4. Variante 2: Du ersetzt vorher in dieser Datei die $xy$ durch 'richtigen' Word-Platzhalter speicherst und setzt dann die Serienbrieffunktion ein.

Und um deine Frage zu beantworten: Andere Programme setzen die Serienbrieffunktion von Word ein. Denn dafür gibt es erstens genügen Hilfe im Netz und zweitens kann das jede Sekretärin, das wird dir in jedem Grundkurs 'WORD' beigebracht (gut, vielleicht ist es ein Aufbaukurs). Das ist Standardgrundwissen.

Edit: Insgesamt ist mein Beitrag natürlich widersprüchlich, denn einerseits propagiere ich eine eigene Lösung, mache mich aber dann für den Standard stark. Ich denke aber, das kannst Du selbst entscheiden. Ich persönlich würde mit dem Endanwender den Standardweg diskutieren, das bringt jedem am Meisten.

baumina 18. Sep 2014 07:02

AW: moderne Word-Anbindung
 
Wie ich oben schon kurz geschrieben habe, ist meine momentane Vorgehensweise folgendermaßen:

In meinem Adressprogramm kann ich auswählen, welche Adressen entladen werden sollen. Diese werden in eine (vom Anwender auswählbare) Accesstabelle geschrieben, die wiederum als Datenquelle in verschiedenen Worddokumenten hinterlegt ist.

Doch wie ein Anwender halt so ist, er öffnet ein Worddokument mit hinterlegter Serienbrieffunktion, sucht sich dort aus den Serienbrief-Daten eine Adresse her und meckert mich dann an, warum das denn noch die alte Adresse sei, er hätte ja schließlich gerade eben im Adressprogramm die neue Adresse eingegeben. Oder das Worddokument ist mit der "falschen" Datenquelle verbunden; leider sieht man im Word nicht so einfach von welcher Datenquelle denn nun die Daten kommen.

Da es irgendwie nichts "moderneres" gibt, bin ich jetzt am überlegen, ob ich nicht immer parallel zu meiner Datenbank eine Accesstabelle mit allen Adressen führe und aktuell halte. Für einen Rundbrief à la Weihnachtspost lasse ich die Funktion zum Entladen ausgewählter Adressen so wie sie ist.

Smiley 18. Sep 2014 08:32

AW: moderne Word-Anbindung
 
Ich habe schon mal eine Applikation geschrieben die Word Automation benutzt und Daten aus einer DB in Word einsetzt.
Die Word Dokumente enthalten Platzhalter mit #Platzhaltername# gekennzeichnet.
Somit kann man beliebige Platzhalter definieren und benötigt keine Serienbrieffunktion von Word.

Ich habe die "Microsoft Office 2000 Beispiele..." unter "Packages installieren" aktiviert und arbeite mit dem Word200 OLE Objekt, das funktioniert auch mit Word2013.

Hier einige Code-Auszüge:
Code:
//******************************************************************************
//***************** Word öffnen ************************************************
//******************************************************************************
Procedure ConnectToWord(sichtbar: Boolean);
Var
  wFalse, TempFile: OleVariant;
  Ziel, Dateiname: String;

Begin
  wFalse := False;
  { Check if file exists }
  If Not FileExists(Filename) Then
    Begin
      ShowMessage('Das Dokument ist nicht vorhanden');
      Exit;
    End;

  With Form1 Do
    Begin

      Try
        If (Not aktiv('Word.Application')) Then
          Begin
            WordOpen := False;
          End;
        WordApplication1.Connect;
      Except
        Showmessage('Word konnte nicht gestartet werden');
        exit;
      End;
      If WordOpen Then
        WordDocument1.Close(wFalse);

      If Aendern Then
        Begin
          // Kopie von Worddatei anlegen und damit arbeiten bei Replace
          Dateiname := FrmVerwaltungBriefe.BGrid.Cells[2, StrToInt(BriefIndex)];
          Ziel := AppPath + '$TempDoc.doc';
          Tools.CopyFile(Dateiname, Ziel);
          TempFile := Ziel;
          WordApplication1.Documents.OpenOld(TempFile, wFalse, wFalse, wFalse,
            EmptyParam, EmptyParam, wFalse, EmptyParam, EmptyParam, EmptyParam);
        End
      Else
        // Wenn 'Brief laden' aufgerufen wurde, dann mit Orginaldatei arbeiten
        WordApplication1.Documents.OpenOld(FileName, wFalse, wFalse, wFalse,
          EmptyParam, EmptyParam, wFalse, EmptyParam, EmptyParam, EmptyParam);

      WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
      WordApplication1.Visible := sichtbar;
      WordOpen := True;
      //WordApplication1.Activate;
    End;

End;

//******************************************************************************
//***************** Word Beenden ***********************************************
//******************************************************************************
Procedure WordBeenden;
Begin
  With Form1 Do
    Begin
      If WordOpen Then
        Begin
          Try
            WordApplication1.Quit;
            WordApplication1.Disconnect;
          Except
          End;
        End;
    End;
End;

//******************************************************************************
//***************** Word Replace Funktion **************************************
//******************************************************************************
{
  Diese Funktion startet eine Word versteckte Instanz, öffnet eine Datei und
  ersetzt (alle) Vorkommen von "SearchString" durch "ReplaceString".
  Die Funktion ist ähnlich zur StringReplace() Funktion.
}

Procedure Word_StringReplace(SearchString, ReplaceString: String; ReplaceAll: Boolean);
Const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
Var
  _Search, _Replace, _Wrap, _ReplaceAll, F, T: OLEVariant;

Begin
//  Application.ProcessMessages;
 { Initialisiere Parameter}
  If ReplaceAll Then
    _ReplaceAll := wdReplaceAll
  Else
    _ReplaceAll := wdReplaceOne;

  _Search := SearchString;
  _Replace := ReplaceString;
  _Wrap := wdFindContinue;
  F := False;
  T := True;
  { Perform the search}
  //FindText,Case,WholeWord,WildChars,SoundsLike,AllWordForms,Forward,Wrap,ReplaceWith,ReplaceTyp
  Form1.WordApplication1.Selection.Find.ExecuteOld(
    _Search, F, T, F, F, F, T, _Wrap, F, _Replace, _ReplaceAll);
//  Application.ProcessMessages;
End;

//******************************************************************************
//**********************        Formulare       *******************************
//******************************************************************************

//******************************************************************************
//********************** Replace Brief ausgeben ********************************
//******************************************************************************
Procedure BriefReplace;
Var
  i: Integer;

Begin
//  Application.ProcessMessages;

  Word_StringReplace('#Adr_Anrede#', Form1.QKundenAnrede.Text, True);
  Word_StringReplace('#Adr_Vorname#', Form1.QKundenVorname.Text, True);
  Word_StringReplace('#Adr_Name#', Form1.QKundenName.Text, True);
  Word_StringReplace('#Adr_Strasse#', Form1.QKundenStrasse.Text, True);
  Word_StringReplace('#Adr_PLZ#', Form1.QKundenPLZ.Text, True);
  Word_StringReplace('#Adr_Ort#', Form1.QKundenOrt.Text, True);
  Word_StringReplace('#GebDatum#', Form1.QKundenGebDatum.Text, True);

  For i := 1 To FrmFelder.Grid.RowCount - 1 Do
    Begin
      Word_StringReplace('#' + WordFeld[i].Name + '#', WordFeld[i].Text, True);
    End;

  Application.ProcessMessages;
End;

jobo 18. Sep 2014 09:12

AW: moderne Word-Anbindung
 
Zitat:

Zitat von baumina (Beitrag 1272939)
Da es irgendwie nichts "moderneres" gibt, bin ich jetzt am überlegen, ob ich nicht immer parallel zu meiner Datenbank eine Accesstabelle mit allen Adressen führe und aktuell halte. Für einen Rundbrief à la Weihnachtspost lasse ich die Funktion zum Entladen ausgewählter Adressen so wie sie ist.

Also bevor ich darüber nachdenken täte, diese Synchronisation irgendwie gegen Access zu machen (scheinbar über die Delphianwendung), würde ich aber eher ODBC installieren. GGf programmatisch über Deine bestehende Anwendung.
In Access würde ich dann die entscheidenen Tabellen verknüpfen oder als Passthrough Queries zur Verfügung stellen. Die sind dann automatisch immer aktuell, ohne dass man einen Finger krumm machen muss.

baumina 18. Sep 2014 09:22

AW: moderne Word-Anbindung
 
Klingt gut, bis auf den Mist mit dem ODBC. Mein Adress-Programm muss nicht installiert werden. Auf den Firmen-PCs wird einfach nur die exe gestartet, die auf dem Netz liegt.

jobo 18. Sep 2014 09:44

AW: moderne Word-Anbindung
 
Zitat:

Zitat von baumina (Beitrag 1272953)
Klingt gut, bis auf den Mist mit dem ODBC. Mein Adress-Programm muss nicht installiert werden. Auf den Firmen-PCs wird einfach nur die exe gestartet, die auf dem Netz liegt.

Ja, ok, ich meinte aber, dass Dein Access Programm ggF. die ODBC Installation durchführen könnte- falls Ihr viele Systeme habt- ist natürlich auch eine Rechtefrage.

baumina 18. Sep 2014 09:53

AW: moderne Word-Anbindung
 
ja, das scheitert definitiv an den Rechten.

Dejan Vu 18. Sep 2014 10:08

AW: moderne Word-Anbindung
 
Ach so, die Benutzer haben irgend eine Word-Datei, die mit irgend einer Access-DB verbunden ist und wundern sich dann, das da noch die alten Daten drinstehen. Das stimmt, das ist blöd. Aber dafür können die Benutzer nichts, das ist dir ja sicherlich klar, sondern das Konzept.

Ich verstehe aber nicht ganz, was Du unter 'modern' verstehst. Modern wäre vielleicht, keine mySQL zu nehmen, sondern ein Microsoft-Produkt, wie den SQL-Server. Da wird dann kein ODBC-Treiber benötigt.

Modern wäre es sicherlich, im Netz einen Ordner für die Word-Vorlagen und -briefe bereitzustellen und einfach zu bestimmen, das nur mit Vorlagen aus diesem Ordner sichergestellt ist, das alles funktioniert, denn dort sind dann die Word-Briefe mit den aktuellen Datenbanken verknüpft, sei es Access oder ein SQL-Server.

Modern ist es auch, den Anwendern klarzumachen, wie das alles funktioniert, sich nicht wundern müssen, wenn sie sich etwas eigenes zurechtschustern, und Probleme nun mal auftreten, wenn sie eine lokale Kopie der Adressliste nehmen.

Ich finde nichts schlimm daran, eine externe Adressliste synchron zu pflegen. Da kann man dann auch mal die Liste und den Serienbrief als Nachweis archivieren. Oder extern einen Abgleich (Deduplication, Record linking) durchführen und die Änderungen dann zurückspielen etc.

Perfekt wäre natürlich eine nichtredundante Vorhaltung aller Daten in einer zentralen Datenbank. Aber perfekt geht nun einmal nicht immer.

baumina 18. Sep 2014 10:21

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Dejan Vu (Beitrag 1272964)
Modern wäre vielleicht, keine mySQL zu nehmen, sondern ein Microsoft-Produkt, wie den SQL-Server. Da wird dann kein ODBC-Treiber benötigt.

Auch ein interessanter Aspekt. Nur nochmal sicherheitshalber nachgefragt: Word kann als Serienbrief-Datenquelle ohne OBDC auf eine MS-SQL-Datenbank zugreifen?

EDIT: Ahja, denke ich habs gefunden... Datenverbindungs-Assistent : Microsoft SQL Server.

p80286 18. Sep 2014 20:08

AW: moderne Word-Anbindung
 
Könnte es sein, daß da ein Mißverständnis vorliegt?
Ohne eine Schnittstelle (ob ODBC,ADO oder was auch immer) kann Word,Access,Excel nicht mit einer Datenbank umgehen. Natürlich ist die Anbindung von MS-Produkten etwas einfacher zu realisieren als z.B. Oracle. Aber das Prinzip ist immer das gleiche.
Mir ist allerdings immer noch nicht klar, warum Du Dich gegen ODBC sträubst. Gut das ist vllt. nicht diiie Lösung aber ist eigentlich (nach meiner Erfahrung) die Lösung mit dem geringsten Aufwand.

Zitat:

Zitat von Dejan Vu (Beitrag 1272964)
Perfekt wäre natürlich eine nichtredundante Vorhaltung aller Daten in einer zentralen Datenbank. Aber perfekt geht nun einmal nicht immer.

Das halte ich nicht für perfekt, sondern für richtig. Es mag sein, daß so eine "Zwischentabelle" als integraler Bestandteil eines Programms manchmal die Arbeit erleichtert, aber sobald wie in diesem Fall die Daten "irgendwann" einmal synchronisiert werden, ist das tödlich.

Gruß
K-H

baumina 19. Sep 2014 06:47

AW: moderne Word-Anbindung
 
Ich ging irgendwie davon aus, dass meine momentane Vorgehensweise, die inzwischen auch schon seit über 10 Jahren so ist, nicht mehr so ganz auf dem heutigen Stand wäre. Doch wie ich den Beiträgen hier so entnehme, scheint die allgemeine Vorgehensweise auch heute noch über die Serienbrieffunktion von Word zu gehen. Ich hatte erwartet, dass mir jemand sagt, "jaaaaa, früher hat man das mal so gemacht, heute macht man das ja doch eher so...."

Dejan Vu 19. Sep 2014 07:21

AW: moderne Word-Anbindung
 
Zitat:

Zitat von p80286 (Beitrag 1273058)
Das halte ich nicht für perfekt, sondern für richtig.

Es gibt hier nicht richtig und falsch. Wir befinden uns in einem real existierenden Wirtschaftsorganismus, wo man mit Status Quo, Sachzwängen und Menschen(!) zu tun hat, ergo ist der 0/1-Ansatz hier fehl am Platz.

Es ist aber auch nicht notwendigerweise 'richtig', denn stell dir den Fall vor, das eine Adresse schon auf dem neuesten Stand ist, aber die Weihnachtskarte bitte noch an die alte Adresse gehen soll. Mit einer separaten Weihnachtskartenserienbrieftabelle ist das kein Problem, mit der 'richtigen' Lösung dagegen schon. Ich sage nicht, das es nicht machbar ist, aber es wirft Probleme auf (man muss z.B. ein Gültigkeitsdatum pflegen, ab wann die Adresse gültig ist und wenn man das nicht hat....).

Hier noch mein Gleichnis zum Thema 'Perfekt';
Zitat:

Zitat von Dejan Vu
Obwohl der Fußball nicht rund ist, ist Deutschland Weltmeister. :gruebel:

@Baumina: 'Modern' wäre vielleicht der direkte Zugriff auf die Word-API und das schreiben der Texte über diese API, also ohne Serienbrieffunktion. Jedenfalls würde das der hiesige 'Lead Developer' so definieren, der stellt nämlich das Gleichnis auf: Modern = Neu, besser(!) und anders als vorher.

Folgendes Zitat trifft es, glaube ich, ganz gut:
Zitat:

Zitat von Bernhard von Chartres
Wir sind Zwerge, die auf den Schultern von Riesen sitzen. Wir können weiter sehen als unsere Ahnen und in dem Maß ist unser Wissen größer als das ihrige und doch wären wir nichts, würde uns die Summe ihres Wissens nicht den Weg weisen.


jobo 19. Sep 2014 07:26

AW: moderne Word-Anbindung
 
Also konkret unter den bis jetzt genannten Aspekten (
Zitat:

Mein Chef hätte gern so ne Art Button "Kopiere Adresse in Worddokument", kein ODBC, ..
)kann man es auch per OLE machen, ohne Serienbrief, ohne ODBC.
Prinzip
Brief.Exe: User wählt Adresse aus
Brief.Exe: fragt User nach Word Dokument oder Vorlage (Datei/Verzeichnis)
Brief.exe: öffnet das Dokument (OLE).
oder
Brief.Exe: fragt User nach der Auswahl eines bereits geöffneten Dokuments
dann
Brief.Exe: bittet User, den Cursor an der gewünschten Stelle zu platzieren
Brief.Exe: kippt die Anschriftdaten in den Brief (OLE)

Kann man "beliebig" aufbretzeln.

mm1256 19. Sep 2014 07:35

AW: moderne Word-Anbindung
 
Zitat:

Zitat von baumina (Beitrag 1273070)
Ich hatte erwartet, dass mir jemand sagt, "jaaaaa, früher hat man das mal so gemacht, heute macht man das ja doch eher so...."

@Baumina Bitteschön: Früher und Heute:

Früher hab ich das mit der Serienbrief-Funktion von Word gemacht.
Früher hab ich jedem zweiten Kunden erklären müssen, wie die Serienbrief-Funktion in Word überhaupt funktioniert. Das ist bzw. war aber eigentlich gar nicht meine Aufgabe und hat mich viel Zeit gekostet, denn nicht jede Support-Minute kann man 1:1 abrechnen.
Früher haben meine Kunden oft gefragt, warum ist das (mit der Serienbrief-Funktion) so kompliziert, das muss doch auch einfacher gehen.
Früher musste ich mindestens 3 Word-Versionen kennen, weil die Serienbrief-Funktion in jeder Version etwas anders implementiert war.
Früher hatte ich einen riesigen Aufwand zu betreiben, wenn der Kunde beispielsweise den Ausdruck archivieren und bei der Adresse ablegen wollte
Früher war es immer sehr problematisch, im Netzwerk einen einheitlichen Dokumentenstamm zu verwalten, Stichwort "gemeinsame Dokumentenvorlagen" in Word.

Dann habe ich mir WPTools geholt und damit eine kleine Textverarbeitung in meine Anwendung integriert.

Heute fragen mich keine Kunden mehr, wie man einen Serienbrief druckt. Es geht so einfach, dass es (fast) jeder auf Anhieb kapiert.
Heute brauche ich keine Schnittstellen-Datei bzw Steuerdatei mehr. Der Datenzugriff erfolgt live auf die Original-Daten mit direkten (nur lesen) Zugriff.
Heute archiviere ich die Ausdrucke automatisch als PDF-Datei bei der jeweiligen Adresse (Kunde, Lieferant usw.)
Heute verwenden meine Kunden meine Mini-Textverarbeitung viel lieber als Word. Die früher verwendete Schnittstellen stelle ich zwar noch unverändert zur Verfügung, aber keiner benutzt sie mehr.
Heute verwalten die Anwender die am meisten benötigten Dokumente (Briefe bzw. Brief-Vorlagen) zentral in meiner Datenbank. Es existieren keine unterschiedlichen Dokumentenversionen mehr auf unterschiedlichen Arbeitsplätzen.
Heute werden alle Dokumente (die versandten und auch die Vorlagen) im Zuge der Datensicherung der Datenbank automatisch mit gesichert.
Heute....sind meine Kunden mit dieser Lösung zufrieden :)

Wenn du sehen willst, wie das heute funktioniert, schick mir eine PN und dann schick ich dir eine Demo meiner Software. Und - nein, ich bin nicht an WPTools beteiligt, bevor irgend so ein Schlaumeier auf diese Idee kommt. Ich wollte dir nur aufzeigen, wie das früher war und heute ist. Du hast ja danach gefragt 8-)

mkinzler 19. Sep 2014 07:38

AW: moderne Word-Anbindung
 
Und wie greift das Programm auf die Daten(bank) zu? Da braucht man auch ODBC oder eine Alternative.

mm1256 19. Sep 2014 07:39

AW: moderne Word-Anbindung
 
Der Datenbankzugriff erfolgt genauso wie in meiner Anwendung, da greife ich schließlich ja auch auf meine Daten zu. Muss also nichts zusätzlich installiert werden.

baumina 19. Sep 2014 07:47

AW: moderne Word-Anbindung
 
Zitat:

Zitat von mkinzler (Beitrag 1273077)
Und wie greift das Programm auf die Daten(bank) zu? Da braucht man auch ODBC oder eine Alternative.

Mein Adress-Verwaltungs-Programm ist mit Delphi geschrieben, welches mit Hilfe von UniDAC auf die mySQL-Datenbank zugreift.



@mm1256 : Danke Dir, ich schau mir das mal an. Wobei ich jetzt schon befürchte, dass mein Chef mich dann als nächstes fragt, warum ich denn nun auf einmal was gegen Word hätte, was doch schließlich Standard ist und wir sowieso schon gekauft haben.

p80286 19. Sep 2014 10:18

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Dejan Vu (Beitrag 1273073)
Es ist aber auch nicht notwendigerweise 'richtig', denn stell dir den Fall vor, das eine Adresse schon auf dem neuesten Stand ist, aber die Weihnachtskarte bitte noch an die alte Adresse gehen soll.

Das sind doch die typischen durch die Brust_ins_Auge_Lösungen. Entweder der Empfänger ist unter der alten oder der neuen Adresse zu erreichen. Wenn er zwei Adressen hat, (von mir aus auch für einen Übergang) dann sollten die auch im Bestand sein. Der von Dir vertretene Ansatz ist dann die Rechtfertigung für die Adressbestände, die von jeder Sekretärin und zusätzlich nochmals von der Abteilungsleitung und dem Pförtner gepflegt werden.

Gelöscht

Tut mir leid wenn das etwas schroff ist, aber z.Zt. schlage ich mich mit einigen Softwarelieferanten herum, die Teilweise nicht einsehen wollen, das es nunmal Personen (vor allem Firmen) gibt, bei denen kommt man nicht mit einer Adresse aus.

Gruß
K-H

Chemiker 19. Sep 2014 10:39

AW: moderne Word-Anbindung
 
Hallo,

aber für die Übermittlung einer Adresse direkt 2 DBMS zu bemühen ist doch recht umständlich. Ob es da nicht mehr Sinn macht, das Delphi-Programm mit einem Word-OLE Automation auszustatten und alles ohne den Umweg über Access zu realisieren?
Braucht man für UniDac einen ODBC-Treiber?

Bis bald Chemiker

jobo 19. Sep 2014 10:44

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Chemiker (Beitrag 1273129)
aber für die Übermittlung einer Adresse direkt 2 DBMS zu bemühen ist doch recht umständlich. Ob es da nicht mehr Sinn macht, das Delphi-Programm mit einem Word-OLE Automation auszustatten und alles ohne den Umweg über Access zu realisieren?

sehe ich auch so: http://www.delphipraxis.net/1273074-post22.html

baumina 19. Sep 2014 10:47

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Chemiker (Beitrag 1273129)
Hallo,

aber für die Übermittlung einer Adresse direkt 2 DBMS zu bemühen ist doch recht umständlich. Ob es da nicht mehr Sinn macht, das Delphi-Programm mit einem Word-OLE Automation auszustatten und alles ohne den Umweg über Access zu realisieren?
Braucht man für UniDac einen ODBC-Treiber?

Bis bald Chemiker


Wenn es um nur eine Adresse geht, gebe ich dir Recht. Vielleicht sollte ich 2 Lösungswege gehen, einmal den Weg über die Serienbrieffunktion um wirklich auch Serienbriefe für z.B. Weihnachtspost machen zu können. Und dann noch eine OLE-Steuerung für den Sonderwunsch "Kopiere diese Adresse ins Worddokument".

UniDAC braucht weder einen ODBC-Treiber, noch irgendeine DLL.

mm1256 19. Sep 2014 10:50

AW: moderne Word-Anbindung
 
Zitat:

Zitat von Chemiker (Beitrag 1273129)
Hallo,

aber für die Übermittlung einer Adresse direkt 2 DBMS zu bemühen ist doch recht umständlich....

Verstehe ich da gerade etwas nicht? Wer hat denn was von 2 DBMS geschrieben?

Chemiker 19. Sep 2014 11:23

AW: moderne Word-Anbindung
 
Hallo baumina,

mach doch alles über die OLE-Automation. Einfach eine Word – Vorlage erstellen für Weihnachten. Eine SQL – Abfrage erstellen und die Word – Vorlage hintereinander ausdrucken mit den variablen Daten aus der DB.

@mm1256: 1.) Access 2.) mySQL

Bis bald Chemiker

p80286 19. Sep 2014 12:09

AW: moderne Word-Anbindung
 
Zitat:

Zitat von mm1256 (Beitrag 1273075)
Früher hab ich jedem zweiten Kunden erklären müssen, wie die Serienbrief-Funktion in Word überhaupt funktioniert. Das ist bzw. war aber eigentlich gar nicht meine Aufgabe und hat mich viel Zeit gekostet, denn nicht jede Support-Minute kann man 1:1 abrechnen.

Dann warst Du wohl billiger als der entsprechende Word-Kurs

Zitat:

Zitat von mm1256 (Beitrag 1273075)
Früher haben meine Kunden oft gefragt, warum ist das (mit der Serienbrief-Funktion) so kompliziert, das muss doch auch einfacher gehen.

was daran ist kompliziert?
Zitat:

Zitat von mm1256 (Beitrag 1273075)
Früher musste ich mindestens 3 Word-Versionen kennen, weil die Serienbrief-Funktion in jeder Version etwas anders implementiert war.

Da ist was dran.

Zitat:

Zitat von mm1256 (Beitrag 1273075)
Früher war es immer sehr problematisch, im Netzwerk einen einheitlichen Dokumentenstamm zu verwalten, Stichwort "gemeinsame Dokumentenvorlagen" in Word.

Obwohl wir mit Word arbeiten (müssen) war das bisher nur bei den eigenwilligeren Mitarbeitern ein Problem.

Zitat:

Zitat von Chemiker (Beitrag 1273140)
Hallo baumina,

mach doch alles über die OLE-Automation. Einfach eine Word – Vorlage erstellen für Weihnachten. Eine SQL – Abfrage erstellen und die Word – Vorlage hintereinander ausdrucken mit den variablen Daten aus der DB.

Dem kann ich mich nur anschließen, wobei "einfach" wohl sehr im Auge des Betrachters liegt. Je nach Anforderung ist das nicht ganz trivial.

Gruß
K-H

Jumpy 19. Sep 2014 12:23

AW: moderne Word-Anbindung
 
Die Frage ist (wenn ich mich mal in die Diskussion dazudrägeln darf) was den wirklich der/die Anwändungsfälle sind?

- Serienbrief z.B. f. Weihnachten.
- Einen Standdardbrief (für den es eine Vorlage gibt) aus der Anwendung heraus erstellen (das wäre ja im Prinzip Reporting).
- Einen gerade spontan individuell in Word erstellten Brief mit einer Adresse füttern. (Das versteh ich unter der "Knopf drücken und Adresse wird in Word eingefügt" Button).


Kann man nicht für Word ein Addon oder Macros schreiben, die im im Netz liegenden Normal.dot verfügbar sind und dadurch in allen Word Dokumenten verfügbar sind? Und da dann einen Code einbauen, mit dem man sich die Adressen aus der DB holt?

pelzig 19. Sep 2014 12:43

AW: moderne Word-Anbindung
 
Ganz gleich womit "exportiert" wird, neige ich doch zu CSV mit dem Semikolon als Feldtrennzeichen und den Gänsefüßchen als Feldbegrenzer.

Datenbank-Updates kommen bestimmt, Gehen und Verschwinden aber auch wieder!

Ich bin nur wirklich sehr froh, daß ich meinen ganzen Datenbankkram in der Cloud gespeichert habe!

Denn dadurch muß ich meine lokale Festplatte nicht mehr durch Backups auf eine externe Festplatte belasten!

Daher bin ich durch die Cloud (sprich: Klaut!) allumfassend ABGESICHERT!

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.

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