1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
'Begin Description
' Вывод на печать всех .spo-файлов в заданной папке по маске.

' Скрипт обрабатывает все файлы, отвечающие заданной маске (например, "*.spo", "out*.spo"),
' расположенные в заданной папке.
' Допустим, 2 файла с именами output1.spo и myoutput.spo лежат в одной папке.
' Тогда сначала открывается и отсылается на печать output1.spo, затем
' открывается и отсылается на печать myoutput.spo.
'End Description

'Тема: Вывод на печать всех .spo-файлов в заданной папке по маске.
'Ключевые слова: печать, выдача, файлы, пути, папки, .spo.
'Опубликован: 01.08.2002, перевод: 20.06.2008.
'Автор: rlevesque@videotron.ca; перевод: А. Балабанов.
'Размещение: http://www.spsstools.ru/Scripts/Printing/PrintAllSpoFiles.txt (.sbs)
'Проверено: SPSS 15.0.0.

'NB! Когда принцип работы скрипта станет ясен, снимите кавычку комментария с команды objOutputDoc.PrintDoc чтобы
'печать фактически началась. В данном варианте скрипт лишь последовательно открывает/закрывает все
'подходящие файлы .spo в папке - примеч. перев.

Option Explicit


Sub Main
	Dim objDocuments As ISpssDocuments
	Dim objOutputDoc As ISpssOutputDoc

	Dim strPath As String
	Dim strFileMask As String
	Dim strFname As String
	Dim intCount As Integer
	Dim I As Integer
	
	'Укажите путь к папке и маску
	strPath		="c:\\temp\\"
	strFileMask	="*.spo"

	'Определяем имя первого файла выдачи
	strFname = Dir$(strPath & strFileMask)
	Set objDocuments = objSpssApp.Documents

    While strFname <> ""
		Debug.Print strFname
		' Открываем файл документа, делаем документ видимым, запускаем на печать:
		Set objOutputDoc = objSpssApp.OpenOutputDoc(strPath & strFname)
		objOutputDoc.Visible = True
'		objOutputDoc.PrintDoc

		' Для сбережения оперативной памяти закрываем все документы выдачи кроме текущего
		'(использование всякий раз простой конструкции "objOutputDoc.Close" может приводить к зависанию spsswin.exe!)
		intCount = objDocuments.OutputDocCount
		If intCount > 1 Then
		For I = intCount - 1 To 0 Step -1
			Set objOutputDoc = objDocuments.GetOutputDoc(I)
			If Not objOutputDoc.Designated Then
				objOutputDoc.Close
			End If
		Next
		End If
		'Переходим к следующему файлу в папке
		strFname = Dir$()
    Wend 

	Set objOutputDoc = Nothing
End Sub