| 

.NET C# Java Javascript Exception

3
Hi,

ich schreibe atm an einem Addin für Word. Dieses legt ein ContentControl (wdContentControlRichText) an und fügt eine Tabelle hinzu. Leider ist vor und nach der Tabelle jeweils ein Zeilenumbruch, den ich selbst nicht hinzugefügt habe. Ich habe schon versucht diese über den Range des Controls zu löschen. Aber irgendwie hat das nicht gefruchtet. Ich habe da schon einige Stunden reingesteckt und komm nicht weiter.

Code zum Hinzufügen:
var range = Globals.ThisAddIn.Application.Selection.Range;
var contentControl = range.Document.ContentControls.Add(WdContentControlType.wdContentControlRichText, range);
var table = contentControl.Range.Tables.Add(contentControl.Range, 10, 2, WdDefaultTableBehavior.wdWord9TableBehavior);
table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
table.PreferredWidth = 100;
table.Range.Font.Name = "Courier New";
var caption = "Beschriftung";
table.Range.InsertCaption(WdCaptionLabelID.wdCaptionTable, caption, false, WdCaptionPosition.wdCaptionPositionBelow);


Das Ergebnis ist folgendes:


Wie bekomme ich diese 2 Zeilenumbrüche weg?

Danke.

mfg sv
10.03.2011
Gast
31 2
Ich bin mir nicht sicher, ob die überhaupt weggehen. Wenn ich mich richtig erinnere, Arbeitet Word selbst fast ähnlich. Wenn Du dort 2 Tabellen erstellst, sind diese erst einmal mit einer Leerzeile getrennt. Entfernst Du die manuell, hängen beide Tabellen danach so zusammen, das Du sie nachträglich nicht (oder nur schwer) wieder auseinander bekommst. Zumindest ging mir das mit Word häufiger so. Vielleicht ist das "behaviour by design".
Jens Duczmal 10.03.2011
Also per Hand bekomme ich die weg. Nur automatisiert nicht :(
– Gast 11.03.2011
1 Antwort
0
Folgender "Hack" hilt hier. Lösung möchte ich das lieber nicht nennen :)
Nachdem ich auch nicht feststellen konnte, woher die Leerzeile zu Beginn stammt und auch mehrfach erfolglos versucht habe, den Range zu löschen, habe ich kurzerhand ein Makro aufgezeichnet und die Stellen per Hand entfernt. Erschien mir am einfachsten, ist aber weder elegant noch sicher.

Du fügst folgenden Code am Ende ein:

Selection.MoveUp (Unit:=wdLine, Count:=1);
Selection.Delete (Unit:=wdCharacter, Count:=1);
Selection.EndKey (Unit:=wdStory);
Selection.TypeBackspace();


Es kann sein, das die Syntax nicht korrekt ist, da ich es direkt in Word 2007 mit VBA versucht habe. Hier sicherheitshalber mein vollständiges Makro in Word:

Sub TestMakro()
Dim range As range
Dim ctrl As ContentControl
Dim table As table
Dim caption As String

Set range = Application.Selection.range
Set ctrl = range.Document.ContentControls.Add(WdContentControlType.wdContentControlRichText, range)
Set table = ctrl.range.Tables.Add(ctrl.range, 10, 2, WdDefaultTableBehavior.wdWord9TableBehavior)

table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent
table.PreferredWidth = 100
table.range.Font.Name = "Courier New"

caption = "Beschriftung"
table.range.InsertCaption WdCaptionLabelID.wdCaptionTable, caption, False, WdCaptionPosition.wdCaptionPositionBelow

'// Hack
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.EndKey Unit:=wdStory
Selection.TypeBackspace
End Sub
15.03.2011
Jens Duczmal 2,6k 1 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH