2016-05-23 3 views
0

以下のサイトを参考にして、Lotus Notesデータベースフォームをcsvファイルにエクスポートしています。これまでに簡単です一部のフィールドを除くLotusScript - エクスポートフォーム

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

をクヌートハーマンは彼の答えに示唆して何をするもう一つの方法は、エクスポートするフィールドのリストを作成することで、その後のForAllループであなたがどうかをテスト

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 

私は文字列のリストを使用する理由はありeaxchフィールドには、そのリストのメンバーです。そこにフィールド名を入れるのではなく、特別なフォーマットコマンドを入力するか、データタイプを指定することができます。そして、あなたはそれに応じて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 
関連する問題