我在 2013 年将数据打印到 Word 文档模板时遇到问题,实际上我可以使用 vb.net 在 word 2010(使用 XSD 文件)中打印数据,但 2013 年不接受 xmlnodes(我知道他们在 2013 年删除了 xml 节点).如何在 word2013 中打印数据。
我的情况是:
我用三个表格创建了具有不同字体样式和标题颜色的模板。
我需要根据我的数据(在我的所有表中)动态添加行。
请指导我如何移动....
我在 2013 年将数据打印到 Word 文档模板时遇到问题,实际上我可以使用 vb.net 在 word 2010(使用 XSD 文件)中打印数据,但 2013 年不接受 xmlnodes(我知道他们在 2013 年删除了 xml 节点).如何在 word2013 中打印数据。
我的情况是:
我用三个表格创建了具有不同字体样式和标题颜色的模板。
我需要根据我的数据(在我的所有表中)动态添加行。
请指导我如何移动....
这不是 xsd 文件的完全答案。但应要求我提出了这一点。
打开 docx 作为内存流,在此示例中,我有一个带有标题的表格。
那就是在word文档中有一个表格,当您选择它并右键单击->属性->替代文本->标题时。
这个标题是我在 word 文档中搜索的东西,以知道在哪里添加我的东西。可能有更好的方法来做到这一点。但这使得管理员可以编辑文档,只要他们不删除表格,他们就可以在他们认为合适的时候对其进行编辑。
dim mem As MemoryStream
dim doc = WordprocessingDocument.Open(mem, true)
Dim tableProperties = doc.MainDocumentPart.Document.Body.Descendants(Of TableProperties)().Where(Function(tp) tp.TableCaption IsNot Nothing)
For Each tProp As TableProperties In tableProperties
If tProp.TableCaption.Val.ToString() = "DatatableTitle" Then
Dim tbl = DirectCast(tProp.Parent, Table)
InsertTableRows(tbl, myListOfThings)
End If
Next
Private Function CreateTableCellText(myText As String) As TableCell
Dim run = New Run()
Dim runProperties = New RunProperties()
runProperties.Append(New RunFonts() With { .Ascii = "Times New Roman" })
runProperties.Append(New FontSize() With { .Val = "16" })
run.PrependChild(runProperties)
run.Append(New Text(myText))
Dim p = New Paragraph()
p.Append(run)
Dim td = New TableCell()
td.Append(p)
Return td
End Function
Private Sub InsertTableRows(tbl As Table, patients As List(Of MyTableList))
'var refRow = tbl.Elements<TableRow>().ElementAt(1); // the first is the header.
tbl.Elements(Of TableRow)().ElementAt(1).Remove()
For Each patient As MyTableList In patients
Dim tr = New TableRow()
tr.Append(CreateTableCellText(patient.DepartmentName))
tr.Append(CreateTableCellText(patient.PatientLastName))
tbl.Append(tr)
Next
End Sub
End Class
Public Class MyTableList
Public Property DepartmentName() As String
Get
Return m_DepartmentName
End Get
Set
m_DepartmentName = Value
End Set
End Property
Private m_DepartmentName As String
Public Property PatientLastName() As String
Get
Return m_PatientLastName
End Get
Set
m_PatientLastName = Value
End Set
End Property
Private m_PatientLastName As String
End Class
添加复选框等没问题,只需在word中创建它们,在文本编辑器中打开word文档并从文档中复制xml并将其添加为新段落,然后使用firstChild.InnerXml并将xml复制到文本中。然后附加它