我目前正在为 word 编写一个 vba 宏,它应该获取文档中的所有注释并将它们返回到一个新创建的 excel 文件中。我快完成了,但我遇到了段落指示的问题。我也想将段落对应的标题放在excel中。为此,我必须直接获取段落标题或在段落上方找到第一个与标题相关的格式。至少这些是我能想到的选项。知道如何最好地解决这个问题吗?
Sub exportComments()
Dim xlApp As Object
Dim xlWB As Object
Dim i As Integer, HeadingRow As Integer
Dim objPara As Paragraph
Dim objComment As Comment
Dim strSection As String
Dim strTemp
Dim myRange As Range
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWB = xlApp.Workbooks.Add 'create a new workbook
With xlWB.Worksheets(1)
' Create Heading
HeadingRow = 1
.Cells(HeadingRow, 1).Formula = "Comment"
.Cells(HeadingRow, 2).Formula = "Page"
.Cells(HeadingRow, 3).Formula = "Paragraph"
.Cells(HeadingRow, 4).Formula = "Commented part"
.Cells(HeadingRow, 5).Formula = "Comment"
.Cells(HeadingRow, 6).Formula = "Reviewer"
.Cells(HeadingRow, 7).Formula = "Date"
strSection = "preamble" 'all sections before "1." will be labeled as "preamble"
strTemp = "preamble"
If ActiveDocument.Comments.Count = 0 Then
MsgBox ("No comments")
Exit Sub
End If
For i = 1 To ActiveDocument.Comments.Count
Set myRange = ActiveDocument.Comments(i).Scope
strSection = ParentLevel(myRange.Paragraphs(1))
'MsgBox strSection
'Comment line
.Cells(i + HeadingRow, 1).Formula = ActiveDocument.Comments(i).Index
'Page number line
.Cells(i + HeadingRow, 2).Formula = ActiveDocument.Comments(i).Reference.Information(wdActiveEndAdjustedPageNumber)
'Paragraph indicator line
.Cells(i + HeadingRow, 3).Formula = ActiveDocument.Comments(i).Scope.Paragraphs(1)
'Commented part line
.Cells(i + HeadingRow, 4).Formula = ActiveDocument.Comments(i).Scope.FormattedText
'Comment value line
.Cells(i + HeadingRow, 5).Formula = ActiveDocument.Comments(i).Range
'Comment reviewer line
.Cells(i + HeadingRow, 6).Formula = ActiveDocument.Comments(i).Author
'Comment date line
.Cells(i + HeadingRow, 7).Formula = Format(ActiveDocument.Comments(i).Date, "dd/MM/yyyy")
Next i
End With
Set xlWB = Nothing
Set xlApp = Nothing
End Sub
Function ParentLevel(Para As Word.Paragraph) As String
' Finds the first paragraph of the current section
Dim oSection As Section
Dim iSection As Integer
Dim lngPara As Long
Dim oRng As Range, oPara As Range
iSection = Para.Range.Information(wdActiveEndSectionNumber)
Set oSection = ActiveDocument.Sections(iSection)
Set oRng = oSection.Range
For lngPara = 1 To oRng.Paragraphs.Count
Set oPara = oRng.Paragraphs(lngPara).Range
If Len(oPara) > 1 Then
Exit For
End If
Next lngPara
oPara.End = oPara.End - 1
ParentLevel = oPara.Text
End Function
所以想法是将段落标题放在 Headingrow 3 中。该解决方案必须适应不同的标题格式,因为我使用的文档通常具有自制的标题格式。我唯一可以依赖的是在样式名称中包含单词 header 的标题。任何帮助将不胜感激,当然我可以添加更多信息,可能会丢失任何信息。