C# 如何在PowerPoint中使用openxml向单元格添加边框?

C# 如何在PowerPoint中使用openxml向单元格添加边框?,c#,powerpoint,openxml,openxml-sdk,C#,Powerpoint,Openxml,Openxml Sdk,我正试图通过OpenXml更改PowerPoint中表格的上边框,但它对我不起作用。单元格当前有左、右和下边框,但当我尝试复制下边框并将其添加到上边框时,PowerPoint不会反映更改 我需要改变什么,或者我做错了什么才能让它工作 我目前有以下代码来复制底部边框并替换它 BottomBorderLineProperties btp = (BottomBorderLineProperties)celda.TableCellProperties.BottomBorderLinePropert

我正试图通过OpenXml更改PowerPoint中表格的上边框,但它对我不起作用。单元格当前有左、右和下边框,但当我尝试复制下边框并将其添加到上边框时,PowerPoint不会反映更改

我需要改变什么,或者我做错了什么才能让它工作

我目前有以下代码来复制底部边框并替换它

   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:对不起,我的英语

< P>为了在PowerPoint表的中间设置一个单元格的顶部边框,必须完成2个步骤:

步骤1:将单元格的底部边框直接设置在相关单元格的上方,然后

步骤2:设置相关单元格的上边框(您拥有该部分)

我通过使用OpenXML生产力工具确定了这一点。我制作了一个名为
Before.pptx
的简单单幻灯片PowerPoint文件,其中的表格单元格有左、下和右边框

然后我添加了上边框(使用PowerPoint 2016),并将文件保存为.pptx之后的
。然后,我使用生产力工具来区分这两个文件,并对C代码进行反向工程,使.pptx
之前的
看起来像.pptx
之后的
。此处显示您需要的重要代码:

        //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);
//第一步代码从这里开始
A.表table1=graphicData1.GetFirstChild


为了仔细检查这两个步骤是否必要,我注释掉了步骤1代码,并在.pptx
文件之前的新版本上运行了它,但缺少了上边框。这验证了您看到的问题。因此,这两个步骤是绘制一个边框所必需的。

< P>为了在PowerPoint表的中间设置一个单元格的顶部边框,必须完成2个步骤:

步骤1:将单元格的底部边框直接设置在相关单元格的上方,然后

步骤2:设置相关单元格的上边框(您拥有该部分)

我通过使用OpenXML生产力工具确定了这一点。我制作了一个名为
Before.pptx
的简单单幻灯片PowerPoint文件,其中的表格单元格有左、下和右边框

然后我添加了上边框(使用PowerPoint 2016),并将文件保存为.pptx之后的
。然后,我使用生产力工具来区分这两个文件,并对C代码进行反向工程,使.pptx
之前的
看起来像.pptx
之后的
。此处显示您需要的重要代码:

        //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);
//第一步代码从这里开始
A.表table1=graphicData1.GetFirstChild

为了仔细检查这两个步骤是否必要,我注释掉了步骤1代码,并在.pptx
文件之前的新版本上运行了它,但缺少了上边框。这验证了您看到的问题。因此,绘制一个边界需要两个步骤