2016-05-23 26 views
0

Ich verwende die folgende Website als eine Anleitung zum Exportieren eines Lotus Notes-Datenbankformulars in eine CSV-Datei.LotusScript - Export-Formular mit Ausnahme einiger Felder

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 

Was auch immer einfacher ist, würde Ich mag die Felder angeben, die ich will den Export oder die gesamte Form mit Ausnahme einer bestimmten Gruppe von Feldern zu exportieren.

+0

Sagen Sie uns, was Sie versucht haben und was passiert ist, als Sie es versucht haben. –

Antwort

1

Ein anderer Weg, zu tun, was Knut Herrmann schlägt vor, in seiner Antwort eine Liste der Felder, die Sie, dann sind Sie in der ForAll Schleife exportieren möchten erstellen testen, ob eaxch Feld ist ein Mitglied dieser Liste:

Dim exportField List As String 

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

und die Schleife:

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

Es gibt einen Grund, warum ich eine Liste von Strings verwenden. Anstatt den Feldnamen dort zu platzieren, könnten Sie spezielle Formatierungsbefehle einfügen oder den Datentyp angeben. Dann in der Schleife verwenden Sie, dass die CSV-Ausgabe entsprechend zu formatieren:

Dim exportField List As String 

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

Dann schauen Sie einfach den Wert und die Ausgabe richtig formatiert werden.

0

form.Fields gibt die Namen aller Felder zurück. Test für diese Feldnamen einen Teil davon auszuschließen:

... 
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