2014-03-03 3 views
1

2013 년에 Word 문서 템플릿에 데이터를 인쇄하는 데 문제가 있습니다. 실제로 vb.net을 사용하여 2010 년 Word XSD 파일로 데이터를 인쇄 할 수 있지만 2013 xmlnodes 허용하지 않습니다 (나는 2013 년 xml 노드를 제거합니다.) 어떻게 word2013에서 데이터를 인쇄 할 수 있습니다.vb.net을 사용하여 Word 2013 템플릿에 데이터를 인쇄하는 방법

내 시나리오는 다음과 같습니다

  1. 나는 세 개의 테이블과 다른 글꼴 스타일과 헤더 색상 템플릿을 만들 수 있습니다.

  2. 모든 데이터 테이블을 기반으로 행을 동적으로 추가해야합니다.

내가 움직일 수있는 방법을 안내하십시오 ....

+0

나는 모든 xsd 파일 코드를 폐기하고 WordprocessingDocument와 템플릿을 docx로 사용했다. 잘 작동합니다. 원하는 경우 코드가 있으며 대답으로 게시 할 수 있습니다. 하지만 그게 당신이 요구하는 것이 아닙니다. 알아요. – Archlight

+0

예, 아케이드하시기 바랍니다. 도움이 될 수 있습니다 ... 답변 해 주셔서 감사합니다 ... –

답변

0

이는 XSD 파일에 대한 아주 대답하지 않습니다. 그러나 요청에 의해 나는 이것을 앞으로 나아 갔다.

docx를 메모리 스트림으로 여는이 예제에서는 캡션이있는 테이블이 있습니다.

문서라는 단어가 있는데, 테이블을 선택한 다음 마우스 오른쪽 버튼으로 클릭 -> 속성 -> 대체 텍스트 -> 제목을 클릭하십시오.

이 제목은 단어 문서에서 내 물건을 추가 할 위치를 검색하는 것입니다. 아마 이것을하는 훨씬 더 좋은 방법이 있습니다. 그러나 이로 인해 관리자는 문서를 편집 할 수 있으며 테이블을 삭제하지 않는 한 편집자는 적합하다고 생각하는대로 편집 할 수 있습니다.

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 문서를 열고 문서에서 XML을 복사하여 새 단락으로 추가 한 다음 firstChild.InnerXml를 사용 및 복사, 아무 문제 없다 xml을 텍스트에 삽입합니다. 그리고 나서 그것을 더한다