Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: chock am 12.08.10 - 09:14:35

Titel: Export in Excel
Beitrag von: chock am 12.08.10 - 09:14:35
Hallo Forum,

ich versuche eine Notes Ansicht in Excel zu exportieren. Als Vorlage hab ich das hier im Forum existierende Script genommen.
Dieses Script habe ich soweit erweitert, das es nur Daten von einem bestimmten User exportiert.

Läuft auch alles wunderbar, nur sobald bis ein Textfeld zwei Werte enthält kommt ein "Type Mismatch".

Beim Debug ist mir aufgefallen, das unter VIEWENTRY.COLUMNVALUES bei zwei Werten, bei

Was muss ich ändern das einfach die beiden Werte exportiert werden?
Danke

Script:
.
.
tmp1 = ws.Prompt (PROMPT_OKCANCELEDIT, _
  "Bitte Koordinator eingeben", _
  "Bitte nur Nachnamen eingeben")
.
.
Set viewentry = vc.GetFirstEntry()
   Do While Not (viewentry Is Nothing)
      Do While (viewentry.ColumnValues(0) = tmp1) Hier kommt der Type mismatch
      For iCols=1 To 17
.
.
Titel: Re: Export in Excel
Beitrag von: m3 am 12.08.10 - 09:20:17
Na da wird die erste Spalte Deiner View keinen Text (String) enthalten, sondern ein Datum, einen numerischen Wert, ....
Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 09:38:42
Hallo,

die erste Spalte im View enthält nur Text. Ich habe die Ausgabe vom Debug angehängt.

Gruß
Titel: Re: Export in Excel
Beitrag von: BMT216A am 12.08.10 - 10:32:00
Versuch mal, nur den ersten Wert des Feldes zu holen?

Feldname (0)

Vielleicht geht es so

Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 10:40:50
Ich hole den ersten Wert des Feldes mit Do While (viewentry.ColumnValues(0) = tmp1).

Aber das funktioniert nur solange ein Wert im View angezeigt wird.

Titel: Re: Export in Excel
Beitrag von: Kadlec am 12.08.10 - 12:37:32
Das liegt nicht an den Werten aus der Spalte sondern an dem Vergleichswert tmp1.
Dieser (ws.Prompt) ist vom Typ Variant während der Wert aus der Spalte ein String ist.

Boris
Titel: Re: Export in Excel
Beitrag von: Driri am 12.08.10 - 12:42:21
Zitat
Ich hole den ersten Wert des Feldes mit Do While (viewentry.ColumnValues(0) = tmp1).

Aber das funktioniert nur solange ein Wert im View angezeigt wird.

Wenn ich mir den Screenshot anschaue, dann bekommst Du so aber nicht einen String, sondern einen Array zurück. In dem zweiten Beispie, wo auch der Fehler auftritt, sieht man ja im Debugger-Fenster, daß ColumnValues(0) zwei Elemente enthält.
Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 13:18:33
Hallo,

nur wie bekomme ich die Werte aus dem Array? Müßte er nicht wenn ich auf das ColumnValues[0] zugreife beide Elemente nehmen?

Ich habe mal versucht den ersten Wert des Arrays zu bekommen -->

If IsArray(viewentry.ColumnValues(0)) Then
      x = ( UCase$(viewentry.ColumnValues(0,0)))
      'Else
      x = UCase$(viewentry.ColumnValues(0))
      'End IF

Dort kommt der Fehler: Worng number of arry subscripts

Titel: Re: Export in Excel
Beitrag von: Driri am 12.08.10 - 14:05:04
Versuchs mal mit (viewentry.ColumnValue(0))(0)
Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 14:14:55
Hallo,

diese Syntax nimmt der Designer nicht an. Schade.

Gruß
Titel: Re: Export in Excel
Beitrag von: Driri am 12.08.10 - 14:53:25
Ich habe zugegebenermaßen noch nicht viel mit direktem Zugriff auf Spaltenwerte gearbeitet.

Sonst weis doch den Inhalt von viewentry.ColumnValues(0) erstmal in eine Variant. Dann solltest Du da eigentlich drüber rankommen.

Dim spalte As Variant
...
spalte = viewentry.ColumnValues(0)

If IsArray(spalte) Then
   x = spalte(0)
Else
   x = spalte
End If
...
Titel: Re: Export in Excel
Beitrag von: botschi am 12.08.10 - 14:55:09
Oder mal mit der Spalte spielen  >:D
Also ich meine natürlich die Eigenschaften der Spalte ändern. "Mherfachwerte getrennt anzeigen", sortieren.

Ich muss aber auch gestehen, ich verstehe es immer noch nicht ganz...
Mal gehts, mal nicht, dann wieder nicht wenn die Spalte keinen Wert anzeigt, den Screenshot verstehe ich auch nicht...

Matthias
Titel: Re: Export in Excel
Beitrag von: botschi am 12.08.10 - 15:01:10
Aber warum machst Du es denn auch mit view.entry? Musst Du das unbedingt so machen?
Damit
Code
Dim ws As New NotesUIWorkspace
	Dim View As NotesView
	Dim uiview As NotesUIView
	
	Set uiview = ws.CurrentView
	Dim ndoc As NotesDocument
	
	Set View = db.GetView(uiview.ViewName)'("People")
	Set doc = view.GetFirstDocument
	If doc Is Nothing Then
		Msgbox "Keine Bestellungen"
		Exit Sub
	End If
und dann mit
Code
xlsheet.Cells(gvZeile, 1).Value = doc.bestellnummer(0) ' "Vorname"
	xlsheet.Cells(gvZeile, 2).Value = doc.firma(0) '"Nachname"
	xlsheet.Cells(gvZeile, 3).Value = doc.projektname(0) '"2. Vorname"
	xlsheet.Cells(gvZeile, 4).Value = doc.projektnr(0) '"Name"
	xlsheet.Cells(gvZeile, 5).Value = doc.projektleiter(0) '"Rufname"
	xlsheet.Cells(gvZeile, 6).Value = doc.ansprechpartner(0) '"E-Mail-Adresse"
	xlsheet.Cells(gvZeile, 7).Value = doc.kst(0) '"Straße (privat)"
usw
gehts doch zur Not auch...

Matthias
Titel: Re: Export in Excel
Beitrag von: m3 am 12.08.10 - 15:03:02
ViewEntry ist schneller, als der Zugriff auds Doc.
Titel: Re: Export in Excel
Beitrag von: botschi am 12.08.10 - 15:08:04
Ja, am Beckenrand ertrunken ist auch ertrunken  ;D
Oder in "Schönheit sterben"  ;D

8 Stunden probieren und nicht ans Ziel kommen oder 1 Stunde umschreiben und fertig sein?
Das goldene Abzeichen bekommen und/oder damit Geld verdienen oder einfach fertig werden?
Ist das eine einmalige Aktion oder eine wiederkehrende?
Wird das auf 10 oder 10.000 Doks ausgeführt?

Das kann natürlich nur "Chock" entscheiden  ;D

Matthias
Titel: Re: Export in Excel
Beitrag von: koehlerbv am 12.08.10 - 15:51:35
Sonst weis doch den Inhalt von viewentry.ColumnValues(0) erstmal in eine Variant. Dann solltest Du da eigentlich drüber rankommen.

Dim spalte As Variant
...
spalte = viewentry.ColumnValues(0)

If IsArray(spalte) Then
   x = spalte(0)
Else
   x = spalte
End If
...

Das ist schon der richtige Weg. Wenn man allerdings tatsächlich erwartet, dass da mal ein Array und mal ein skalarer Wert zurückgeliefert wird, so wäre vor dem jeweiligen Gebrauch des Variants dieses zu de-initialisieren (Erase) - sonst gibt es gleich wieder ein Type mismatch.

Bernhard
Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 16:58:49
Oder mal mit der Spalte spielen  >:D
Also ich meine natürlich die Eigenschaften der Spalte ändern. "Mherfachwerte getrennt anzeigen", sortieren.

Ich muss aber auch gestehen, ich verstehe es immer noch nicht ganz...
Mal gehts, mal nicht, dann wieder nicht wenn die Spalte keinen Wert anzeigt, den Screenshot verstehe ich auch nicht...

Matthias

Mit der Spalte habe ich schon gespielt, leider immer das selbe Ergebnis.

Es geht nur nicht, sobald ein Feld aus dem Dokument 2 Werte enthält. Dadurch funktioniert der Zugriff auf viewentry.ColumnValues[0] nicht mehr, weil automatisch ein Array entsteht. Siehe 2tes Bild.
Sonst funktioniert alles wunderbar.
Titel: Re: Export in Excel
Beitrag von: koehlerbv am 12.08.10 - 17:01:43
Christian, folge Ingos Vorschlag (anders wird es nur umständlich). Aus den einschläigigen Quellen kannst Du Dir auch Excel-Exporter herunterladen und Dir mal den Code anschauen - Du wirst bei funktionierenden Lösungen genau das von Ingo angeführte finden.

HTH,
Bernhard
Titel: Re: Export in Excel
Beitrag von: chock am 12.08.10 - 17:20:34
Christian, folge Ingos Vorschlag (anders wird es nur umständlich). Aus den einschläigigen Quellen kannst Du Dir auch Excel-Exporter herunterladen und Dir mal den Code anschauen - Du wirst bei funktionierenden Lösungen genau das von Ingo angeführte finden.

HTH,
Bernhard
Hallo Bernhard,

also mit Ingos Vorschlag funktioniert es:

If IsArray(viewentry.ColumnValues(0)) Then
                  a = viewentry.ColumnValues(0)
      Do While (a(0) = tmp1)
.
.
Else
   a = viewentry.ColumnValues(0)
      Do While (a = tmp1)

Das Problem was jetzt auftaucht ist, sobald er nun in der Do While Schleife bekomme ich den Wert von a nicht mehr umgesetzt. Ich glaube da muss ich Morgen nochmal schauen.
Titel: Re: Export in Excel
Beitrag von: Driri am 13.08.10 - 08:19:37
Wieso denn Do...While ? Da reicht doch völlig ein If a(0) = tmp1 bzw. If a = tmp1.
Titel: Re: Export in Excel
Beitrag von: umi am 18.08.10 - 11:13:25
Code
 
tmp1 = ws.Prompt (PROMPT_OKCANCELEDIT, _
  "Bitte Koordinator eingeben", _
  "Bitte nur Nachnamen eingeben")
.
.
Set viewentry = vc.GetFirstEntry()
   Do While Not (viewentry Is Nothing)
      Do While (viewentry.ColumnValues(0) = tmp1) Hier kommt der Type mismatch
      For iCols=1 To 17

Könnte man doch wie folgt umgehen
Code
do while not (viewentry is nothing)
v=join(evaluate({@if(@ismember("} & tmp1 & {";@explode("} & join(viewentry.columnvalues,";") & {";";"));"1";"0")}),"")
if (v="1") then

.....




Man könnte auch die View so umbauen, dass in der 1. Spalte keine Mehrfachwerte vorhanden sind......
Titel: Re: Export in Excel
Beitrag von: chock am 18.08.10 - 14:23:04
Hallo

danke für die ganzen Antworten. Konnte alle meine Probleme lösen.

Ich hole mir jetzt einfach nur die gesuchten Dokumente über:

Set vc = view.GetAllEntriesByKey(tmp1)

und lass mir dann die Werte aus den Ansichten in Excel importieren.

Do While Not (viewentry Is Nothing)
         For iCols=1 To 17
         vColValues=viewentry.ColumnValues(iCols)
         strColValue = AtImplode(vColValues, Chr(10))
         While InStr ( strColValue, Chr(13) ) > 0
         strColValue = Left$(strColValue, InStr ( strColValue,Chr(13) ) - 1) & "" & Right$(strColValue, Len(strColValue) - InStr ( strColValue, Chr(13) ))
         Wend
         vExcelSheet.Cells(iRows,iCols).Value = strColValue
      Next iCols
      iRows=iRows+1
      Set viewentry = vc.GetNextEntry(viewentry)


Ich werde den Vorschlag von umi nochmal testen.
Danke

Titel: Re: Export in Excel
Beitrag von: chock am 24.08.10 - 07:55:36
Hallo,

nun soll der Export so erweitert werden, das auch Dokumente aus 2 oder 3 Kategorien in Excel exportiert werden. In der View ist die erste Spalte nach dem Feld "Kategorie" sortiert. Wie bekomme ich es hin, das die Dokumnete der Kategorie z.B. A,B genommen werden?
Habe es schonmal mit FTSearch versucht, hat aber nicht funktioniert. Welche Möglichkeiten habe ich?

Danke

Gruß