2017-06-14 82 views
1

我想通過OpenXml在PowerPoint中更改表格的頂部邊框,但它沒有爲我工作。單元格當前有一個左,右和底部邊框,但是當我嘗試複製底部邊框並將其添加到頂部邊框時,PowerPoint不反映更改。如何在PowerPoint中使用openxml將邊框添加到單元格中?

我需要改變什麼或者我做錯了什麼使它工作?

我目前有以下代碼複製下邊框並將其替換。

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; 

謝謝!

PS:對不起,我的英語

回答

0

爲了設置一個單元格的上邊框在PowerPoint表的中間,你必須完成兩個步驟:

第1步:設置在底邊框直接有關的細胞和上述細胞的

第2步:設置在該小區的上邊框(你有那部分)

我使用的OpenXML生產力工具來確定這一點。我用一個簡單的1幻燈片PowerPoint文件命名爲Before.pptx,其中一個表格單元格具有左邊框,右邊框和右邊框。

enter image description here

然後,我添加上邊框(使用PowerPoint 2016)和將文件保存爲After.pptx。然後,我使用生產力工具來分析這兩個文件,並對Before.pptx看起來像After.pptx所需的C#代碼進行反向工程。您所需要的重要的代碼顯示在這裏:

 //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); 

我跑上面的代碼對我的Before.pptx文件和邊框完成。

enter image description here

在努力仔細檢查,這兩個步驟是必須的,我註釋掉步驟1的代碼並運行它反對Before.pptx文件的最新版本和上邊框不見了。這驗證了你所看到的問題。因此,繪製一個邊界需要兩個步驟。

相關問題