I tried to do merge the table cell in word using openxml.Below are my code,but it does not perform the outcome that i want(merge table cell). Can anyone help, Thanks in advance.
Option Compare Text
Option Explicit On
Option Infer On
Option Strict On
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Wordprocessing
Public Class Form1
Const fileName As String = "C:\Users\ericc\Desktop\test for new task\123.docx"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Using document = WordprocessingDocument.Open(fileName, True)
Dim doc = document.MainDocumentPart.Document
' Create an empty table.
Dim table As New Table()
' Create a TableProperties object and specify its border information.
Dim tblProp As New TableProperties(New TableBorders(
New TopBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1},
New BottomBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1},
New LeftBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1},
New RightBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1},
New InsideHorizontalBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1},
New InsideVerticalBorder() With {.Val = New EnumValue(Of BorderValues)(BorderValues.Single), .Size = 1}))
' Append the TableProperties object to the empty table.
table.AppendChild(Of TableProperties)(tblProp)
' Create a row.
Dim tr As New TableRow()
' Create a cell.
Dim tc1 As New TableCell()
Dim TableCellproperties As TableCellProperties = New TableCellProperties
' Specify the width property of the table cell.
tc1.Append(New TableCellProperties(New TableCellWidth()))
tc1.Append(New TableCellProperties(New HorizontalMerge() With {.Val = MergedCellValues.Restart}))
' Specify the table cell content.
tc1.Append(New Paragraph(New Run(New Text("some text"))))
' Append the table cell to the table row.
tr.Append(tc1)
' Create a second table cell by copying the OuterXml value of the first table cell.
Dim tc2 As New TableCell(tc1.OuterXml)
' Append the table cell to the table row.
tr.Append(tc2)
' Append the table row to the table.
table.Append(tr)
' Append the table to the document.
doc.MainDocumentPart.Document.Body.Append(table)
End Using
Process.Start(fileName)
End Sub
End Class
The HorizontalMerge has to be set for each cell in the table.
For example to create a single row table with the first cell being a regular one and the second one being merged from 2 cells, set the HorizontalMerge of cell1 to Restart, cell2 to Restart and cell3 to Continue.
In C# that looks like
Table table = New Table();
TableRow row = new TableRow();
TableCell cell1 = new TableCell();
cell1.TableCellProperties = new TableCellProperties();
cell1.TableCellProperties.HorizontalMerge = new HorizontalMerge { Val = MergedCellValues.Restart };
// Add a content paragraph.
row.Append(cell1);
TableCell cell2 = new TableCell();
cell2.TableCellProperties = new TableCellProperties();
cell2.TableCellProperties.HorizontalMerge = new HorizontalMerge { Val = MergedCellValues.Restart };
// Add a content paragraph.
row.Append(cell2);
TableCell cell3 = new TableCell();
cell3.TableCellProperties = new TableCellProperties();
cell3.TableCellProperties.HorizontalMerge = new HorizontalMerge { Val = MergedCellValues.Continue };
// Add a content paragraph.
row.Append(cell3);
table.Add(row);