von paf11 » Do, 04.10.2012 12:57
Hallo!
Da hab ich mir was angefangen!
ZWECK:
Seriendruckumstellung von MS-Word auf OO-Writer
WAS/WIE nache ich das
1) Seriendruckfelder ersetzen (siehe weiter unten )
funktioniert
2) In den Word Vorlagen gibt es auch Bedinungsfelder
IF {MERGEFIELD LetzteBestellung} <> "" .......
diese Felder muss ich vorher unter Feldbefehl,andere,..
als Variable deklarieren und kann sie nicht mehr wie unter Punkt 1 mit den Daten befüllen, da sollte dann auch die Bedingung ziehen.
Gibt es da eine andere Lösung??
3) Tabellen im Writer (in diesen Tabellen sind ebenfalls Seriendruckfelder. Im 1. Durchgang werden die Werte eingetragen und
angezeigt, dann muss ich aber auch noch die Berechnung aufrufen. Derzeit habe ich noch keine Möglichkeit gefunden im Makro
die Funktion "Felder aktualisieren = F9" aufzurufen
Gibt es da eine Lösung?
-- SERIENDRUCKFELDER ERSETZEN----
-- Daten für Seriendruck --
-- über 100 Datenfelder sind da drinnen
-- ich lese diese in ein array ein
-- zuerst die 1.Zeile mit den Feldnamen
-- dann die anderen Zeilen mit den Daten
SERIENDRUCK-DATEN
------------------
Vorname;Familienname;Geburtsdatum;Geschlecht;LetzteBestellung;Saldo
"Franz";"Meier";"12.12.1912","M";"";"100,00"
VORLAGE
-------
<Vorname> <Familienname>
....
IF {MERGEFIELD LetzteBestellung} <> "" "Danke für Ihre letzte Bestellung vom <LetzteBestellung>"
DATEN EINLESEN
-------------------
a1=Split(p1,";")
count = 0
sPath = ConvertToURL("c:\mischdaten\Daten.txt")
oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oInputStream = oFileAccess.openFileRead(sPath)
oFileRead = createUnoService("com.sun.star.io.TextInputStream")
oFileRead.InputStream = oInputStream
oFileRead.Encoding = "ISO-8859-15"
oCursor = oDoc.Text.createTextCursor
Dim aPLH(500) --Platzhalter = FELDNAMEN
Dim aINH(500) --Inhalt = DATEN
Do While NOT oFileRead.IsEOF
sCurrentLine = oFileRead.readLine
aLines = Split(sCurrentLine,";")
'dim aPLH(UBound(aLines))
'dim aINH(UBound(aLines))
' --- Lesen der Feldnamen (werden im Text dann in Text in spitzen Klammern verwendet <FELDNAMEN>
For i = 0 to UBound(aLines)
aPLH(i) = "<"& aLines(i) & ">"
Next i
' -- weiterlesen zu den Daten, dort die Hochkomma entfernen
sCurrentLine = oFileRead.readLine
aLines = Split(sCurrentLine,";")
For i = 0 to UBound(aLines)
if left(aLines(i),1) = chr$(34) THEN
aINH(i) = Mid( aLines(i),2,Len(aLines(i)) -2)
end if
Next i
Loop
'-- dann werden alle Felder in der Vorlage welche mit <FELDNAME>
'-- aus dem Array aPLZ(i) übereinstimmen mit den Daten ersetzt
for i = 0 to uBound(aPLH())
trageEin(oDoc, aINH(i), aPLH(i)
next
........
REM diese Funktion ersetzt die Platzhalter im Dokument
sub trageEin(oDokument as object, sNeuTxt as string, sPlatzhalter as string)
oSuche = oDokument.createReplaceDescriptor()
with oSuche
.setSearchString(sPlatzhalter)
.setReplaceString(sNeuTxt)
end with
oDokument.replaceAll(oSuche)
end sub
-- BIN ICH NOCH ZU RETTEN ? --
Danke für jede Hilfe und lg
F.P
Hallo!
Da hab ich mir was angefangen!
ZWECK:
Seriendruckumstellung von MS-Word auf OO-Writer
WAS/WIE nache ich das
1) Seriendruckfelder ersetzen (siehe weiter unten )
funktioniert
2) In den Word Vorlagen gibt es auch Bedinungsfelder
IF {MERGEFIELD LetzteBestellung} <> "" .......
diese Felder muss ich vorher unter Feldbefehl,andere,..
als Variable deklarieren und kann sie nicht mehr wie unter Punkt 1 mit den Daten befüllen, da sollte dann auch die Bedingung ziehen.
Gibt es da eine andere Lösung??
3) Tabellen im Writer (in diesen Tabellen sind ebenfalls Seriendruckfelder. Im 1. Durchgang werden die Werte eingetragen und
angezeigt, dann muss ich aber auch noch die Berechnung aufrufen. Derzeit habe ich noch keine Möglichkeit gefunden im Makro
die Funktion "Felder aktualisieren = F9" aufzurufen
Gibt es da eine Lösung?
-- SERIENDRUCKFELDER ERSETZEN----
-- Daten für Seriendruck --
-- über 100 Datenfelder sind da drinnen
-- ich lese diese in ein array ein
-- zuerst die 1.Zeile mit den Feldnamen
-- dann die anderen Zeilen mit den Daten
SERIENDRUCK-DATEN
------------------
Vorname;Familienname;Geburtsdatum;Geschlecht;LetzteBestellung;Saldo
"Franz";"Meier";"12.12.1912","M";"";"100,00"
VORLAGE
-------
<Vorname> <Familienname>
....
IF {MERGEFIELD LetzteBestellung} <> "" "Danke für Ihre letzte Bestellung vom <LetzteBestellung>"
DATEN EINLESEN
-------------------
a1=Split(p1,";")
count = 0
sPath = ConvertToURL("c:\mischdaten\Daten.txt")
oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oInputStream = oFileAccess.openFileRead(sPath)
oFileRead = createUnoService("com.sun.star.io.TextInputStream")
oFileRead.InputStream = oInputStream
oFileRead.Encoding = "ISO-8859-15"
oCursor = oDoc.Text.createTextCursor
Dim aPLH(500) --Platzhalter = FELDNAMEN
Dim aINH(500) --Inhalt = DATEN
Do While NOT oFileRead.IsEOF
sCurrentLine = oFileRead.readLine
aLines = Split(sCurrentLine,";")
'dim aPLH(UBound(aLines))
'dim aINH(UBound(aLines))
' --- Lesen der Feldnamen (werden im Text dann in Text in spitzen Klammern verwendet <FELDNAMEN>
For i = 0 to UBound(aLines)
aPLH(i) = "<"& aLines(i) & ">"
Next i
' -- weiterlesen zu den Daten, dort die Hochkomma entfernen
sCurrentLine = oFileRead.readLine
aLines = Split(sCurrentLine,";")
For i = 0 to UBound(aLines)
if left(aLines(i),1) = chr$(34) THEN
aINH(i) = Mid( aLines(i),2,Len(aLines(i)) -2)
end if
Next i
Loop
'-- dann werden alle Felder in der Vorlage welche mit <FELDNAME>
'-- aus dem Array aPLZ(i) übereinstimmen mit den Daten ersetzt
for i = 0 to uBound(aPLH())
trageEin(oDoc, aINH(i), aPLH(i)
next
........
REM diese Funktion ersetzt die Platzhalter im Dokument
sub trageEin(oDokument as object, sNeuTxt as string, sPlatzhalter as string)
oSuche = oDokument.createReplaceDescriptor()
with oSuche
.setSearchString(sPlatzhalter)
.setReplaceString(sNeuTxt)
end with
oDokument.replaceAll(oSuche)
end sub
-- BIN ICH NOCH ZU RETTEN ? --
Danke für jede Hilfe und lg
F.P