【问题标题】:Merge cell in word using openxml使用openxml在word中合并单元格
【发布时间】:2018-05-15 06:55:05
【问题描述】:

我尝试使用 openxml 在 word 中合并表格单元格。下面是我的代码,但它没有执行我想要的结果(合并表格单元格)。 谁能帮忙,提前谢谢。

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

【问题讨论】:

  • 创建一个带有小表格的简单 Word 文档,没有合并单元格 - 保存它。合并一个单元格,然后以不同的名称保存它。在 Open XML SDK Productivity Tool 中打开第一个文档并使用该工具将其与第二个文档比较。该工具应该向您展示从第一个文档生成第二个文档所需的代码 - 如何合并表格单元格。

标签: vb.net openxml-sdk


【解决方案1】:

必须为表格中的每个单元格设置 Horizo​​ntalMerge。

例如,要创建一个单行表,其中第一个单元格为常规单元格,第二个单元格由 2 个单元格合并而成,请将 cell1 的 Horizo​​ntalMerge 设置为 Restart,将 cell2 设置为 Restart,将 cell3 设置为 Continue。

在 C# 中看起来像

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);

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多