2016-05-23 4 views
0

Я использую следующий сайт в качестве руководства по экспорту формы базы данных Lotus Notes в файл csv.LotusScript - Export Form, за исключением некоторых полей

http://searchdomino.techtarget.com/tip/How-to-export-data-from-a-Lotus-Notes-database-to-a-CSV-file

Sub Initialize 

    Dim session As New NotesSession 
    Dim db As NotesDatabase 
    Dim fileName As String 
    Dim fileNum As Integer 
    Dim headerstring As String 
    Dim values As String 
    Dim selection As String 
    Dim collection As NotesDocumentCollection 
    Dim doc As notesdocument 

    On Error Resume Next 

    Set db = session.CurrentDatabase 

    Forall form In db.Forms 
     If Isempty(form.Fields) Then 
      Messagebox form.Name & " has no fields" 
     Else 
'Specify what form you want to export   
      If form.Name = "Server Information" Then    
       fieldCount = 0 
       msgString = "" 
       fileNum% = Freefile() 
       fileName$ = "c:\temp\LOTUS_EXPORT\" & form.Name & ".csv" 
       Open FileName$ For Output As fileNum% 

       Forall field In form.Fields 
        msgString = msgString & Chr(10) & _ 
        "" & field 
        fieldCount = fieldCount + 1 
        headerstring=headerstring & |"| &field &|",| 
       End Forall 

       Write #fileNum%, |",| & headerstring & |"| 
       headerstring="" 
      Else 
      End If 


     End If 



     selection = |Form="| & form.Name & |"| 
     Set collection=db.Search(selection, Nothing, 0) 

     For x = 1 To collection.count 
      Set doc =collection.GetNthDocument(x) 
      values="" 
      Forall formfield In form.Fields 
        Forall formfield.value != 'AdditionalDocumentation' 
       newvalue=doc.GetItemValue(formfield) 
       values=values & |"| & newvalue(0) & |",| 
      End Forall 
      End Forall 

      Write #fileNum%, |",| & values &|"| 
      values="" 
     Next 

'now check aliases 
     If Isempty(form.Aliases) Then 
'Messagebox form.Name & " has no aliases" 
     Else 
      Forall aliaz In form.Aliases 
       If aliaz = form.Name Then 
        Goto NextAliaz 'alias is same as form name 
       End If 
       selection = |Form="| & aliaz & |"| 
       Set collection=db.Search(selection, Nothing, 0) 

       For x = 1 To collection.count 
        Set doc =collection.GetNthDocument(x) 
        values="" 
        Forall formfield In form.Fields 
         newvalue=doc.GetItemValue(formfield) 
         values=values & |"| & newvalue(0) & |",| 
        End Forall 

        Write #fileNum%, |",| & values &|"| 
        values="" 
NextAliaz: 
       Next 
      End Forall 
     End If 

     Close fileNum% 
    End Forall 

End Sub 

Какой бы проще, я хотел бы указать поля, которые я хочу, чтобы экспортировать или экспортировать всю форму, за исключением определенного набора полей.

+0

Сообщите нам, что вы пробовали, и что произошло, когда вы его попробовали. –

ответ

1

Другой способ сделать то, что говорит Кнут Herrmann в его ответ, чтобы создать список полей, которые вы хотите экспортировать, а затем в цикле ForAll вы проверить, если eaxch поле является членом этого списка:

Dim exportField List As String 

exportField("FieldOne") = "FieldOne" 
exportField("FieldTwo") = "FieldTwo" 
exportField("FieldFive") = "FieldFive" 

И петля:

ForAll formfield In form.Fields 
    If IsElement(exportField(formfield)) Then 
     newvalue=doc.GetItemValue(formfield) 
     values=values & |"| & CStr(newvalue(0)) & |",| 
    End If  
End ForAll 

Существует причина, я использую список строк. Вместо того, чтобы помещать там имя поля, вы можете добавить специальные команды форматирования или указать тип данных. Затем в цикле вы используете, что формат вывода CSV соответственно:

Dim exportField List As String 

exportField("FieldOne") = "T" '*** Text 
exportField("FieldTwo") = "DT" '*** Date and Time 
exportField("FieldFive") = "N" '*** Numeric 
exportField("FieldSix") = "D" '*** Date only 

Тогда вы просто проверить значение и формат вывода правильно.

0

form.Fields возвращает имена всех полях. Тест для этого имена полей, чтобы исключить некоторые из них:

... 
ForAll formfield In form.Fields 
    If formfield <> "AdditionalDocumentation" And formfield <> "AnotherFieldName" Then 
     newvalue=doc.GetItemValue(formfield) 
     values=values & |"| & CStr(newvalue(0)) & |",| 
    End If  
End ForAll 
Смежные вопросы