Word Löschen bestimmter Zeilen

  • So liebe Gemeinde.

    ich habe eine Word datei in dieser wird txt ersetzt, das funktioniert auch.
    der txt der eingesetzt wird kommt aus einer Array und um so größer das Array um so mehr zeilen werden benötigt nun ist der Ort an dem die
    Txt eingepflegt werden in der mitte der Datei und somit verruscht der folgende txt natürlich nun möchte ich dies verhindern.
    ich brache also die Möglichkeit eine Zeile nach dem einzusetztenden Txt zu löschen.

    damit die TxtAbstände des fortlaufenden txt erhlten bleibt.

    Beispiel:

    [autoit]

    Func _DokumentenWrite ($MtgNr)
    Local $oWord = _Word_Create(Default,1)
    Local $oDoc = _Word_DocOpen($oWord, $Doc_Vertrag_Neu, Default, Default, True)

    [/autoit][autoit][/autoit][autoit]

    Local $Strg_Anrede = IniRead ($Ini_DB, $MtgNr, "Anrede", "")
    Local $Strg_Titel = IniRead ($Ini_DB, $MtgNr, "Titel", "")
    Local $Strg_V_Name = IniRead ($Ini_DB, $MtgNr, "Vorname", "")
    Local $Strg_N_Name = IniRead ($Ini_DB, $MtgNr, "Name", "")
    Local $Strg_GebDate = IniRead ($Ini_DB, $MtgNr, "Geburtsdatum", "")
    Local $Strg_Str_Nr = IniRead ($Ini_DB, $MtgNr, "StrasseHsNr", "")
    Local $Strg_Plz = IniRead ($Ini_DB, $MtgNr, "Plz", "")
    Local $Strg_Ort = IniRead ($Ini_DB, $MtgNr, "Ort", "")
    Local $Strg_Telefon = IniRead ($Ini_DB, $MtgNr, "Telefon", "")
    Local $Strg_eMail = IniRead ($Ini_DB, $MtgNr, "eMail", "")
    Local $Strg_MtgSeit = IniRead ($Ini_DB, $MtgNr, "Eintrittam", "")

    [/autoit][autoit][/autoit][autoit]

    _Word_DocFindReplace ($oDoc, "%Anrede%", $Strg_Anrede)
    _Word_DocFindReplace ($oDoc, "%Titel%", $Strg_Titel)
    _Word_DocFindReplace ($oDoc, "%NAME%", $Strg_N_Name)
    _Word_DocFindReplace ($oDoc, "%V_NAME%", $Strg_V_Name)
    _Word_DocFindReplace ($oDoc, "%STRASSE%", $Strg_Str_Nr)
    _Word_DocFindReplace ($oDoc, "%PLZ%", $Strg_Plz)
    _Word_DocFindReplace ($oDoc, "%ORT%", $Strg_Ort)
    _Word_DocFindReplace ($oDoc, "%Geb_Date%", $Strg_GebDate)
    _Word_DocFindReplace ($oDoc, "%Tel%", $Strg_Telefon)
    _Word_DocFindReplace ($oDoc, "%EMAIL%", $Strg_eMail)
    _Word_DocFindReplace ($oDoc, "%Mtg_NR%", $MtgNr)
    _Word_DocFindReplace ($oDoc, "%Mtg_SEIT%", $Strg_MtgSeit)

    [/autoit][autoit][/autoit][autoit]

    ### KursInfos
    Local $Strg_Kurse = IniRead ($Ini_DB, $MtgNr, "Kurse", "")
    Local $AR_Kurse = StringSplit ($Strg_Kurse, $TR_Var, 1)
    ;~ _ArrayDisplay ($AR_Kurse)
    ;~ _Word_DocTableWrite($oRange, $asArray, 0)
    Local $Kurse_2_Doc = ""
    If $AR_Kurse[0] = 1 And $AR_Kurse[1] = "Flatrate" Then
    $Kurse_2_Doc = $AR_Kurse[1]
    Else
    For $1 = 1 to $AR_Kurse[0]
    If StringLeft ($AR_Kurse[$1],1) = " " Then $AR_Kurse[$1] = StringTrimLeft ($AR_Kurse[$1],1)
    Local $SP_STRG_Kurs = StringSplit ($AR_Kurse[$1], $Tr)
    ;~ _ArrayDisplay ($SP_STRG_Kurs)
    Local $Zeile_Kurs = $SP_STRG_Kurs[3]
    Local $Len = StringLen ($Zeile_Kurs)
    If $Len < 24 Then
    ;~ MsgBox (0,$Len,"kleiner")
    $Kurse_2_Doc = $Kurse_2_Doc & @TAB & $SP_STRG_Kurs[3] & @TAB & @TAB & @TAB & $SP_STRG_Kurs[4] & " " & $SP_STRG_Kurs[5] & @TAB & @CRLF
    Else
    ;~ MsgBox (0,$Len,"Größer")
    $Kurse_2_Doc = $Kurse_2_Doc & @TAB & $SP_STRG_Kurs[3] & @TAB & @TAB & $SP_STRG_Kurs[4] & " " & $SP_STRG_Kurs[5] & @TAB & @CRLF
    EndIf
    Next
    EndIf

    [/autoit][autoit][/autoit][autoit]

    _Word_DocFindReplace ($oDoc, "%Kurse%", $Kurse_2_Doc)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    #### VertragsInfo
    Local $Strg_LaufZeit = IniRead ($Ini_DB, $MtgNr, "LaufZeit", "")
    _Word_DocFindReplace ($oDoc, "%M_Preis%", "")
    _Word_DocFindReplace ($oDoc, "%12% ", $Strg_LaufZeit)

    [/autoit][autoit][/autoit][autoit]

    ### Datum
    _Word_DocFindReplace ($oDoc, "%ERSTELL_DATE%", @MDAY & "." & @MON & "." & @YEAR)
    _Word_DocSaveAs ($oDoc, @ScriptDir & "" & $MtgNr & ".doc", "doc")
    ;~ _Word_DocClose ($oDoc)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von DaveTDancer (12. Mai 2014 um 19:15)

  • Kannst Du bitte einen Screenshot posten in dem Du markierst,, welche Zeilen Du konkret gelöscht haben möchtest?

    • Offizieller Beitrag

    Wie ich das sehe, verwendest du als variable Daten Adressen. Da ist es doch günstiger, wenn du dein Dokument auch mit entsprechenden Datenfeldern ausstattest. Dann kannst du die Datenfelder direkt setzen ohne Suchen & Ersetzen.
    Wenn du sowas noch nicht gemacht hast - schau dir in Word die Serienbrief-Funktion an und lass das mal mit dem Wizzard ausführen. Das sollte beim Verständnis helfen.

  • zum verständnis also die suche findet nur statt damit die Position Fix ist, und wie geschreiben kan das Array unterschiedlich viele Zeilen Schreiben.
    Die Zeilen die Gelöscht werden sollen sind genau die um die der Txt erweitert werden soll.

    BS. Array hat 5 zeilen heißt das der Txt um 4 zeilen läger wird dadurch rutscht alles was vorher in der letzten Zeile auf diese Seite war natürlich auf die nächste Seite.
    das soll verhindert werden.

    die stelle an der das Array eingesetzt wird ist natürlich durch eine Variable definiert ich muss also nur wissen wie ich eine Zeile direkt löschen kann, also nich leer machen sonder sie soll entfernt werden so das der darunterliegend txt um eine zeile hochrutscht. und das halt genau eine zeile unter der zeile die ich gerade beschrieben habe.

    wer mir hier die richtige Info oder einen weiterführenden Tip liefert, dem wäre ich sehr dankbar.  :D

  • habe glaube ich eine mögliche Lösung gefunden

    die zeile mit dem letzten Inhalt wird Kopiert und dann per array zeile löschen und dann per Paste wieder einsetzten


    $oRange = _Word_DocRangeSet($oDoc, -1, Default, Default)
    $oRangeFound.copy
    $oRangeFound.Select

    $oRangeFound.delete
    $oRangeFound.paste

    Danke euch mal wieder für die Unterstützung.