我在VisualBasic 6
中有这段代码:
iLinha = FreeFile
Open strPath For Output As #iLinha
Dim strHeader As String
'***Assign a value to the string `Content`
Print #iLinha, strHeader
现在我正在尝试使用Word.Application
执行相同的代码但,你知道吗?
当我编码时:
Word.Selection.TypeText strHeader
我得到的只是代码和字符,如:{rtf1\ansi\ansipg1252\deff0....
有人可以向我解释上面的代码吗?打印#iLinha
更新
streamFile.Type = adTypeBinary
streamFile.Open
streamFile.Write rstAux.Fields("text")
streamFile.SaveToFile strCaminhoTemp, adSaveCreateOverWrite
streamFile.Close
Obs:我尝试将adTypeBinary
更改为adTypeText
,但发生了多次错误......
也许这段代码与我的问题有关?!!
答案 0 :(得分:4)
看起来strHeader
是格式化文本,而不是纯文本。
在某些时候看起来strHeader
从RTF(RichText)控件获取其值,它会获得格式化文本,而不是纯文本。
有关RTF控件的更多信息:MSDN
答案 1 :(得分:4)
不确定为什么我的帖子不会在一段时间之前收到。无论如何,正如乔治指出的那样,它只是RTF文本。我的建议是您将文本应用于RTF控件并将其作为纯文本检索回来。这将删除所有RTF代码并留下您想要的纯文本。
要执行此操作,在VB6中打开项目时,请按Ctrl + T,然后选中“Microsoft Rich TextBox Control”。您可以将此新控件添加到表单中,但使其不可见。然后将RTFText
属性设置为strHeader
,并获取富编辑控件的Text
属性。
答案 2 :(得分:1)
要从RTF格式转换为文本格式,如果您对使用RTF控件不感兴趣,可以手动编写这样的内容,如您所示 - 我不建议这样做:
Dim RTF As String
RTF = strHeader
Dim Text As String
Dim X As Long
Dim InTag As Boolean
Dim TagStarted As Boolean
For X = 1& To Len(RTF)
Select Case Mid$(RTF, X, 1&)
Case "{", "}"
If InTag And Not TagStarted Then
Text = Text & Mid$(RTF, X, 1&)
TagStarted = True
End If
Case "\"
If InTag And Not TagStarted Then
Text = Text & Mid$(RTF, X, 1&)
TagStarted = True
Else
InTag = True
If Mid$(RTF, X, 5&) = "\par " Or Mid$(RTF, X, 4&) = "\par\" Or Mid$(RTF, X, 6&) = "\line " Or Mid$(RTF, X, 5&) = "\line\" Then
Text = Text & vbCrLf
End If
End If
Case " "
If InTag Then
InTag = False
Else
Text = Text & " "
End If
Case Else
If InTag Then
TagStarted = True
Else
Text = Text & Mid$(RTF, X, 1&)
End If
End Select
Next X
MsgBox Text
请注意,可能需要进行一些调整,因为代码很快就会编写。