//public static void DuplicateTable(Body body, int tableIndex)
        //{
        //    Table tb1 = body.Elements<Table>().ElementAt(tableIndex);
        //    //var elementIndex = body.ToList().IndexOf(tb1);
        //    Table tb2 = (Table)tb1.CloneNode(true);
        //    Paragraph p = new Paragraph(new Run(new Break() { Type = BreakValues.Page }));

        //    body.InsertAfter(p, tb1);
        //    body.InsertAfter(tb2, p);

        //}
        //private static Paragraph saparetor = new Paragraph();
        //public static void DuplicateTable(Body body, int tableIndex, OpenXmlElement saparator)
        //{

        //}



        //向右插入資料並保持原格式
        public static void TableColumnInsert(Table tb, DataTable data)
        {
            int       widthCount = 0;
            TableGrid tg         = tb.Elements <TableGrid>().First();

            for (int j = 0; j < data.Rows.Count; j++)
            {
                DataRow    dr = data.Rows[j];
                GridColumn gc = (GridColumn)tg.Elements <GridColumn>().Last().CloneNode(true);
                widthCount += Convert.ToInt32(gc.Width.Value);
                tg.AppendChild <GridColumn>(gc);
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    var row     = tb.Elements <TableRow>().ElementAt(i);
                    var newCell = (TableCell)(row.Elements <TableCell>().LastOrDefault <TableCell>() ?? new TableCell()).CloneNode(true);

                    var newParagraph = newCell.Elements <Paragraph>().FirstOrDefault() ?? new Paragraph();

                    Run newRun = (Run)(newParagraph.Elements <Run>().FirstOrDefault <Run>() ?? new Run()).CloneNode(true);

                    Text text = newRun.Elements <Text>().FirstOrDefault() ?? new Text();

                    if (newParagraph.Parent == null)
                    {
                        newCell.AppendChild <Paragraph>(newParagraph);
                    }

                    if (text.Parent == null)
                    {
                        newRun.AppendChild <Text>(text);
                    }

                    text.Text = dr[i].ToString();
                    newParagraph.RemoveAllChildren <Run>();
                    newParagraph.AppendChild <Run>(newRun);
                    row.AppendChild <TableCell>(newCell);
                }
            }

            //設定新的寬度
            var tbW = tb.Elements <TableProperties>().First <TableProperties>().Elements <TableWidth>().First <TableWidth>();

            tbW.Width.Value = (Convert.ToInt32(tbW.Width.Value) + widthCount).ToString();
        }
Esempio n. 2
0
        TableWidthInfo InitializeTableWidthInfo(WordDocHolder docHolder, Table table)
        {
            TableWidthInfo  widthInfo = new TableWidthInfo();
            TableProperties tProp     = table.GetFirstChild <TableProperties>();

            if (tProp != null)
            {
                if (tProp.TableWidth != null)
                {
                    widthInfo.TableWidthInPixels = TableWidthInfo.TryReadWidth(
                        tProp.TableWidth.Width,
                        tProp.TableWidth.Type,
                        docHolder.DocumentPageSizeInPixels);
                }

                if (tProp.TableIndentation != null)
                {
                    widthInfo.TableIndentionInPixels = TableWidthInfo.TryReadWidth(
                        tProp.TableIndentation.Width,
                        tProp.TableIndentation.Type,
                        docHolder.DocumentPageSizeInPixels);
                }
                widthInfo.TableIndentionInPixels += docHolder.DocumentPageLeftMaginInPixels;
            }
            else
            {
                widthInfo.TableWidthInPixels = docHolder.DocumentPageSizeInPixels;
            }
            TableGrid tGrid = table.GetFirstChild <TableGrid>();

            if (tGrid != null)
            {
                widthInfo.ColumnWidths = new List <int>();
                foreach (var col in tGrid.Elements <GridColumn>())
                {
                    widthInfo.ColumnWidths.Add(
                        TableWidthInfo.TryReadWidth(
                            col.Width,
                            TableWidthUnitValues.Dxa,
                            widthInfo.TableWidthInPixels));
                }
            }
            return(widthInfo);
        }