如何使用vb.net将数据打印到Word 2013模板

时间:2014-03-03 06:30:47

标签: vb.net word-2013 word-template

我在2013年将数据打印到Word文档模板时遇到问题,实际上我可以使用vb.net在word 2010(使用XSD文件)中打印数据,但2013年不接受xmlnodes(我知道它们会删除xml 2013年的节点。如何在word2013中打印数据。

我的情景是:

  1. 我创建了具有不同字体样式的模板和带有三个表格的标题颜色。

  2. 我需要根据我的数据动态添加行(在我的所有表格中)。

  3. 请指导我如何移动....

1 个答案:

答案 0 :(得分:0)

这不是xsd文件的答案。但是根据要求我把这个推进了。

将docx作为内存流打开,在本例中我有一个带有标题的表。

在单词文档中有一个表格,当您选择它并右键单击 - > properties-> Alternative Text - >标题。

这个标题是我在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中创建它们,在texteditor中打开word文档并从文档中复制xml并将其添加为新段落然后使用firstChild.InnerXml并将xml复制到文本。然后追加