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