О чем этот текст?
Допустим ты на лету выводишь во 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
Ссылки:
К содержанию