Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Rootine am 26.02.03 - 20:14:01
-
hallo scripter
ich hab in einer datenbank ein script um excelzeilen ind ie zwischenablage zu bringen und dann in die db zu schreiben, nur funzt das leider nicht, aber mein cheffe bildet sich das ein (ich hab ja gemeint die leute sollen gleich eine ganze tabelle importieren)
die excel tabelle schaut so aus
datum, Kostenstelle, Aufgabe, inst/org/Projekt, Dauer, Beschreibung,#(als trennzeichen)
die zellen werden markiert, und dann in ein rtf feld als text übernommen
die dokumente will dann ich so erstellen:
Sub Click(Source As Button)
Dim ws As New notesuiworkspace
Dim UIDoc As notesuidocument
Set UIDoc=ws.currentdocument
Dim AktuellerDS As String
Dim AktZeile As Integer
Dim AnzFehler As Integer
Dim AnzFalscherDS As Integer
REM Dim filenum As Integer
REM filenum=Freefile
Call UIDoc.FieldSetText("EinfügeDokumentFehler", "")
Feld1=UIDoc.FieldGetText("RTF")
'Bestimmung der Anzahl der Zeilen durch:
'Bestimmung der Anzahl der #
AnzZeilen=0
For i = 1 To Len(Feld1)
If Mid$(Feld1, i, 1) = "#" Then AnzZeilen=AnzZeilen+1
Next
REM Print "Anzahl der Zeilen = " & AnzZeilen
'Wenn gar keine "#" vorkommen, dann wurde keine richtige Tabelle eingefügt!
If AnzZeilen=0 Then
Msgbox "Der eingefügte Text entspricht nicht der Schnittstellenkonvention"
Exit Sub
End If
'Anmerkung: das "#" ist das Ende einer Zeile
'Die x Zeilen (entspricht der Anzahl der Datensätze) können nun als Dokumente eingefügt werden
AktZeile=0
AktPos=1
AnzFehler=0
AnzFalscherDS = 0
For j=1 To AnzZeilen
AktZeile = AktZeile + 1
REM Open "d:\WoBDB\RTF.txt" For Output As #filenum
'Position des Endes der aktuellen Zeile ermitteln
'Das Ende muß gleich beim nächsten "#" sein
BeginnPosZeile=AktPos
EndPosZeile=Instr(AktPos, Feld1, "#")+1 'Suchen des nächsten "#" als Zeilenende
LaengeZeile=EndPosZeile-BeginnPosZeile - 2 'minus 2 deshalb, weil der letzte Tab und das "#" nicht mitgerechnet werden darf
AktuellerDS=Mid$(Feld1, BeginnPosZeile, LaengeZeile)
AktPos=EndPosZeile
REM Write #Filenum,AktuellerDS
REM Close #Filenum
'Überprüfen, ob der DS den Konventionen entspricht (keine neuen KSt, Aufgabe, Inst/Org/Proj
If Datensatz_OK (AktuellerDS, AktZeile, AnzFehler)=False Then
AnzFalscherDS = AnzFalscherDS + 1
'AnzFehler = AnzFehler + 1
'Print "Aus Script 'Schaltfläche Docs erstellen' ausgestiegen"
End If
Next
If AnzFehler > 0 Then
Antwort = Msgbox("Es wurden " & AnzFehler & " Fehler im Text gefunden." & Chr(10) & _
"Bitte korrigieren Sie diese und klicken Sie anschließend erneut auf '2 Docs erstellen'." & Chr(10) & Chr(10) & _
"Wollen Sie die Seite drucken?", MB_ICONEXCLAMATION + MB_YESNO, "Seite Drucken?")
If Antwort = IDYES Then
Call UIDoc.print(1) '1 Kopie des ganzen Dokuments
End If
Exit Sub
End If
Messagebox "Alles akzeptiert!" & Chr(10) & "Jetzt werden die Dokumente erstellt", 64
AktZeile=0
AktPos=1
Print " *** Daten einfügen beginnt *** "
For j=1 To AnzZeilen
AktZeile = AktZeile + 1
'Position des Endes der aktuellen Zeile ermitteln
'Das Ende muß gleich beim nächsten "#" sein
BeginnPosZeile=AktPos
EndPosZeile=Instr(AktPos, Feld1, "#")+1 'Suchen des nächsten "#" als Zeilenende
LaengeZeile=EndPosZeile-BeginnPosZeile - 2 'minus 2 deshalb, weil der letzte Tab und das "#" nicht mitgerechnet werden darf
AktuellerDS=Mid$(Feld1, BeginnPosZeile, LaengeZeile)
AktPos=EndPosZeile
Call Datensatz_einfuegen (AktuellerDS, AktZeile)
Next j
Call UIDoc.FieldSetText("AnzEingefDoks", Cstr(AnzZeilen))
Messagebox "Daten einfügen abgeschlossen"
Print " *** Daten einfügen abgeschlossen *** "
Call UIDoc.save
Call UIDoc.close
End Sub
nur mag mich das ding net, will heissen es geht net. es meint dass die daten nicht stimmen, oder dass das dokument gelöscht wurde oder sonstige spompanadln. ich bin leider ein script-nackabatzl und würde eure hilfe brauchen, wenn wer grad zeit hat.
danke
lg
roo
-
... kannst du ein Muster deiner Excel-Datei mit Dummy-Daten ins Forum stellen, oder mir zumailen... dann schau ich mal...
ata
-
ups, die ist untergegangen...
lg
roo
-
... ich hab noch 2 andere Sachen, dann werde ich mir dein Zip-File mal anschauen...
ata
-
... das kann so nicht gehen, da du versucht ein Rich-Text-Feld mit uidoc.FieldGetText auszulesen...
... wenn es ein Textfeld ist, dann funktionierts nicht, weil du keine TabSprünge in einem Textfeld verwenden darfst, und genau das wird quittiert mit der Fehlermeldung, das die Schnittstellenkonventionen nicht eingehalten werden...
... ich werde noch ein wenig damit probieren, interssiert mich, wie das zu lösen ist...
ata
-
... ich bin schlauer geworden...
... beim Einfügen des Zwischenseichers aus Excel fügt Notes keinen Text in das Richtextfeld, sondern eine Grafik - wenn man Text haben möchte, so muß man das Notes extra signalisieren mit ...
Bearbeiten | Selektiv einfügen | Als Text
... dann hat ein Richtextfeld erst dann einen Inhalt, wenn es gespeichert wurde - vor dem Auswerten des Feldes also das Dokument speichern...
... mit
Set item = docThis.GetFirstItem("RTF")
If item.Type = 1 Then
Feld1 = item.Text
End If
... kannst du dann den Text des Richtextfeldes einlesen - der Rest deiner Funktion dürfte funktionieren, wenn er mit der Zeichen-für-Zeichen-Auswertung sicherlich noch nicht optimiert ist - es gibt in der Forums-Library-DB Funktionen, die @Explode per Script emulieren, damit kannst du die Anzahl der Datensätze schneller ermitteln und bekommst die Zeilen in ein Array, daß dann DS für DS weiterverarbeitet werden kann...
ata ;D ;D ;D