Lotus на практике. Как выгружать в Excel вычисляемые значения из View? (Lotus Script)

О чем этот текст?

Допустим ты на лету выводишь во View некую вычисляемую информацию. Например, автор документа записывается в формате Имя Фамилия. В представлении(View) ты преобразуешь через @-формулу в формат Фамилия Имя. Что если, тебе нужно вывести это поле, не прибегая к преобразованиям в Lotus Script. Допустим поле автор, первое во View.

Основная часть

Dim ViewString As String
Dim session As NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim docX As NotesDocument
Dim row As Double
Dim xl As Variant
Dim xlWbk As Variant
Dim authorv As Variant
Set session = New notessession
Set db=session.CurrentDatabase

ViewString="Секретные документы"
Set v=db.GetView(ViewString)

' Создадим объект Excel
Set xl=CreateObject("Excel.Application")
' Создадим книгу Excel
Set xlWbk=xl.Workbooks.Add
'Работаем с Лист1(Sheet1), активным по умолчанию



'вывод Excel

'Вывод названия выгрузки
xlWbk.ActiveSheet.Cells(2, 1).RowHeight=30
xlWbk.ActiveSheet.Range("A2").HorizontalAlignment = -4108
xlWbk.ActiveSheet.Cells(2, 1)="Отчет о статусах документов"
xlWbk.ActiveSheet.Range("A2:H2").Merge

numberrow%=1

row=5


xlWbk.ActiveSheet.Cells(5, 1)="№ п/п"
xlWbk.ActiveSheet.Cells(5, 1).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(5, 1).Font.Bold=True


xlWbk.ActiveSheet.Cells(5, 2)="Дата поступления"
xlWbk.ActiveSheet.Cells(5, 2).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(5, 2).Font.Bold=True

xlWbk.ActiveSheet.Cells(5, 3)="Наименование"
xlWbk.ActiveSheet.Cells(5, 3).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(5, 3).Font.Bold=True

xlWbk.ActiveSheet.Cells(5, 4)="Степень секретности"
xlWbk.ActiveSheet.Cells(5, 4).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(5, 4).Font.Bold=True

xlWbk.ActiveSheet.Cells(5, 5)="Автор"
xlWbk.ActiveSheet.Cells(5, 5).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(5, 5).Font.Bold=True


'Ширина столбцов и установка флага переноса по словам в ячейке
xlWbk.ActiveSheet.columns(2).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 2).WrapText = True
xlWbk.ActiveSheet.columns(3).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 3).WrapText = True
xlWbk.ActiveSheet.columns(4).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 4).WrapText = True
xlWbk.ActiveSheet.columns(5).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 5).WrapText = True


'выравнивание по верху, типа xlTop
xlWbk.ActiveSheet.Cells(row, 1).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 2).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 3).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 4).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 5).VerticalAlignment = -4160

'встаем на первый документ из вьюхи
Set docX=v.GetFirstDocument

'переходим на строчку ниже для вывода данных
row=row+1

'Пробегаем все документы из вью
While Not docX Is Nothing


'Бордюр вокруг ячеек
xlWbk.ActiveSheet.Cells(row,1).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(row,2).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(row,3).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(row,4).Borders.LineStyle = 1
xlWbk.ActiveSheet.Cells(row,5).Borders.LineStyle = 1

'Вывод информации в Excel
'Формат ячейки - текстовый, чтобы номера можно было отображать вида 0001
xlWbk.ActiveSheet.Cells(row, 1).NumberFormat="@"
'Номер п/п
xlWbk.ActiveSheet.Cells(row, 1)=numberrow%
'Дата поступления
xlWbk.ActiveSheet.Cells(row, 2)=docx.fDate(0)
'Наименование
xlWbk.ActiveSheet.Cells(row, 3)=docx.fName(0)
'Степень секретности
xlWbk.ActiveSheet.Cells(row, 4)=docx.fState(0)


col%=1

Forall cValue In docX.ColumnValues
'Если выгружаемый столбец не первый а третий, то сравнивай с 3 вместо 1
If(col%=1)Then
'authorv - тип Variant
authorv=cValue
Exit Forall
End If
'И тогда увеличивай col%=col%+1, чтобы перейти к нужному столбцу

End Forall

'Автор
xlWbk.ActiveSheet.Cells(row, 5)=authorv


'Увеличили счетчик первого столбца
numberrow%=numberrow%+1

'Применяем форматирование как у заголовков столбцов
xlWbk.ActiveSheet.Cells(row, 1).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 2).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 3).VerticalAlignment = -4160
xlWbk.ActiveSheet.Cells(row, 4).VerticalAlignment = -4160

xlWbk.ActiveSheet.columns(2).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 2).WrapText = True
xlWbk.ActiveSheet.columns(3).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 3).WrapText = True
xlWbk.ActiveSheet.columns(4).ColumnWidth=15
xlWbk.ActiveSheet.Cells(row, 4).WrapText = True
xlWbk.ActiveSheet.columns(5).ColumnWidth=20
xlWbk.ActiveSheet.Cells(row, 5).WrapText = True

row=row + 1

'Переходим к новому документу
Set docX=v.GetNextDocument(docX)
'Выводим счетчик, чтобы точно понять когда зависли и скоро ли overflow
Print row
Wend

'Если нужно выровнять столбец автоматически по ширине, то
' xlWbk.ActiveSheet.Columns(1).AutoFit
' xlWbk.ActiveSheet.Columns(2).AutoFit
' xlWbk.ActiveSheet.Columns(3).AutoFit
' xlWbk.ActiveSheet.Columns(4).AutoFit
'Но мне это ни к чему, я задал жестко ширину столбцов

'Выводим получившийся Excel файл на экран
xl.Visible=True

Автор: Joe1000




Ссылки:

К содержанию

© Copyright 2004-2017 - CMS Made Simple
Сайт работает на CMS Made Simple version 1.4.1

© Все печеньки Break-people.ru принадлежат авторам проекта.

Яндекс цитирования Рейтинг@Mail.ru Яндекс.Метрика