excel export mit daten aus dialoglist

  • Hi...


    ich habe gerade einen Button erstellt und dieses export script hineinkopiert.


    Excel export


    Nun habe ich in der View aber ein Feld, das seine Daten aus einer Dialoglist mit multiple values, also Daten die mit einem Komma getrennt sind, bekommt.
    Wie ändere ich das script so ab, dass es dieses Feld auch in ein excel Feld hineinkopiert, ohne "type missmatch" Fehlermeldung...

    • Offizieller Beitrag

    mach vorher aus den Mehrfachwerten einen String.


    Geht im Script mit Join().


    Probier es mal mit dieser Zeile.
    xlCells(iZeile, iSpalte).Value = Join(doc.ColumnValues(iSpalte - 1),", ")


    Habs nicht getestet!


    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

  • das klappt schon mal wunderbar....


    Code
    ' Ansichtseinträge exportiereniSpalteCount = iSpalte	Set doc = view.GetFirstDocument	While Not doc Is Nothing		iZeile = iZeile + 1		For iSpalte = 1 To iSpalteCount			If (iSpalte= 5) Then				xlCells(iZeile, iSpalte).Value = Join(doc.ColumnValues(iSpalte - 1),", ")						Else						xlCells(iZeile, iSpalte).Value = Cstr(doc.ColumnValues(iSpalte - 1))			End If		Next		Set doc = view.GetNextDocument(doc)	Wend


    gibt noch ein Problem... manche Felder von denen sind leer...
    ich habe das aber nich abgefangen bekommen.


    kann da einer helfen?
    wollte sowas in der Art machen:



    Code
    For iSpalte = 1 To iSpalteCount
    			If (iSpalte= 5) Then
    				If (doc.ColumnValues(iSpalte - 1) = "") Then 
    					xlCells(iZeile, iSpalte).Value = Cstr("")
    				Else
    					xlCells(iZeile, iSpalte).Value = Join(doc.ColumnValues(iSpalte - 1),", ")			
    				End If
    			Else		
    				xlCells(iZeile, iSpalte).Value = Cstr(doc.ColumnValues(iSpalte - 1))
    			End If
  • Ok das die Felder lehr sind habe ich anderweitig unterbunden... jedoch liegt es an dem Join... der auch ein Type Missmatch ausspuckt, wenn nur ein Element in dem Feld steht und somit nichts zum joinen da ist...


    also müsste man ja vor dem joinen prüfen, ob mehrere Sachen im Feld stehen und wenn nicht dann auch mit join arbeiten.


    Oder?

  • In ColumnValues(i) steht nur dann ein Array drin, wenn in der Ansichtsspalte die Option Mehrfachwerte mit Neue Zeile anzeigen ausgewählt ist.
    Ansosnten steht da immer ein String drin, also nichts womit Join arbeiten könnte

  • :-? wo soll das stehen? In der view bei Spalteneigenschaften???


    Also wie gesagt der Inhalt der Spalte kommt aus einem DialogList Feld, in dem man mindestens eins oder auch mehrere Sachen anklicken kann.


    Code
    xlCells(iZeile, iSpalte).Value = Join(doc.ColumnValues(iSpalte - 1),", ")


    klappt bei den Feldern mit mehreren Werten wunderbar.
    Nur bei denen wo wiederrum nur ein Wert drin steht, klappt es nicht.
    Ich kann mir nur schwer Vorstellen, dass Notes den Datentyp abhängig davon macht, ob in der Dialog List nur eine oder mehrere Sachen angeklickt sind.


    noch mal der derzeitige Codeabschnitt:

  • Doch genau das passiert.
    Schau dir doch mal die Ansicht an über die du an die Werte kommst.
    Dort wirst du sehen dass in denen Spalten wo du mehrere Werte drin hast diese untereinander stehen -> liefert also einen Array
    und bei denen wo nur einer drin steht nur einer steht -> liefert einen String

  • in der Ansicht stehen die Werte alle hintereinander mit Komma getrennt und die einzelnen halt allein.


    Gut ich glaub Dir ja das Notes die Datentypen ändert :) .
    Nun die wichtigere Frage ist, wie ich das überprüfe und abfange? Denn wenn es ein String ist sollte ja die Zeile :


    Code
    xlCells(iZeile, iSpalte).Value = Cstr(doc.ColumnValues(iSpalte - 1))


    ja wieder funktionieren.


    Ok also wie finde ich raus, ob >doc.ColumnValues< mehrere Werte oder nur einen enthält?

  • Ich arbeite mit IMPLODE. Da ist mir der Fehler noch nicht untergekommen.


    With xlSheet
    While Not docX Is Nothing
    col=1
    Forall cValue In docX.ColumnValues
    .Cells(row, col)=implode(cValue, Chr(10))
    continue:
    col=col+1
    End Forall
    row=row+1
    Set docX=v.GetNextDocument(docX)
    Wend
    End With