2012-06-25 3 views
1

docx 파일에 행이 하나있는 테이블이 있는데 일부 행을 추가하려고합니다. 첫 번째 기존 행의 경우 GridSpan을 3으로 설정합니다. 다음 행에서 두 행만 추가하고 싶다면 그림과 같은 결과가 나타납니다. 새 행 너비를 테이블 너비에 고정하는 방법은 무엇입니까? 새 행에 하나의 셀만 추가하면됩니다.Open XML SDK를 사용하여 Word에서 셀 너비 수정

enter image description here

내 코드 :

private static TableRow AddRow(WordprocessingDocument docx, Table tbl, int cellsQuantity) 
     { 
      TableRow newRow = new TableRow(); 

      var firstCell = tbl.Descendants<TableRow>().First() 
        .Descendants<TableCell>().First(); 

      firstCell.Append(new TableCellProperties(new GridSpan() { Val = 3 })); 

      for (int i = 0, max = cellsQuantity; i < max; i++) 
      { 
       // TableCellProperties tcp = new TableCellProperties(new TableCellWidth() { Width = firstCell.TableCellProperties.TableCellWidth.Width, Type = firstCell.TableCellProperties.TableCellWidth.Type }); 
       TableCell cell = new TableCell(new Paragraph(new Run(new Text("test")))); 
       newRow.AppendChild(cell); 
      } 

      tbl.Append(newRow); 

      return newRow; 
     } 

답변

1

좋아, 나는 것은 나는 그것을 :)

private static TableRow AddRow(WordprocessingDocument docx, Table tbl, int cellsQuantity) 
     { 
      TableRow newRow = new TableRow(); 

      var grid = tbl.Descendants<TableGrid>().First(); 

      var firstCell = tbl.Descendants<TableRow>().First() 
        .Descendants<TableCell>().First(); 

      firstCell.Append(new TableCellProperties(new GridSpan() { Val = 4 })); 

      int ind = 0; 
      int[] widthPerColumn = new int[] { 3070, 1536, 1535, 3071 }; 
      grid.Descendants<GridColumn>().ToList().ForEach(x => 
      { 
       x.Width = widthPerColumn[ind++].ToString(); 
      }); 

      int[] gridSpan = null; 
      switch (cellsQuantity) 
      { 
       case 4: 
        gridSpan = new int[] { 1, 1, 1, 1 }; 
        break; 
       case 3: 
        gridSpan = new int[] { 1, 2, 1 }; 
        break; 
       case 2: 
        gridSpan = new int[] { 2, 2 }; 
        break; 
       case 1: 
        gridSpan = new int[] { 4 }; 
        break; 
       default: 
        throw new InvalidOperationException("The cellsQuantity variable must have a value from [1,4] range"); 
      } 

      for (int i = 0, max = cellsQuantity; i < max; i++) 
      { 
       TableCellProperties tcp = new TableCellProperties(new GridSpan() { Val = gridSpan[i] }); 
       TableCell cell = new TableCell(tcp, new Paragraph(new Run(new Text("test")))); 
       newRow.AppendChild(cell); 
      } 

      tbl.Append(newRow); 

      return newRow; 
     } 
0
TableCell tCell = new TableCell(); 

tCell.Append(new TableCellProperties(
    new GridSpan { Val = table.LastChild.ChildElements.Count }, 
    new Justification { Val = JustificationValues.Right }) 
); 
있어