ERROR: incorrect data type for operator or Function

  • Hallo,


    ich bekomme diese Fehlermeldung >>ERROR: incorrect data type for operator or Function <<
    nachdem ich mit diesem Script (freeware aus internet) eines CSV-Datei eingelesen habe


    >>
    Sub Initialize

    'will import from Excel up to 256 columns by 65,536 rows

    Dim session As New NotesSession
    Dim uiws As New NotesUIWorkspace
    Dim form As NotesForm
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim item As NotesItem
    Dim row As Long
    Dim xlFilename As String
    Dim xlsApp As Variant
    Dim xlsWorkBook As Variant
    Dim xlsSheet As Variant
    Dim rows As Long
    Dim cols As Integer
    Dim x As Integer
    Dim itemName As String
    Dim flag As Integer
    Dim formAlias As String
    Dim sortEval As String
    Dim sortedList As Variant
    Dim indexLo As Long
    Dim indexHi As Long


    On Error Goto ErrorHandler

    Set db = session.CurrentDatabase

    fn= uiws.Prompt(1, "Reminder- Excel Worksheet Setup", "Make sure that the first row of your worksheet contains EXACT the values as explained in Help file: Procedure: IMPORT FSDMS issues.")

    'Get Excel file name
    fn =uiws.OpenFileDialog(False, "Select the CSV-File to Import", "Excel files | *.csv", "c:\")
    xlFilename = Cstr(fn(0)) ' This is the name of the Excel file that will be imported

    'Get list of form names
    ' x=0

    ' Print "Preparing List of Database Forms ..."

    ' Forall f In db.Forms
    ' Redim Preserve formlist(x)
    ' formlist(x)=f.name
    ' x=x+1
    ' Print "Preparing List of Database Forms ..."& Cstr(x)
    ' End Forall

    'Sort the form names for the dialog box
    ' indexLo= Lbound(formlist)
    ' indexHi= Ubound(formlist)
    ' Call QuickSort(formlist , indexLo, indexHi)

    'Choose the form to use for import
    ' formname = uiws.Prompt(4, "Choose Import Form", "Please select which form is to be used for this input.", formlist(0), formlist)
    formname = "PDF_D"
    If formname= "" Then End

    'Get the form object so that we can check field names
    Set form= db.GetForm(formname)

    'If the form has an alias, use it to select the form
    If Not Isempty(form.Aliases) Then
    Forall a In form.Aliases
    formname=a
    End Forall 'a In form.Aliases
    End If 'Not Isempty(form.Aliases)

    'Next we connect to Excel and open the file. Then start pulling over the records.
    Print "Connecting to Excel..."

    ' Create the excel object
    Set xlsApp = CreateObject("Excel.Application")

    'Open the file
    Print "Opening the file : " & xlfilename
    xlsApp.Workbooks.Open xlfilename
    Set xlsWorkBook = xlsApp.ActiveWorkbook
    Set xlsSheet = xlsWorkBook.ActiveSheet
    xlsApp.Visible = False ' Do not show Excel to user
    xlsSheet.Cells.SpecialCells(11).Activate
    rows = xlsApp.ActiveWindow.ActiveCell.Row ' Number of rows to process
    cols = xlsApp.ActiveWindow.ActiveCell.Column ' Number of columns to process

    'Make sure we start at row 0
    row = 0
    Print "Starting import from Excel file..."

    Do While True
    row = row + 1

    'Check to make sure we did not run out of rows
    If row= rows+1 Then Goto Done

    'field definitions for notes come from first row (row, column)
    If row=1 Then
    For i=1 To cols
    Redim Preserve fd(i)
    'the replace function used here removes spaces from the field definitions in the first row
    fd(i)= Replace(xlsSheet.Cells( row, i ).Value, " ", "")

    flag=0

    Forall f In form.Fields
    If Lcase(fd(i)) = Lcase(f) Then flag=1
    End Forall 'f In form.Fields

    If flag=1 Then
    Goto Skip
    End If ' flag=1

    If Not flag=1 Then
    msg="The field name "& fd(i) &" does not appear in the form you have chosen. Exiting import."
    Msgbox msg
    Goto ErrorHandler
    End If 'flag=1

    Skip:
    Next 'For i=1 To cols
    End If 'row=1

    'Import each row into a new document
    If Not row = 1 Then

    'Create a new doc
    Set doc = db.CreateDocument
    doc.Form = FormName

    For i= 1 To cols
    Set item = doc.ReplaceItemValue( fd(i), xlsSheet.Cells( row, i ).Value )
    ' inserted to define the originator as author, hint from Rick Harroun
    If fd(i) = "Originator_T" Then doc.AuthorNames_T = xlsSheet.Cells( row, i ).Value
    Next ' i= 1 To cols

    'Save the new doc
    Call doc.Save( True, True )

    End If 'Not row = 1 Then

    Print "Processing document number "& Cstr(row) & " of " & Cstr(rows)

    Loop 'Do while true

    Done:

    Print "Disconnecting from Excel..."
    'Close the Excel file without saving (we made no changes)
    xlsWorkbook.Close False
    'Close Excel
    xlsApp.Quit
    'Free the memory that we'd used
    Set xlsApp = Nothing

    'Clear the status line
    Print " "


    ErrorHandler:
    If Err = 184 Then
    Msgbox "No file chosen. Exiting Import."
    Print "No file chosen. Exiting Import."
    Resume ErrorOut
    End If ' err=184

    If Err = 6 Then
    Messagebox "Make sure that you do not have more than 65,536 rows of data to import." ,MB_OK+MB_ICONINFORMATION,"Error! "
    Print "Too many rows in Excel document. Exiting Import. Disconnecting from Excel..."
    'Close the Excel file without saving (we made no changes)
    xlsWorkbook.Close False
    'Close Excel
    xlsApp.Quit
    'Free the memory that we'd used
    Set xlsApp = Nothing
    Resume ErrorOut
    End If ' err=184

    If (Err) And (Not Err = 184) And (Not Err = 6) Then

    Msgbox "Lotus Notes Error # " & Err &". Please contact your Notes administrator for help. Exiting Import."
    Print "Error # "& Err

    If Not xlsWorkbook Is Nothing Then
    xlsWorkbook.Close False
    End If ' Not xlsWorkbook Is Nothing

    If Not xlsApp Is Nothing Then
    xlsApp.Quit False
    End If 'Not xlsApp Is Nothing

    Resume ErrorOut

    End If '(Err) And (Not Err = 184) And (Not Err = 6)

    ErrorOut:

    End Sub
    <<


    Das Feld (Project) was in der Form belegt wird hat folgende Formel:
    >>
    cView1 := "($SystemLU)";
    Col := 1;
    Val:=@Unique(@DbColumn("Notes" : "NoCache"; ""; cView1; Col));
    @If(@IsError(Val);"No projects defined!" ; Val)
    <<


    Wenn in Der CSV-Datei das Feld, welches den Fehelr leifert der Wert [4.5F] drin steht, wird es ohne Fehler übernommen, wen jedoch nur [4.6] drin steht, wird der Wert als Datum [04.06.2010 00:00:00 CEDT]interpretiert.


    Nun habe ich gedacht, wenn ich den Wert n der CSV-Datei in “4.6“ setzet geht es vielleicht, leider nicht.


    Auch die Formel @text(Project)in der Ansicht "($SystemLU) hat nicht geholfen.


    Hat jemand einen Tipp. Im voruas vielen Dank.
    Ron

  • Hi,


    Wo kemmt denn der Fehler?
    Im Script (eher wohl nicht), Darstellung der Dokumente in einer Ansicht (eventuell)


    Wenn es die Darstellung in einer Ansciht ist, waere interessant zu wissen was in der betreffenden Spalte dargestellt werden soll.



    Andreas

    • Offizieller Beitrag

    Schau Dir mal die Fedltypen bei einem Importierten und einem von Hand (über die Maske erstellten Datensatz an.


    Eventuell musst Du den Import entsprechend anpassen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Der Fehler kommt in einer Ansicht, ein Doppleklick auf das Dokument öffnet aber das Dokument nicht.
    Angezeigt wird in der Ansicht in einer Spalte das Dokument.
    MfG
    Ron

    • Offizieller Beitrag

    über die Eigenschaften des Dokumentes kannst Du Dir die Felder (Typ und Inhalt) anschauen.


    Schau welche Felder in der Spalte benutzt werden und dann musst Du die Eigenschaften überprüfen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Der Fehler wird gleich in der Spalte angezeigt.
    Wenn ich nur das Feld anzeigen lassen will anstat <Project_T + "|" + Name_T> also nur <Project_T> gibt es keinen Fehler aber anstatt 4.6 wird das Datum 04.06.2010 00:00:00 angezeigt
    Ron

  • Krass, wenn ich in die Ansicht gehe in der der Fehler kommt, wird mir folgendes gezeigt:


    Field Name: Project_T
    Data Type: Time/Date
    Data Length: 8 bytes
    Seq Num: 1
    Dup Item ID: 0
    Field Flags: SUMMARY


    04.06.2010 00:00:00 CEDT


    Wähle ich ein Dokument welches den Importwert 4.5f hatte wird mir dies gezeigt:


    Field Name: Project_T
    Data Type: Text
    Data Length: 4 bytes
    Seq Num: 1
    Dup Item ID: 0
    Field Flags: SUMMARY


    "4.5F"


    Ron

  • Ist ja soweit auch komplett richtig.


    [4.6] -> interpretiert LN als Datumswert
    4.6 -> interpretiert LN aller Wahrscheinlickeit nach als Zahl
    4.5F -> interpretiert LN als Text


    Du musst also bei Deinem Import dafur sorgen, dass, egal wie der Wert aus dem CSV-File aussieht, er immer als Text in Dein Dokument geschrieben wird.



    Andreas

  • Wen ich in Excel die CSV-Datei öffne wird der Wert als 04.06.2010 interpretiert. Scheint wohl ein Excel problem zu sein, und das bei Deutscher Datums- und Zeiteinstellung.


    MfG
    Ron