Autor Thema: excel import - script  (Gelesen 1533 mal)

Offline Rootine

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Weiblich
  • Lotus Domina ;)
excel import - script
« 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

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:excel import - script
« Antwort #1 am: 26.02.03 - 20:23:20 »
... kannst du ein Muster deiner Excel-Datei mit Dummy-Daten ins Forum stellen, oder mir zumailen... dann schau ich mal...

ata
Grüßle Toni :)

Offline Rootine

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Weiblich
  • Lotus Domina ;)
Re:excel import - script
« Antwort #2 am: 26.02.03 - 20:36:06 »
ups, die ist untergegangen...

lg
roo

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:excel import - script
« Antwort #3 am: 26.02.03 - 20:46:09 »
... ich hab noch 2 andere Sachen, dann werde ich mir dein Zip-File mal anschauen...

ata
Grüßle Toni :)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:excel import - script
« Antwort #4 am: 26.02.03 - 22:38:15 »
... 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

Grüßle Toni :)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:excel import - script
« Antwort #5 am: 26.02.03 - 23:20:03 »
... 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



Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz