.NET Framework Developer Center > Fóra .NET Development > .NET Development obecně > Programové sloučení vnořených dokumentů Wordu
Odeslat dotazOdeslat dotaz
 

OdpovědětProgramové sloučení vnořených dokumentů Wordu

  • 7. listopadu 2009 8:41Tom82 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    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áš

Odpovědi

  • 11. listopadu 2009 21:42Boris Lehečka Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět
    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
    •  

Všechny reakce

  • 11. listopadu 2009 9:46Bechynský ŠtěpánPřispěvatelUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    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 21:42Boris Lehečka Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět
    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
    •