vb.net - 使用openxml在word中合并单元格
问题描述
我尝试使用 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
解决方案
必须为表中的每个单元格设置 HorizontalMerge。
例如,要创建一个单行表,其中第一个单元格是常规单元格,第二个单元格是由 2 个单元格合并而成,请将 cell1 的 HorizontalMerge 设置为 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);
推荐阅读
- node.js - 排队异步任务
- javascript - Firebase 实时数据库是否有任何“生命周期”事件?
- html - 在 Bootstrap 4 中使行占据全高
- css - Laravel Mix - 当本地主机上的网站不在根文件夹中时,URL 处理工作错误
- database - Visual Studio 2017 显示表数据不起作用
- ios - 强制 iOS 返回新位置?
- php - FormCollection 和 KnpPaginator Symfony 4
- python - 将值传递给装饰器
- php - 为什么在 codeigniter 中无法正确计算秒和分钟?
- java - 请求参数上的弹簧过滤器授权