Home All Groups Group Topic Archive Search About

How do I maintain paragraph numbers into a new word document

Author
27 Jan 2006 4:04 PM
Adam Faulkner via DotNetMonster.com
I had a problem before extracting pages from an existing word document and
then inserting the content into a new word document.

The following code below works with Microsoft Word 2000

    Function ParseWordDoc(ByVal Filename As String) As String
        Dim sNewFileName As String
        Dim WordApp As Word.Application = New Word.Application
        Dim BaseDoc As Word.Document
        Dim DestDoc As Word.Document
        Try
            Dim intNumberOfPages As Integer
            Dim intNumberOfChars As String
            Dim intPage As Integer

            'Word Constants
            Const wdGoToPage = 1
            Const wdStory = 6
            Const wdExtend = 1
            Const wdCharacter = 1

            'Show WordApp
            WordApp.ShowMe()

            'Load Base Document
            BaseDoc = WordApp.Documents.Open(Filename)
            BaseDoc.Repaginate()

            'Loop through pages
            intNumberOfPages = BaseDoc.BuiltInDocumentProperties("Number of
Pages").Value
            intNumberOfChars = BaseDoc.BuiltInDocumentProperties("Number of
Characters").Value

            BaseDoc.ShowRevisions = False

            If intNumberOfPages > 1 Then
                For intPage = 1 To intNumberOfPages
                    If intPage = intNumberOfPages Then
                        WordApp.Selection.EndKey(wdStory)
                    Else
                        WordApp.Selection.GoTo(What:=Word.WdGoToItem.
wdGoToPage, _
                    Which:=Word.WdGoToDirection.wdGoToAbsolute, _
                        Count:=2)
                        Application.DoEvents()

                        WordApp.Selection.MoveLeft(Unit:=wdCharacter, Count:
=1)
                    End If

                    Application.DoEvents()

                    WordApp.Selection.HomeKey(wdStory, wdExtend)
                    Application.DoEvents()

                    WordApp.Selection.Copy()
                    Application.DoEvents()

                    'Create New Document
                    DestDoc = WordApp.Documents.Add
                    DestDoc.Activate()

                    ' set margins
                    If BaseDoc.PageSetup.TopMargin <= 1584 Then
                        DestDoc.PageSetup.TopMargin = BaseDoc.PageSetup.
TopMargin
                    End If
                    If BaseDoc.PageSetup.BottomMargin <= 1584 Then
                        DestDoc.PageSetup.BottomMargin = BaseDoc.PageSetup.
BottomMargin
                    End If
                    If BaseDoc.PageSetup.LeftMargin <= 1584 Then
                        DestDoc.PageSetup.LeftMargin = BaseDoc.PageSetup.
LeftMargin
                    End If
                    If BaseDoc.PageSetup.RightMargin <= 1584 Then
                        DestDoc.PageSetup.RightMargin = BaseDoc.PageSetup.
RightMargin
                    End If
                    If Not BaseDoc.PageSetup.Orientation = Word.WdOrientation.
wdOrientLandscape And Not BaseDoc.PageSetup.Orientation = Word.WdOrientation.
wdOrientPortrait Then
                        DestDoc.PageSetup.Orientation = WordApp.Selection.
Orientation
                    Else
                        DestDoc.PageSetup.Orientation = BaseDoc.PageSetup.
Orientation
                    End If
                    DestDoc.PageSetup.PaperSize = Word.WdPaperSize.wdPaperA4
                    DestDoc.PageSetup.PageHeight = BaseDoc.PageSetup.
PageHeight
                    DestDoc.PageSetup.PageWidth = BaseDoc.PageSetup.PageWidth
                    DestDoc.ShowRevisions = False

                    ' paste selecton
                    WordApp.Selection.Paste()
                    sNewFileName = Filename
                    sNewFileName = sNewFileName.Replace(".doc", "_Page" &
intPage.ToString & ".doc")
                    DestDoc.SaveAs(sNewFileName)
                    DestDoc.Close()
                    DestDoc = Nothing

                    WordApp.Selection.GoTo(wdGoToPage, 2)
                    Application.DoEvents()

                    WordApp.Selection.HomeKey(wdStory, wdExtend)
                    Application.DoEvents()

                    WordApp.Selection.Delete()
                    Application.DoEvents()
                Next
                BaseDoc.Close(False)
                BaseDoc = Nothing
            Else
                BaseDoc.Close(False)
                BaseDoc = Nothing
                Return "OK"
            End If

            Return "OK"
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            WordApp.Quit()
            WordApp = Nothing
        End Try
    End Function

However, there is a problem if I have a word document with numbered
paragraphs.

On Page 1 of the document has paragraphs numbered from 1 to 2.9
On Page 2 of the document has paragraphs numbered from 2.10 to 2.16

After running the page extraction sample, the Page 2 document now has
numbered paragraphs from 1 to 1.7 because Word is changing the paragraph
numbering to start from 1 rather than maintain the initial value from where
the numbered paragraphs were copied from.

Is there a method within Word Interop for VB.NET to override the value of the
paragraph number in a new document to take the initial value of what it is
copied from a previous document.

Regards
Adam Faulkner
Croner Software


Author
25 Mar 2006 7:57 PM
Marcel
Adam,

As you can set the paragraph in Word with VBA you can set it in VB.NET. The
numbering is context sensetive. It lives in the original document. If you
extract the text you have to set the "context" in which the paragraph
numbering can exist. You can set the start number for each level. Look how
it is done in a macro within Word and extrapolate it to VB. The Word object
model is the same, it is imported from Word by reference.

Regards,

Marcel

"Adam Faulkner via DotNetMonster.com" <u3667@uwe> schreef in bericht
news:5afd59f1e703a@uwe...
Show quoteHide quote
>I had a problem before extracting pages from an existing word document and
> then inserting the content into a new word document.
>
> The following code below works with Microsoft Word 2000
>
>    Function ParseWordDoc(ByVal Filename As String) As String
>        Dim sNewFileName As String
>        Dim WordApp As Word.Application = New Word.Application
>        Dim BaseDoc As Word.Document
>        Dim DestDoc As Word.Document
>        Try
>            Dim intNumberOfPages As Integer
>            Dim intNumberOfChars As String
>            Dim intPage As Integer
>
>            'Word Constants
>            Const wdGoToPage = 1
>            Const wdStory = 6
>            Const wdExtend = 1
>            Const wdCharacter = 1
>
>            'Show WordApp
>            WordApp.ShowMe()
>
>            'Load Base Document
>            BaseDoc = WordApp.Documents.Open(Filename)
>            BaseDoc.Repaginate()
>
>            'Loop through pages
>            intNumberOfPages = BaseDoc.BuiltInDocumentProperties("Number of
> Pages").Value
>            intNumberOfChars = BaseDoc.BuiltInDocumentProperties("Number of
> Characters").Value
>
>            BaseDoc.ShowRevisions = False
>
>            If intNumberOfPages > 1 Then
>                For intPage = 1 To intNumberOfPages
>                    If intPage = intNumberOfPages Then
>                        WordApp.Selection.EndKey(wdStory)
>                    Else
>                        WordApp.Selection.GoTo(What:=Word.WdGoToItem.
> wdGoToPage, _
>                    Which:=Word.WdGoToDirection.wdGoToAbsolute, _
>                        Count:=2)
>                        Application.DoEvents()
>
>                        WordApp.Selection.MoveLeft(Unit:=wdCharacter,
> Count:
> =1)
>                    End If
>
>                    Application.DoEvents()
>
>                    WordApp.Selection.HomeKey(wdStory, wdExtend)
>                    Application.DoEvents()
>
>                    WordApp.Selection.Copy()
>                    Application.DoEvents()
>
>                    'Create New Document
>                    DestDoc = WordApp.Documents.Add
>                    DestDoc.Activate()
>
>                    ' set margins
>                    If BaseDoc.PageSetup.TopMargin <= 1584 Then
>                        DestDoc.PageSetup.TopMargin = BaseDoc.PageSetup.
> TopMargin
>                    End If
>                    If BaseDoc.PageSetup.BottomMargin <= 1584 Then
>                        DestDoc.PageSetup.BottomMargin = BaseDoc.PageSetup.
> BottomMargin
>                    End If
>                    If BaseDoc.PageSetup.LeftMargin <= 1584 Then
>                        DestDoc.PageSetup.LeftMargin = BaseDoc.PageSetup.
> LeftMargin
>                    End If
>                    If BaseDoc.PageSetup.RightMargin <= 1584 Then
>                        DestDoc.PageSetup.RightMargin = BaseDoc.PageSetup.
> RightMargin
>                    End If
>                    If Not BaseDoc.PageSetup.Orientation =
> Word.WdOrientation.
> wdOrientLandscape And Not BaseDoc.PageSetup.Orientation =
> Word.WdOrientation.
> wdOrientPortrait Then
>                        DestDoc.PageSetup.Orientation = WordApp.Selection.
> Orientation
>                    Else
>                        DestDoc.PageSetup.Orientation = BaseDoc.PageSetup.
> Orientation
>                    End If
>                    DestDoc.PageSetup.PaperSize =
> Word.WdPaperSize.wdPaperA4
>                    DestDoc.PageSetup.PageHeight = BaseDoc.PageSetup.
> PageHeight
>                    DestDoc.PageSetup.PageWidth =
> BaseDoc.PageSetup.PageWidth
>                    DestDoc.ShowRevisions = False
>
>                    ' paste selecton
>                    WordApp.Selection.Paste()
>                    sNewFileName = Filename
>                    sNewFileName = sNewFileName.Replace(".doc", "_Page" &
> intPage.ToString & ".doc")
>                    DestDoc.SaveAs(sNewFileName)
>                    DestDoc.Close()
>                    DestDoc = Nothing
>
>                    WordApp.Selection.GoTo(wdGoToPage, 2)
>                    Application.DoEvents()
>
>                    WordApp.Selection.HomeKey(wdStory, wdExtend)
>                    Application.DoEvents()
>
>                    WordApp.Selection.Delete()
>                    Application.DoEvents()
>                Next
>                BaseDoc.Close(False)
>                BaseDoc = Nothing
>            Else
>                BaseDoc.Close(False)
>                BaseDoc = Nothing
>                Return "OK"
>            End If
>
>            Return "OK"
>        Catch ex As Exception
>            MessageBox.Show(ex.Message)
>        Finally
>            WordApp.Quit()
>            WordApp = Nothing
>        End Try
>    End Function
>
> However, there is a problem if I have a word document with numbered
> paragraphs.
>
> On Page 1 of the document has paragraphs numbered from 1 to 2.9
> On Page 2 of the document has paragraphs numbered from 2.10 to 2.16
>
> After running the page extraction sample, the Page 2 document now has
> numbered paragraphs from 1 to 1.7 because Word is changing the paragraph
> numbering to start from 1 rather than maintain the initial value from
> where
> the numbered paragraphs were copied from.
>
> Is there a method within Word Interop for VB.NET to override the value of
> the
> paragraph number in a new document to take the initial value of what it is
> copied from a previous document.
>
> Regards
> Adam Faulkner
> Croner Software
>
> --
> Message posted via DotNetMonster.com
> http://www.dotnetmonster.com/Uwe/Forums.aspx/dotnet-vb-net/200601/1