Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Alperen15 am 15.02.11 - 10:13:47

Titel: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 10:13:47
.
Titel: Re: Excel Import
Beitrag von: ascabg am 15.02.11 - 10:16:54
Hallo,

Kleine Frage zu Begin.

Wo setzt Du denn die row auf einen Wert?


Andreas
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 10:18:58
Hallo Andreas...stimmt.... row = 2 müsste es dann sein weil in der ersten zeile sind die Überschriften....
Titel: Re: Excel Import
Beitrag von: atbits am 15.02.11 - 10:19:23
Den selben Agent haben wir doch schon hier breitgetreten!?!
http://atnotes.de/index.php/topic,50428.msg323829.html#msg323829
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 10:20:57
jep den Agent habe ich gelöscht und schief gings auch noch am besten neu anfangen  ;) mit m kühlen kopf
Titel: Re: Excel Import
Beitrag von: CarstenB am 15.02.11 - 10:55:41
Wo setzt Du denn die row auf einen Wert?

Wenn du die row gesetzt hast, funktioniert es. Oder bekommst du weitere Fehler?

Gruß
Carsten
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 11:01:49
.
Titel: Re: Excel Import
Beitrag von: atbits am 15.02.11 - 11:04:29
Du brauchst keinen FileHandle, wenn Du Excel über OLE generierst!
Titel: Re: Excel Import
Beitrag von: ascabg am 15.02.11 - 11:07:26
siehe FreeFile

Jedoch frage ich mich, wie Du eine Excel-Datei mit Open aufbekommen willst, um mit Seek zu positionieren.

Lies mal die Designer-Hilfe zu den beiden Themen FreeFile und Seek.


Andreas
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 11:11:53
.
Titel: Re: Excel Import
Beitrag von: atbits am 15.02.11 - 11:18:13
Verwende Option Declare
Titel: Re: Excel Import
Beitrag von: atbits am 15.02.11 - 11:19:19
Vermutlich soll da irgendwo noch ein
With xlSheet

stehen!
Titel: Re: Excel Import
Beitrag von: Grischu am 15.02.11 - 11:20:08
So wie ich das sehe entweder

Code
tmpKundennr = xlSheet.Cells( row, 1 ).Value 



oder

Code
With xlsheet
tmpKundennr = .Cells( row, 1 ).Value 

Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 14:15:23
Hallo alle zusammen.

es funktioniert zu mindest soweit, dass ich den ersten Kunden anhand seiner Kundennummer finde und die Felder befülle. Allerdings ist es eine Endlosschleife. Aussenrum müsste ich eine Do-Schleife machen.

Gibt es so ein ähnliches Befehl wie z.B. view.GetNextDocumentByKey() ????

         'While Not(vdoc Is Nothing)
      While Not (vdoc Is Nothing)
         'Set doc = New NotesDocument(db)   
         vdoc.Form = "maKundenetikett"
         vdoc.fdLayout1 = .Cells( row, 2 ).Value                   
         vdoc.fdLayout2 = .Cells( row, 3 ).Value                 
         vdoc.fdLayout_Ende = .Cells( row, 4 ).Value       
         vdoc.fdPLPA = .Cells( row, 5 ).Value               
         vdoc.fdFSPS = .Cells( row, 6 ).Value               
         vdoc.fdPUNr = .Cells( row, 7 ).Value
         
         
         Call vdoc.save(False,True)   
         
         Set vdoc = view.GetNextDocument(vdoc)
         tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         
      Wend
   End With
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 15:15:03
Du stocherst doch nur wild im Nebel, ohne zu wissen, was Du da eigentlich machst. Was willst Du denn mit einer Schleife über Notes-Dokumente? Kannst Du uns das erklären?

Du musst doch vielmehr ... na, das *musst* Du selber wissen, sonst bringt unsere Unterstützung hier gar nichts. Beschreibe uns, was für eine Schleife Du brauchst, und dann ist unsere Hilfe auch wieder sinnvoll.

Bernhard
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:18:32
meine Schleife soll in der Exceldatei die zweite zeile / 1.Spalte Kundennummer nehmen danach in der Ansicht suchen, dann die Felder befüllen. Danach in die 3. Zeile / 1.Spalte Kundennummer nehmen in der Ansicht nach dem Dokument suchen, Felder befüllen dann in die 4. Zeile usw....

Set vdoc = view.GetNextDocument(vdoc) ist Falsch von mir, weil ich in der Exceldatei die Kundennummer nehme und anhand dieser Nummer dann in der Ansicht suche...
Titel: Re: Excel Import
Beitrag von: Peter Klett am 15.02.11 - 15:25:07
Du musst die Zeilen hochzählen, angefangen hast Du ja schon mit row = 2

Denk noch daran, dass Du auch irgendwann wieder aufhören musst. Woran erkennst Du, dass die Tabelle zuende ist?
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 15:26:27
Genau, geht doch  ;)

Also brauchst Du eine Schleife (ideal hier: Fox .. Next) über Deine Excel-Rows. Das Innenleben (suchen und miodifizieren des Notes-Dokumemnts) bleibt gleich.

A-Bär: Du musst unbedingt den Fall abdecken, dass Du in Excel einen Wert liest, der keine Entsprechung in der Notes-Datenbank hat.

Bernhard

PS: Besonders pfiffig war es jetzt nicht, dass Du Deine bisherigen Postings gelöscht hast.
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:27:04
Erkennen tu ich es wenn tmpKundennummer = "" ist row = row +1 mache ich dann nachdem vdoc.save simmts?!
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:29:39
hier noch mal der aktuelle Stand

Sub Initialize   
   Dim session As New NotesSession
   Dim db As NotesDatabase   
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim rtitem As NotesRichTextItem, SendRtitem As NotesRichTextItem
   Dim itemReaders As NotesItem, itemReaders2 As NotesItem
   Dim object As NotesEmbeddedObject
   Dim row As Integer, written As Integer ,iWCount As Integer
   Dim colsum As Currency, colsum2 As Currency, colval As Currency, colname As Currency
   Dim Excel As Variant, xlWorkbook As Variant, xlSheet As Variant, vIntLeser(3) As Variant
   Dim One As String,  xlFilename As String
   Dim cRechname As String, cPathname As String
   Dim tmpKundennr As String
   Dim vdoc As NotesDocument
   Dim   i As String
   Dim filenum As Integer
   Dim pathName As String
   Dim cFilename As String
   Dim PathFileName As String
   
   pathName$ = "E:\TestKUR\Excel\*"
   cFilename$ = Dir$(pathName$ & "*.xls", 0)
   PathFileName = "E:\TestKUR\Excel\" & cFilename$
   
   iWCount = 1
   
   Set db = session.CurrentDatabase
   Set Excel = CreateObject( "Excel.Application" )      
   
   '  *** ---------------------- öffnet Excel File ---------------------------
   Excel.Visible = False
   
   Excel.Workbooks.Open PathFileName
   Set xlWorkbook = Excel.ActiveWorkbook
      'Set xlSheet = xlWorkbook.Worksheets(1)
   
      ' *** Einzelverbindungsnachweis: Liest die relevanten Felder aus Zeile 2, erstellt ein Dokument und verschickt ein Mail mit Doclink
   Set xlSheet = xlWorkbook.ActiveSheet                          ' *** Nur ein Sheet - wird hier definiert
   row = 2      
   
   With xlSheet
      
      tmpKundennr = .Cells( row, 1 ).Value
      Set view = db.GetView ("vwKundennummer")
      Set vdoc = view.GetDocumentByKey(tmpKundennr)
      
      
      While Not (vdoc Is Nothing)
         tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         vdoc.Form = "maKundenetikett"
         vdoc.fdLayout1 = .Cells( row, 2 ).Value                   
         vdoc.fdLayout2 = .Cells( row, 3 ).Value                 
         vdoc.fdLayout_Ende = .Cells( row, 4 ).Value       
         vdoc.fdPLPA = .Cells( row, 5 ).Value               
         vdoc.fdFSPS = .Cells( row, 6 ).Value               
         vdoc.fdPUNr = .Cells( row, 7 ).Value
         
         Call vdoc.save(False,True)   
         row = row + 1
         
         ' tmpKundennr = .Cells( row, 1 ).Value
         ' Set vdoc = view.GetDocumentByKey(tmpKundennr)
         
      Wend
   End With 
NextDoc:
      ' *** Disconnecting from Excel...            
   xlWorkbook.Close False          
   Excel.Quit
   Set Excel = Nothing
   
EndeAlles:
      'Exit Sub
End Sub
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 15:34:37
Und Du hast es doch nicht begriffen ...  >:(
Was willst Du mit der Schleife über vdoc?
Was erwartest Du, wenn Du bei der Gelegenheit Row hochzählst? Wie sollte Deiner Meinung nach denn dadurch mit der nächsten Excel-Row weiter gemacht werden??

Hast Du Dir das ganze schon mal auf Papier aufgemalt?? Spätestens da müsste der Blödsinn auffallen!

Bernhard
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:37:48
Nach drei mal durchläufe und erflogreich befüllte Felder. Springt er mir in der fett markierten stelle raus mit der Meldung "Object variable not set"

With xlSheet
      
      tmpKundennr = .Cells( row, 1 ).Value
      Set view = db.GetView ("vwKundennummer")
      Set vdoc = view.GetDocumentByKey(tmpKundennr)
      
      
      While Not (vdoc Is Nothing)
         tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         vdoc.Form = "maKundenetikett"
         vdoc.fdLayout1 = .Cells( row, 2 ).Value                   
         vdoc.fdLayout2 = .Cells( row, 3 ).Value                 
         vdoc.fdLayout_Ende = .Cells( row, 4 ).Value       
         vdoc.fdPLPA = .Cells( row, 5 ).Value               
         vdoc.fdFSPS = .Cells( row, 6 ).Value               
         vdoc.fdPUNr = .Cells( row, 7 ).Value
         
         Call vdoc.save(False,True)   
         row = row + 1
         
      Wend
   End With 
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:41:47
ich brauche doch meinen VDOC weil ich anhand der Kundennummer von der Exceldatei in der Ansicht nachdem Kunden suche und dann die Felder befülle..... falls es falsch ist könntet Ihr mir es erklären
Titel: Re: Excel Import
Beitrag von: Peter Klett am 15.02.11 - 15:42:19
Logisch! Wann setzt Du vdoc und wann überprüfst Du, ob es existiert?

Beachte auch, was Bernhard geschrieben hat. Die Schleife über vdoc ist zwar nicht total daneben, aber SEHR ungeschickt. Wenn Du die Schleife auf Deine Art korrekt schreibst, wirst Du den Effekt haben, dass der Import beim ersten nicht gefundenen Kunden aussteigt, obwohl danach noch mehr Kunden erfolgreich aktualisiert werden könnten. Also vergiss die vdoc-Schleife, dreh an der Quelle und nicht am Ziel ...

EDIT: Logisch bezieht sich auf "Object variable not set"
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:50:38
Du Peter.....also anstatt While Not (vdoc Is Nothing) wäre While Not (tmpKundennummer Is Nothing) besser?

Weil irgendwie muss ich doch wieder hochkommen nachdem vdoc.save und nach der neuen Kundennummer in der Ansicht suchen
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 15:51:34
Du liest offensichtlich nicht, was andere Dir schreiben ... Ich gebe auf, es hat wirklich keinen Zweck.

Bernhard
Titel: Re: Excel Import
Beitrag von: Alperen15 am 15.02.11 - 15:52:53
meine Frage ist Bernhard....wie schaffe ich es nachdem vdoc.save mit der neuen Kundennummer in der Ansicht nach dem Kunden zu suchen ohne der Schleife??
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 15:54:33
Was habe ich geschrieben?
Titel: Re: Excel Import
Beitrag von: atbits am 15.02.11 - 15:55:20
Das gleiche Spiel hatte wir im Dezember doch schon mal, mit dem gleichen Agenten.
Das macht mir keinen Spass  :-:
Titel: Re: Excel Import
Beitrag von: koehlerbv am 15.02.11 - 16:00:10
Exakt. Und nun soll der betreffende Arbeitgeber mal schauen, wie er aus der Nummer wieder rauskommt.
Titel: Re: Excel Import
Beitrag von: Peter Klett am 15.02.11 - 16:00:47
OK, letzter Versuch...

While Not (tmpKundennummer Is Nothing) ist sinngemäß machbar, aber syntaktisch nicht so

tmpKundennummer lesen
While tmpKundennummer <> ""
   Dokument suchen
   Wenn Dokument gefunden
      Dokument aktualisieren
   row = row + 1
   tmpKundennummer lesen
Wend

Übersetzen musst Du das jetzt selbst. Einziger nichtberücksichtigter Fehlerfall ist, wenn nach der letzten Kundennummer keine freie Zeile mehr übrig ist.