2017-06-14 3 views
1

Ich versuche, den oberen Rand einer Tabelle in PowerPoint über OpenXml zu ändern, aber es hat nicht für mich funktioniert. Die Zelle hat derzeit einen linken, rechten und unteren Rand, aber wenn ich versuche, den unteren Rand zu kopieren und ihn zum oberen Rand hinzuzufügen, spiegelt PowerPoint die Änderung nicht wider.Wie fügt man einen Rahmen zu Zelle mit Openxml in PowerPoint hinzu?

Was muss ich ändern oder mache ich falsch, damit es funktioniert?

Ich habe derzeit den folgenden Code, um den unteren Rand zu kopieren und zu ersetzen.

BottomBorderLineProperties btp = (BottomBorderLineProperties)celda.TableCellProperties.BottomBorderLineProperties.CloneNode(true); 

    TopBorderLineProperties tbp = new TopBorderLineProperties() 
    { 
     Alignment = btp.Alignment, 
     CapType = btp.CapType, 
     CompoundLineType = btp.CompoundLineType, 
     MCAttributes = btp.MCAttributes, 
     Width = btp.Width 
    }; 

    foreach(OpenXmlElement element in btp.ChildElements) 
    { 
     tbp.Append(element.CloneNode(true)); 
    } 

    celda.TableCellProperties.TopBorderLineProperties = tbp; 

Vielen Dank!

PS: Sorry für mein Englisch

Antwort

0

Um die obere Grenze einer Zelle in der Mitte einer Powerpoint-Tabelle zu setzen, Sie zwei Schritte auszuführen haben:

Schritt 1: Stellen Sie den unteren Rand die Zelle direkt über der Zelle in Frage und

Schritt 2: die obere Grenze der Zelle in Frage gesetzt (Sie haben diesen Teil)

ich dies mit dem OpenXML Produktivitätswerkzeug bestimmt. Ich nahm eine einfache 1 Folie PowerPoint-Datei mit dem Namen Before.pptx mit einer Tabellenzelle, die die linken, unteren und rechten Grenzen hatte.

enter image description here

Dann habe ich die obere Grenze (mit Powerpoint 2016) und die Datei gespeichert als After.pptx. Ich benutzte dann das Produktivitätswerkzeug, um die 2 Akten zu differentieren und den C# Code zurückzuentwickeln, der benötigt wird, um Before.pptx wie After.pptx aussehen zu lassen. Der wichtige Code, den Sie benötigen, wird hier angezeigt:

 //STEP 1 CODE STARTS HERE 
     A.Table table1=graphicData1.GetFirstChild<A.Table>(); 

     A.TableRow tableRow1=table1.GetFirstChild<A.TableRow>(); 
     A.TableRow tableRow2=table1.Elements<A.TableRow>().ElementAt(1); 

     A.TableCell tableCell1=tableRow1.Elements<A.TableCell>().ElementAt(2); 

     A.TableCellProperties tableCellProperties1=tableCell1.GetFirstChild<A.TableCellProperties>(); 

     A.BottomBorderLineProperties bottomBorderLineProperties1 = new A.BottomBorderLineProperties(){ Width = 12700, CapType = A.LineCapValues.Flat, CompoundLineType = A.CompoundLineValues.Single, Alignment = A.PenAlignmentValues.Center }; 

     A.SolidFill solidFill1 = new A.SolidFill(); 
     A.SchemeColor schemeColor1 = new A.SchemeColor(){ Val = A.SchemeColorValues.Text1 }; 

     solidFill1.Append(schemeColor1); 
     A.PresetDash presetDash1 = new A.PresetDash(){ Val = A.PresetLineDashValues.Solid }; 
     A.Round round1 = new A.Round(); 
     A.HeadEnd headEnd1 = new A.HeadEnd(){ Type = A.LineEndValues.None, Width = A.LineEndWidthValues.Medium, Length = A.LineEndLengthValues.Medium }; 
     A.TailEnd tailEnd1 = new A.TailEnd(){ Type = A.LineEndValues.None, Width = A.LineEndWidthValues.Medium, Length = A.LineEndLengthValues.Medium }; 

     bottomBorderLineProperties1.Append(solidFill1); 
     bottomBorderLineProperties1.Append(presetDash1); 
     bottomBorderLineProperties1.Append(round1); 
     bottomBorderLineProperties1.Append(headEnd1); 
     bottomBorderLineProperties1.Append(tailEnd1); 
     tableCellProperties1.Append(bottomBorderLineProperties1); 
     //STEP 1 CODE ENDS HERE 


     //STEP 2 CODE STARTS HERE 
     A.TableCell tableCell2=tableRow2.Elements<A.TableCell>().ElementAt(2); 

     A.TableCellProperties tableCellProperties2=tableCell2.GetFirstChild<A.TableCellProperties>(); 

     A.BottomBorderLineProperties bottomBorderLineProperties2=tableCellProperties2.GetFirstChild<A.BottomBorderLineProperties>(); 

     A.TopBorderLineProperties topBorderLineProperties1 = new A.TopBorderLineProperties(){ Width = 12700, CapType = A.LineCapValues.Flat, CompoundLineType = A.CompoundLineValues.Single, Alignment = A.PenAlignmentValues.Center }; 

     A.SolidFill solidFill2 = new A.SolidFill(); 
     A.SchemeColor schemeColor2 = new A.SchemeColor(){ Val = A.SchemeColorValues.Text1 }; 

     solidFill2.Append(schemeColor2); 
     A.PresetDash presetDash2 = new A.PresetDash(){ Val = A.PresetLineDashValues.Solid }; 
     A.Round round2 = new A.Round(); 
     A.HeadEnd headEnd2 = new A.HeadEnd(){ Type = A.LineEndValues.None, Width = A.LineEndWidthValues.Medium, Length = A.LineEndLengthValues.Medium }; 
     A.TailEnd tailEnd2 = new A.TailEnd(){ Type = A.LineEndValues.None, Width = A.LineEndWidthValues.Medium, Length = A.LineEndLengthValues.Medium }; 

     topBorderLineProperties1.Append(solidFill2); 
     topBorderLineProperties1.Append(presetDash2); 
     topBorderLineProperties1.Append(round2); 
     topBorderLineProperties1.Append(headEnd2); 
     topBorderLineProperties1.Append(tailEnd2); 
     tableCellProperties2.InsertBefore(topBorderLineProperties1,bottomBorderLineProperties2); 

lief ich den Code oben gegen meine Before.pptx-Datei und die Grenze vollständig war.

enter image description here

In dem Bemühen, überprüfen zu verdoppeln, dass die beiden Schritte, die notwendig sind, sagte ich aus dem Schritt 1-Code und lief es gegen eine frische Version von Before.pptx Datei und die obere Grenze fehlte. Dies bestätigt das Problem, das Sie gesehen haben. Daher sind die zwei Schritte notwendig, um die eine Grenze zu zeichnen.

Verwandte Themen