tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
267
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2011
    Beiträge
    9
    Hallo Programmierasse,

    Ich habe folgendes Problem:

    Ich möchte in einem Worddokument nachträglich ein Textformularfeld bzw. dessen Inhalt
    als Index für ein Indexverzeichnis markieren. Die Daten die dort eingetragen werden, werden ja an die Methode übergeben, daher müssen sie nicht extra aus dem Feld wieder geholt werden

    Mein Programm läuft so ab das es zunächst alle Textformularfelder ausfüllt und dann
    bei einem bestimmten Feld "number" den Inhalt als Index markieren soll.
    In dem Feld steht eine Nummer mit 2 Buchstaben und einigen Zahlen dahinter

    Bsp.: AB0212322 daraus soll der Index (so wie er als Code im Word steht)

    { XE "AB:AB0212322" } werden
    also die Buchstaben als Haupteintrag und der gesamte Eintrag als Untereintrag

    bis jetzt hab ich nur Themen zum Inhaltsverzeichnis gefunden die mir in diesem Fall null helfen gefunden.
    Vielleicht hat einer von euch eine Idee wie das richtig funktioniert.

    Hier die Methode die dann das ganze tun soll:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    public void SetField(string strName, string strValue)
    {
    try
    {
    object oFieldname = strName;
    wdDoc.FormFields.get_Item(ref oFieldname).Result = strValue;
    if (oFieldname == "number")
    {
    //wdDoc.GoTo(ref missing, ref oFieldname, ref missing, ref oFieldname).Paragraphs.Add(ref missing);
    //appWord.CommandBars.ActionControl
     
    //strValue += " { XE \"" + strValue.Substring(0, 2) + ":" + strValue + "\" }";
    -> Hier soll der Index markiert werden <-
    }
     
    }
    catch (Exception ex)
    {
    MessageBox.Show(strName + ":" + System.Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }
     

  2. #2
    Registriert seit
    Jul 2011
    Beiträge
    9
    Ich habs nun doch selber hin bekommen.
    An die die Helfen wollten und auch noch keine Lösung hatten möchte ich trotzdem ein Dankeschön aussprechen.

    Die Lösung des Problems ist eigentlich recht simpel wenn man es weiß.
    Ich bin zufälig auf WordDocument.Indexes gestossen und damit lässt sich das ganze realisieren

    Und um anderen die verzweifelt danach Suchen oder das ganze ebenfalls implementieren wollen zu zeigen wie es geht, hier nun der funktionierende Quelltext:

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    // Diese Methode setzt den übergebenen Text oder Wert in das Platzhalterfeld im Word Dokument
            public void SetField(string strName, string strValue)
            {
                try
                {
                    object oFieldname = strName;                        // umspeichern des Feldnamen in ein objekt
                    if (strValue == "-") { strValue = "noEntry"; }      // abfragen ob strValue per def leer ist 
                    object entry = strValue.Substring(0,2) + ":" + strValue;// einspeichern des Index String
                    if (oFieldname == "number" || oFieldname == "family")// Überprüfen ob das angesprochene Feld 
                    {                                                    // number oder family heisst
                        object missing = System.Reflection.Missing.Value;// wenn ja dann soll 
                 
                    Word.Range range = appWord.ActiveDocument.Content;   // die definierte range gefunden werden
                    Word.Find find = range.Find;
                    find.ClearFormatting();                             // Suche ohne Formate zu berücksichtigen
                    find.Text = "rebmun";                               // Finde das Wort der Variable findText im Text
                    if (oFieldname == "family") { find.Text = "ylimaf"; }// wenn das Feld family heisst soll nach ylimaf
                    while (find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing))// suche solange wie du findest
                    {
                        if (strValue == "noEntry") {  }                 // wenn strValue leer ist soll nichts geschehen
                        else                                            // Andernfalls soll der Index markiert werden
                        {
                            wdDoc.Indexes.MarkEntry(range, ref entry, ref missing, ref missing // Index mit entry markieren
                                                       , ref missing, ref missing, ref missing,// und an die gefundene
                                                       ref missing, ref missing);              // range setzen
                        }
                        range.Text = "";                                // Ersetze alle Treffer durch "strValue"
                    }
                  
                    }
                    if (strValue == "noEntry") { }                      // Wenn strValue leer ist nichts
                    else                                                // Ansonsten strValue in das Textformularfeld
                    {                                                   // eintragen
                        wdDoc.FormFields.get_Item(ref oFieldname).Result = strValue;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(strName + ":" + System.Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    mfG
     

Ähnliche Themen

  1. Aus C# in Word Indizes markieren
    Von FutureProgrammer im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 29.07.11, 11:59
  2. Word 2003 - Alles markieren (Text, Textfelder, Formen, etc.)
    Von WiZdooM im Forum Office-Anwendungen
    Antworten: 4
    Letzter Beitrag: 19.07.10, 11:14
  3. [MySQL] Indizes - wie und wo
    Von groessenwahnsinniger im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 07.05.05, 11:19
  4. wieviele indizes pro db?
    Von Rios im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 10.07.02, 11:46
  5. Indizes in MDB
    Von Paranoia im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 07.05.02, 13:52

Stichworte