Как распечатать шаблон Data to Word 2013 с помощью vb.net

У меня проблема с печатью данных в шаблоне документа Word в 2013 году. На самом деле я могу печатать данные в Word 2010 (используя файл XSD) с помощью vb.net, но 2013 не принимает xmlnodes (я знаю, что они удаляют узлы xml в 2013 г. ).Как я могу распечатать данные в word2013.

Мой сценарий:

  1. Я создаю шаблон с разными стилями шрифта и цветами заголовка с тремя таблицами.

  2. Мне нужно динамически добавлять строки на основе моих данных (во всех моих таблицах).

Пожалуйста, подскажите, как мне двигаться....


person Victor Athoti.    schedule 03.03.2014    source источник
comment
Я выбросил весь код файлов xsd и решил использовать WordprocessingDocument и шаблоны как docx. Работает хорошо. Если вы хотите, у меня есть код, и я могу опубликовать его как ответ. Но это не совсем то, о чем вы просите, я знаю.   -  person Archlight    schedule 03.03.2014
comment
Да, пожалуйста, Арчлайт, это может мне помочь... и спасибо за ответ...   -  person Victor Athoti.    schedule 03.03.2014


Ответы (1)


Это не совсем ответ для файлов xsd. Но по просьбе я выдвинул это.

Открываю docx как поток памяти, и в этом примере у меня есть таблица с заголовком.

То есть в вордовском документе есть таблица и при ее выделении правой кнопкой мыши->свойства->Альтернативный текст->заголовок.

Это название — то, что я ищу в документе 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

И добавить флажки и тому подобное не проблема, просто создайте их в слове, откройте документ слова в текстовом редакторе, скопируйте xml из документа и добавьте его как новый абзац, а затем используйте firstChild.InnerXml и скопируйте xml в текст. а затем добавить его

person Archlight    schedule 03.03.2014