none
Programové sloučení vnořených dokumentů Wordu

    Dotaz

  • Dobrý den,

    ve Wordu mám vytvořený dokument, který zahrnuje sadu vnořených dokumentů.

    Nyní se snažím v rámci .NET aplikaci docílit programového sloučení tohoto dokumentu a jeho následného uložení, k čemuž využívám funkčnosti z Microsoft.Office.Interop.Word. Prostým uložením však docílím pouze vzniku dokumentu, který obsahuje pouze „odkazy“ na vnořené dokumenty – není prostě sloučený.

    Můžete mně prosím poradit, jak docílím programového vzniku dokumentu, který bude obsahovat text ze všech vnořených dokumentů?

    Děkuji,

    Tomáš

    7. listopadu 2009 8:41

Odpovědi

  • Nemám po ruce PIA Microsoft.Office.Interop.Word, použiju však kód ve VBA, takže převod do .NETu by neměl být složitý.

    Private Sub SlouceniVnorenychDokumentu()
    Dim sDoc As Word.Subdocument
    Dim sDocs As Word.Subdocuments
    Dim dcDoc As Word.Document
    Dim aDokumenty() As String
    Dim i As Integer
    Dim j As Integer

    'Odkaz na vnořené dokumenty v aktuálním dokumentu
    Set sDocs = ActiveDocument.Subdocuments

    'Nastavení pole pro uchování cest ke vnořeným dokumentům
    ReDim aDokumenty(sDocs.Count - 1)

    'Procházení vnořených dokumentů a uložení informace o cestě do pole
    For Each sDoc In sDocs
      aDokumenty(i) = sDoc.name
      i = i + 1
    Next sDoc

    'Vytvoření a (pro jistotu) aktivace nové dokumentu
    Set dcDoc = Documents.Add
    dcDoc.Activate

    'V této fázi je vhodné zavřít původní hlavní dokument
    'Také zde můžete procházet jednotlivé vnořené dokumenty, otevírat je ve Wordu
    'a upravovat (např. odstranění zalomení oddílu, které je na konci dokumentu)

    'Procházení pole s cestami ke vnořeným dokumentům a vkládání obsahu dokumentů do aktivního dokumentu
    For j = 0 To i - 1
      Selection.InsertFile aDokumenty(j), , False, False, False
    Next j

    End Sub


    Boris Lehečka (Word, VBA, XML, C#, SQL)
    • Označen jako odpověď Tom82 14. listopadu 2009 8:19
    11. listopadu 2009 21:42

Všechny reakce

  • Osobně bych asi zkusil celý dokument označit a překopírovat. Měla by na to stačit manipulace s vlastností Selection.
    11. listopadu 2009 9:46
    Moderátor
  • Nemám po ruce PIA Microsoft.Office.Interop.Word, použiju však kód ve VBA, takže převod do .NETu by neměl být složitý.

    Private Sub SlouceniVnorenychDokumentu()
    Dim sDoc As Word.Subdocument
    Dim sDocs As Word.Subdocuments
    Dim dcDoc As Word.Document
    Dim aDokumenty() As String
    Dim i As Integer
    Dim j As Integer

    'Odkaz na vnořené dokumenty v aktuálním dokumentu
    Set sDocs = ActiveDocument.Subdocuments

    'Nastavení pole pro uchování cest ke vnořeným dokumentům
    ReDim aDokumenty(sDocs.Count - 1)

    'Procházení vnořených dokumentů a uložení informace o cestě do pole
    For Each sDoc In sDocs
      aDokumenty(i) = sDoc.name
      i = i + 1
    Next sDoc

    'Vytvoření a (pro jistotu) aktivace nové dokumentu
    Set dcDoc = Documents.Add
    dcDoc.Activate

    'V této fázi je vhodné zavřít původní hlavní dokument
    'Také zde můžete procházet jednotlivé vnořené dokumenty, otevírat je ve Wordu
    'a upravovat (např. odstranění zalomení oddílu, které je na konci dokumentu)

    'Procházení pole s cestami ke vnořeným dokumentům a vkládání obsahu dokumentů do aktivního dokumentu
    For j = 0 To i - 1
      Selection.InsertFile aDokumenty(j), , False, False, False
    Next j

    End Sub


    Boris Lehečka (Word, VBA, XML, C#, SQL)
    • Označen jako odpověď Tom82 14. listopadu 2009 8:19
    11. listopadu 2009 21:42