[备注]这两天刚对原文做了改进,正好大哥钟隆也提了中肯的建议,修改后整理如下。
一、基础知识:
1、常用ASCII码知识:
chr(9)、chr(10)、chr(13)、chr(32)、chr(34)
所有关于 ASCII码的表格:参考:http://www.asciitable.com/
chr(13) 是一个回车符,Chr(10) 是个换行符,chr(32) 是一个空格符,chr(34)是",chr(9)是tab键的空格。
2、lotus notes中的rtf域
GetFormattedText(tabstrip, lineLength% )
eg:GetFormattedText(false,0),对rtf域值中的tab不进行处理,并且默认80个字符换行。
我们常用如下代码的方式来读取rtf域的值
Dim doc As NotesDocument
Dim rtitem As Variant
Dim plainText As String
Dim fileNum As Integer
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
plainText = rtitem.GetFormattedText( False, 0 )
End If
二、遇到的问题
今天在读取rtf域的值,并通过js代码实现导出报表excel中的时候报错:“未结束的字符串常量”。
相关代理中的代码如下:
Print |<script language="Javascript">|
Print |alert("|+doc.rtfDecription+|");|
Print |</script>|
其中rtfDecription 为rtf域。
当此域中的值为简单的文本(eg,123,dsa)时,不存在这种问题。当域值包含换行等字符的时候,就会报错“未结束的字符串常量”。
三、处理办法
以下示例代码针对相关字符(回车和换行)进行处理。
Sub Initialize
On Error Goto errHandler
Dim s As NotesSession
Dim doc As NotesDocument
Set s = New NotesSession
Set doc = s.DocumentContext
Dim rtitem As Variant
Dim plainText As String
Dim vTextArea As Variant
Set rtitem=doc.GetFirstItem("wahaha")
If ( rtitem.Type = RICHTEXT ) Then
plainText = rtitem.GetFormattedText( False, 0 )
End If
'Method1
plainText=Replace(plainText,Chr(34),"'")
plainText=Replace(plainText,Chr(13),"/n")
plainText=Replace(plainText,Chr(10),"")
'Method 2
'vTextArea = Evaluate(|@ReplaceSubstring(@Text(wahaha);@NewLine;" ")|,doc)
'Msgbox vTextArea(0)
Print |<script language="Javascript">|
Print |alert("|+strTemp+|");|
Print |</script>|
Exit Sub
errHandler:
Msgbox Error & Error$ & Cstr(Erl)
Exit Sub
End Sub
四、总结
前台代码(js代码)和后台代码(LotusScript、java)尽量分开写。