有没有办法以编程方式从Microsoft Word .docm保存而不包含隐藏文本?
我让用户单击一个按钮来执行其他一些操作,然后打开一个另存为对话框,将.docm文件保存为.html文件,在Word VB编辑器中使用它:
With Dialogs(wdDialogFileSaveAs)
.Format = wdFormatHTML
.Show
End With
它会保存页面上显示的所有内容,但也会保存当前隐藏的段落。 (它们也隐藏在html页面的Web显示中,但隐藏的内容仍然在.html中,标有mso-hideall
标签。)我只想保存不是的内容隐藏,如果可能的话,所以它根本不在html文件中。
我没有看到任何提供here的内容,但我想知道是否有人可能知道使用VB执行此操作的方法。
我一直在努力使用VBA删除隐藏的文本,但它很棘手,因为你必须首先显示它,然后选择它,然后删除它,每次隐藏的部分是不同的,这取决于用户选择的内容在Word .docm文档中。
更新
这是我现在的完整代码:
Public strActiveOption As String
Private Sub OptionConcept_Click()
strActiveOption = "OptionConcept"
Bookmarks("ConceptText").Range.Font.Hidden = False
Bookmarks("TaskText").Range.Font.Hidden = True
Bookmarks("RefText").Range.Font.Hidden = True
End Sub
Private Sub OptionTask_Click()
strActiveOption = "OptionTask"
Bookmarks("TaskText").Range.Font.Hidden = False
Bookmarks("ConceptText").Range.Font.Hidden = True
Bookmarks("RefText").Range.Font.Hidden = True
End Sub
Private Sub OptionReference_Click()
strActiveOption = "OptionReference"
Bookmarks("RefText").Range.Font.Hidden = False
Bookmarks("ConceptText").Range.Font.Hidden = True
Bookmarks("TaskText").Range.Font.Hidden = True
End Sub
Private Sub formatSave_Click()
'Concept Content = 3
'Task Steps = 4
'ReferenceData = 5
Select Case strActiveOption
Case "OptionConcept"
ActiveDocument.ContentControls(4).Delete
ActiveDocument.ContentControls(5).Delete
Case "OptionTask"
ActiveDocument.ContentControls(3).Delete
ActiveDocument.ContentControls(5).Delete
Case "OptionReference"
ActiveDocument.ContentControls(3).Delete
ActiveDocument.ContentControls(4).Delete
Case Else
MsgBox "Invalid option"
End Select
With Dialogs(wdDialogFileSaveAs)
.Format = wdFormatHTML
.Show
End With
End Sub
它的作用:页面上有三个选项按钮,内容控件隐藏或取消隐藏,具体取决于用户选择的内容。 Private Sub formatSave_Click()
中的代码读取了哪一个,并尝试删除相应的隐藏文本。
问题:
第一个潜艇中的所有东西都完美无缺,直至Private Sub formatSave_Click()
。之后,它似乎无法看到隐藏的内容控件以便删除它们。我尝试在'Private Sub formatSave_Click()'
ActiveWindow.View.ShowHiddenText = True
但它似乎不起作用。
通过标签而不是索引选择内容控件也会容易得多。我试过这个,没有成功:
ActiveDocument.SelectContentControlsByTag("TaskSteps").Delete
“TaskSteps”是control(4)的标记名称。
更新II
(来自stuartd的建议)
这不能删除隐藏文本,但也许我没有正确格式化?
Private Sub formatSave_Click()
Selection.Find.ClearFormatting
Selection.Find.Font.Hidden = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
SOLUTION:
好的,我的原始代码可以使用了。这就是发生的事情:
VB删除了ContentControls(4)
我接下来告诉它删除ContentControls(5)
现在除了(4)已删除,ContentControls(5)现在是ContentControls(4)。
所以我更改了编号,如下所示,现在它可以工作,并删除正确的编号:
Private Sub formatSave_Click()
'Concept Content = 3
'Task Steps = 4
'ReferenceData = 5
ActiveDocument.ActiveWindow.View.ShowHiddenText = True
Select Case strActiveOption
Case "OptionConcept"
ActiveDocument.ContentControls(4).Delete
ActiveDocument.ContentControls(4).Delete
Case "OptionTask"
ActiveDocument.ContentControls(3).Delete
ActiveDocument.ContentControls(4).Delete
Case "OptionReference"
ActiveDocument.ContentControls(3).Delete
ActiveDocument.ContentControls(3).Delete
Case Else
MsgBox "Invalid option"
End Select
End Sub
我看了调试告诉我的内容,停止了每个系列的第二次删除,我终于意识到发生了什么。
感谢所有建议。