打开XML MS Word表格标题行高度文本方向从左到右从上到下

时间:2014-04-20 17:09:32

标签: c# openxml

我正在使用Open XML SDK 2.5在Word文档中插入表格。我目前的问题是我的表标题的行高。它适用于从左到右顶部到底部LTTB的正常文本方向。但是,只要我将文本方向设置为从左到右从左到右BTLR,我的标题行就不会调整以适合单元格内容。

以下代码

void InsertTable(string[,] tableData, int numberOfRows, int numberOfColumns, string locationInDocument, string textDirectionHeadings)
            {
                using (WordprocessingDocument myDoc = WordprocessingDocument.Open(_newDocument, true))
                {
                    var docPart = myDoc.MainDocumentPart;
                    var doc = docPart.Document;

                    var table = new Table();
                    var tableBorderTop = new TopBorder();
                    var tableBorderBottom = new BottomBorder();
                    var tableBorderLeft = new LeftBorder();
                    var tableBorderRight = new RightBorder();
                    var tableBorderHorizontal = new InsideHorizontalBorder();
                    var tableBorderVertical = new InsideVerticalBorder();
                    var tableProperties = new TableProperties();
                    var borders = new TableBorders();

                    // Set Border Styles for Table
                    tableBorderTop.Val = BorderValues.Single;
                    tableBorderTop.Size = 6;
                    tableBorderBottom.Val = BorderValues.Single;
                    tableBorderBottom.Size = 6;
                    tableBorderLeft.Val = BorderValues.Single;
                    tableBorderLeft.Size = 6;
                    tableBorderRight.Val = BorderValues.Single;
                    tableBorderRight.Size = 6;
                    tableBorderHorizontal.Val = BorderValues.Single;
                    tableBorderHorizontal.Size = 6;
                    tableBorderVertical.Val = BorderValues.Single;
                    tableBorderVertical.Size = 6;

                    // Assign Border Styles to Table Borders
                    borders.TopBorder = tableBorderTop;
                    borders.BottomBorder = tableBorderBottom;
                    borders.LeftBorder = tableBorderLeft;
                    borders.RightBorder = tableBorderRight;
                    borders.InsideHorizontalBorder = tableBorderHorizontal;
                    borders.InsideVerticalBorder = tableBorderVertical;

                    // Append Border Styles to Table Properties
                    tableProperties.Append(borders);

                    // Assign Table Properties to Table
                    table.Append(tableProperties);

                    //Adds the Table Headings for each Column

                    var tableRowHeader = new TableRow();
                    tableRowHeader.Append(new TableRowHeight() { HeightType = HeightRuleValues.Auto });

                    for (int i = 0; i < numberOfColumns; i++)
                    {
                        var tableCellHeader = new TableCell();

                        //Assign Font Properties to Run
                        var runPropHeader = new RunProperties();
                        runPropHeader.Append(new Bold());
                        runPropHeader.Append(new Color() { Val = "000000" });

                        //Create New Run
                        var runHeader = new Run();
                        //Assign Font Properties to Run
                        runHeader.Append(runPropHeader);

                        var columnHeader = new Text();
                        //Assign the Pay Rule Name to the Run
                        columnHeader = new Text(tableData[0, i]);

                        runHeader.Append(columnHeader);

                        //Create Properties for Paragraph
                        var justificationHeader = new Justification();
                        justificationHeader.Val = JustificationValues.Left;

                        var paraPropsHeader = new ParagraphProperties(justificationHeader);
                        SpacingBetweenLines spacing = new SpacingBetweenLines() { Line = "240", LineRule = LineSpacingRuleValues.Auto, Before = "0", After = "0" };
                        paraPropsHeader.Append(spacing);

                        var paragraphHeader = new Paragraph();

                        paragraphHeader.Append(paraPropsHeader);
                        paragraphHeader.Append(runHeader);
                        tableCellHeader.Append(paragraphHeader);

                        var tableCellPropertiesHeader = new TableCellProperties();
                        var tableCellWidthHeader = new TableCellWidth();

                        tableCellPropertiesHeader.Append(new Shading() { Val = ShadingPatternValues.Clear, Color = "auto", Fill = "#C0C0C0" });

                        var textDirectionHeader = new TextDirection();
                        if (textDirectionHeadings == "BTLR")
                        {
                            textDirectionHeader.Val = TextDirectionValues.BottomToTopLeftToRight;
                        }
                        if (textDirectionHeadings == "LRTB")
                        {
                            textDirectionHeader.Val = TextDirectionValues.LefToRightTopToBottom;
                        }

                        tableCellPropertiesHeader.Append(textDirectionHeader);

                        tableCellWidthHeader.Type = TableWidthUnitValues.Auto;

                        tableCellPropertiesHeader.Append(tableCellWidthHeader);


                        tableCellHeader.Append(tableCellPropertiesHeader);

                        tableRowHeader.Append(tableCellHeader);

                    }

                    tableRowHeader.AppendChild(new TableHeader());

                    table.Append(tableRowHeader);

                    //Create New Row in Table for Each Record
                    int r = 1;
                    for (int a = 0; a < (numberOfRows - 1); a++)
                    {
                        var tableRow = new TableRow();

                        for (int i = 0; i < numberOfColumns; i++)
                        {
                            var propertyText = tableData[r, i];

                            var tableCell = new TableCell();

                            //Assign Font Properties to Run
                            var runProp = new RunProperties();
                            runProp.Append(new Bold());
                            runProp.Append(new Color() { Val = "000000" });


                            //Create New Run
                            var run = new Run();
                            //Assign Font Properties to Run
                            run.Append(runProp);

                            //Assign the text to the Run
                            var text = new Text(propertyText);
                            run.Append(text);

                            //Create Properties for Paragraph
                            var justification = new Justification();
                            justification.Val = JustificationValues.Left;
                            var paraProps = new ParagraphProperties(justification);

                            var paragraph = new Paragraph();

                            paragraph.Append(paraProps);
                            paragraph.Append(run);
                            tableCell.Append(paragraph);

                            var tableCellProperties = new TableCellProperties();
                            var tableCellWidth = new TableCellWidth();

                            tableCellWidth.Type = TableWidthUnitValues.Auto;

                            tableCellProperties.Append(tableCellWidth);
                            tableCell.Append(tableCellProperties);
                            tableRow.Append(tableCell);
                        }
                        r = r + 1;
                        table.Append(tableRow);
                    };


                    var res = from bm in docPart.Document.Body.Descendants<BookmarkStart>()
                              where bm.Name == locationInDocument
                              select bm;
                    var bookmark = res.SingleOrDefault();
                    var parent = bookmark.Parent; // bookmark's parent element
                    Paragraph newParagraph = new Paragraph();
                    parent.InsertAfterSelf(newParagraph);
                    if (bookmark != null)
                    {
                        newParagraph.InsertBeforeSelf(table);
                    }

                }
            }

0 个答案:

没有答案