- 论坛徽章:
- 0
|
前两天上了个帖子,询问如何batch打印文档,因为用户要one button click 完成所有打印工作,输入的是开始时间和结束时间。
经研究,notes script并没有支持batch打印的功能,唯一的notesuiview.print,而这个命令需要先选中要打印的文档,也就是当前视图所有要打印的文档的的前面打勾,我也没发现这个操作能够用lotus script自动生成。
以下提供另一种解决方法,通过生成word文档来打印Notes文档,文档比较整齐,你可以根据需要随意美化之。
1.定义word template: 这里指的template,本身还是word document,只是在打印时用作模版,生成相应的(多个)文档.
*. 定义“书签”:点击“插入”-〉“书签”。
“书签”是 Word文档中的域,与Notes form中定义的域一样的作用,通过程序(Lotus Script)把值赋给相应的书签,在Word文档中就相当于填写了相应的内容。
*.在word文档中插入书签: 。
首先打开word ,点击“插入”-〉“书签”, 打开当前word文档中定义的书签. 如要添加书签,需要把鼠标首先移动到word文档相应的位置,再点击 “插入“-> ”书签“,在“书签名字“一栏输入名字,再点击"添加",相应的书签就添加到文档上了。
*. 察看Word文档中定义的书签:点击“插入”-〉“书签”,选中要查看的书签名字,点击”定位”.你将看到你是在那定义的书签,如果像修改定义的书签,要先删除,再添加.
上传了一个已经定义好书签的word文档,大家可以参考.
2. 使用lotus script 把Notes document中的值传到word 文档中,注意的是,在保存的使用要保存成另外的名字,保持原来的 word文档是”干净的”.
下面的script可以嵌在action,button,中使用.
Sub printWordPO ( reqDoc As NotesDocument )
' reqDoc is the Notes document ready to be printed.
‘reqDoc是要打印的 notes文档的名字.
On Error Goto ErrorHandler
Dim db As NotesDatabase
Dim filename As String
Dim pathname As String
Dim fileExt As String
Dim wordPODoc As String
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim rti As NotesRichTextItem
Dim WordDoc As Variant
Dim wdFormatDocument As Variant
Dim WordObj As Variant
Dim fldName As String
Dim fldValue As String
Dim errMsg$
Set session = New NotesSession
Set db = session.CurrentDatabase
'Path to Word document template with bookmarks.
‘定义word 文档的位置.
pathName = "c:\WO\"
filename = "WO"
fileExt = ".doc" ' Active Word, open html and save as .doc
Set WordObj = CreateObject("Word.Application.8")
WordObj.Documents.Open pathname$ & fileName & fileExt
Set WordDoc = WordObj.ActiveDocument
WordDoc.Application.Visible=False
' loop through Company fields, make bookmark changes, and replace booksmarks in word doc
Call SetBookmark ( WordDoc , "AssignTo" , reqdoc.AssignTo(0) )
Call SetBookmark ( WordDoc , "WOType" , reqdoc.WOType(0) )
Call SetBookmark ( WordDoc , "Supervisor" , reqdoc.Supervisor(0) )
Call SetBookmark ( WordDoc , "SSDate" , reqdoc.SSDate(0) )
Call SetBookmark ( WordDoc , "Frequency" , reqdoc.Frequency(0) )
Call SetBookmark ( WordDoc , "TaskInstruction" , reqdoc.TaskInstruction(0) )
Call SetBookmark ( WordDoc , "Title" , reqdoc.Title(0) )
Call SetBookmark ( WordDoc , "WorkOrderNum" , reqdoc.WorkOrderNum(0) )
Call SetBookmark ( WordDoc , "PrintDate" , reqdoc.PrintDate(0) )
' Equipment and location
‘下面这些是垃圾.为了保证打印的完整性.
If reqdoc.equipment1<>"" Then
Call SetBookmark ( WordDoc , "equipment1" , reqdoc.equipment1(0) )
Call SetBookmark ( WordDoc , "location1" , reqdoc.location1(0) )
End If
If reqdoc.equipment2<>"" Then
Call SetBookmark ( WordDoc , "equipment2" , reqdoc.equipment2(0) )
Call SetBookmark ( WordDoc , "location2" , reqdoc.location2(0) )
End If
If reqdoc.equipment3<>"" Then
Call SetBookmark ( WordDoc , "equipment3" , reqdoc.equipment3(0) )
Call SetBookmark ( WordDoc , "location3" , reqdoc.location3(0) )
End If
If reqdoc.equipment4<>"" Then
Call SetBookmark ( WordDoc , "equipment4" , reqdoc.equipment4(0) )
Call SetBookmark ( WordDoc , "location4" , reqdoc.location4(0) )
End If
If reqdoc.equipment5<>"" Then
Call SetBookmark ( WordDoc , "equipment5" , reqdoc.equipment5(0) )
Call SetBookmark ( WordDoc , "location5" , reqdoc.location5(0) )
End If
If reqdoc.equipment6<>"" Then
Call SetBookmark ( WordDoc , "equipment6" , reqdoc.equipment6(0) )
Call SetBookmark ( WordDoc , "location6" , reqdoc.location6(0) )
End If
If reqdoc.equipment7<>"" Then
Call SetBookmark ( WordDoc , "equipment7" , reqdoc.equipment7(0) )
Call SetBookmark ( WordDoc , "location7" , reqdoc.location7(0) )
End If
If reqdoc.equipment8<>"" Then
Call SetBookmark ( WordDoc , "equipment8" , reqdoc.equipment8(0) )
Call SetBookmark ( WordDoc , "location8" , reqdoc.location8(0) )
End If
If reqdoc.equipment9<>"" Then
Call SetBookmark ( WordDoc , "equipment9" , reqdoc.equipment9(0) )
Call SetBookmark ( WordDoc , "location9" , reqdoc.location9(0) )
End If
If reqdoc.equipment10<>"" Then
Call SetBookmark ( WordDoc , "equipment10" , reqdoc.equipment10(0) )
Call SetBookmark ( WordDoc , "location10" , reqdoc.location10(0) )
End If
If reqdoc.equipment11<>"" Then
Call SetBookmark ( WordDoc , "equipment11" , reqdoc.equipment11(0) )
Call SetBookmark ( WordDoc , "location11" , reqdoc.location11(0) )
End If
If reqdoc.equipment12<>"" Then
Call SetBookmark ( WordDoc , "equipment12" , reqdoc.equipment12(0) )
Call SetBookmark ( WordDoc , "location12" , reqdoc.location12(0) )
End If
‘垃圾结束.
' file name for extracting and attaching
wordPODocName = pathName & fileName & reqDoc.WorkOrderNum(0) & fileExt
‘这句非常关键,如果使用原来的名字,则原来的word文档就被冲掉了.
WordDoc.SaveAs wordPODocName , wdFormatDocument
WordDoc.Application.PrintOut
' clean up word objects
WordDoc.Close
WordDoc = Null
WordObj = Null
Exit Sub
ErrorHandler:
errMsg="Error in Common.CreateWordPO " & Str$(Err) & ": " & Error$ & "-- Line: #>" & Cstr(Erl)
' WriteErrDoc ( errMsg )
Resume Next
End Sub
Function SetBookmark( wrdDoc As Variant, fieldName$, itemValue$ ) As Integer
' Set's the value of a bookmark in a Word document
On Error Goto ErrorHandler
Dim range As Variant
On Error Goto ErrorHandler
Set range = wrdDoc.Bookmarks( fieldName$ ).range
range.end = range.end
range.text = itemValue$
SetBookmark = True
Exit Function
ErrorHandler:
Dim errMsg$
errMsg= "Error in Common.SetBookmark " & Str$(Err) & ": " & Error$ & "-- Line: #>" & Cstr(Erl)
' WriteErrDoc ( errMsg )
SetBookmark = False
Exit Function
End Function |
|