Autor Thema: Excel upload  (Gelesen 7502 mal)

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Excel upload
« am: 08.12.11 - 11:26:30 »
Hallo Spezialisten,

ich habe eine xls Datei die erste Zeile sind die Überschriften Kundennummer, Kundenname usw.... ab Zeile zwei kommen die Inhalte.
Ich möchte in der xls Datei die Kundennumer nehmen als key definieren in der Ansicht suchen, wenn die Kundennummer nicht exisitert möchte ich ein neues Dokument anlegen mit deren Feldinhalt

Wird der Kunde gefunden soll er nichts tun und die nächste Zeile analysieren. hier mein Quellcode

Die Stelle wo der Debugger eine Fehlermeldung bringt habe ich markiert.

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\LCU\*"
   cFilename$ = Dir$(pathName$ & "*.xls", 0)
   PathFileName = "E:\TestKUR\LCU\" & 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)
   
   Set xlSheet = xlWorkbook.ActiveSheet                          ' *** Nur ein Sheet - wird hier definiert
   row = 2      
   
   With xlSheet
      
      tmpKundennr = .Cells( row, 1 ).Value
      Set view = db.GetView ("vwLogistik")
      While tmpKundennr <> ""
         'tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         
         
         If   vdoc Is Nothing Then                --> Fehlermeldung: Object Variable not set
            vdoc.Form = "maLCU"
            vdoc.txCustNo = .Cells( row, 2 ).Value
            vdoc.txCustName = .Cells( row, 3 ).Value                   
            vdoc.fdMandant = .Cells( row, 4 ).Value                 
            vdoc.fdAnzahlMA = .Cells( row, 5 ).Value       
            vdoc.fdBranche = .Cells( row, 6 ).Value               
            vdoc.fdAPKunde = .Cells( row, 7 ).Value               
            vdoc.fdUmsatzAktiv = .Cells( row, 8 ).Value
            vdoc.fdUmsatzPassive = .Cells( row, 9 ).Value
            vdoc.fdUmsatzEMechanik = .Cells( row, 10 ).Value
            vdoc.fdUmsatzTotal = .Cells( row, 11 ).Value
            vdoc.fdMargeAktiv = .Cells( row, 12 ).Value
            vdoc.fdMargePassive = .Cells( row, 13 ).Value
            vdoc.fdMargeEMechanik = .Cells( row, 14 ).Value
            vdoc.fdUmsatzAktiv_1 = .Cells( row, 15).Value
            vdoc.fdUmsatzPassive_1 = .Cells( row, 16 ).Value
            vdoc.fdUmsatzEMechanik_1 = .Cells( row, 17 ).Value
            vdoc.fdUmsatzTotal_1 = .Cells( row, 18 ).Value
            
            vdoc.fdMargeAktiv_1 = .Cells( row, 19 ).Value
            vdoc.fdMargePassive_1 = .Cells( row, 20 ).Value
            vdoc.fdMargeEMechanik_1 = .Cells( row, 21 ).Value
            vdoc.fdUmsatzAktiv_2 = .Cells( row, 22 ).Value
            vdoc.fdUmsatzPassive_2 = .Cells( row, 23 ).Value
            vdoc.fdUmsatzEMechanik_2 = .Cells( row, 24 ).Value
            
            vdoc.fdUmsatzTotal_2 = .Cells( row, 25 ).Value
            vdoc.fdMargeAktiv_2 = .Cells( row, 26 ).Value
            vdoc.fdMargePassive_2 = .Cells( row, 27 ).Value
            
            vdoc.fdMargeEMechanik_2 = .Cells( row, 28 ).Value
            
            Call vdoc.save(False,True)   
            row = row + 1
            tmpKundennr = .Cells( row, 1 ).Value
         Else
            row = row + 1
            tmpKundennr = .Cells( row, 1 ).Value
         End If
         
         
      Wend
   End With 
NextDoc:
      ' *** Disconnecting from Excel...            
   xlWorkbook.Close False          
   Excel.Quit
   Set Excel = Nothing
End Sub

Offline tge

  • Junior Mitglied
  • **
  • Beiträge: 65
Re: Excel upload
« Antwort #1 am: 08.12.11 - 11:32:45 »
Ist die Spalte der Ansicht, in der nach der Kundennummer gesucht wird, kategoriert?

Ist im Debugger erkennbar, dass "tmpKundennr" beim GetDocumentByKey überhaupt die entsprechende Kundennummer enthält?

Gruß
Thorsten

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #2 am: 08.12.11 - 11:34:13 »
In der angegebenen Zeile kann es eigentlich gar nicht knallen. Passiert das nicht eher in der Zeile davor?

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Re: Excel upload
« Antwort #3 am: 08.12.11 - 11:42:03 »
Hallo Thorsten

stimmt du hast völlig Recht, Ich habe die Ansicht nach Kundennummer kategorisiert, Denn Debugger laufen lassen

In der xls file habe ich zwei Zeilen befüllt, in der ersten Zeile habe ich eine Kundennummer eingetragen die in der Datenbank exisiert  --> Da trägt der Agent nichts ein, stimmt so

in der zweiten Zeile habe ich eine Nummer eingetrage die in der DB nicht existiert.... und aus den ganzen Feldinhalte soll der Agent ein neues Dokument erstellen
Fehlermeldung Object variable not set stelle habe ich markiert

With xlSheet
      
      tmpKundennr = .Cells( row, 1 ).Value
      Set view = db.GetView ("vwUpload")
      While tmpKundennr <> ""
         'tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         
         'If Not vdoc Is Nothing Then
         If   vdoc Is Nothing Then
            vdoc.Form = "maLCU" --> Object variable not set
            vdoc.txCustNo = .Cells( row, 2 ).Value
            vdoc.txCustName = .Cells( row, 3 ).Value                   
            vdoc.fdMandant = .Cells( row, 4 ).Value                 
            vdoc.fdAnzahlMA = .Cells( row, 5 ).Value     

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #4 am: 08.12.11 - 11:45:47 »
Hallo,
vdoc exisitiert nicht und Du möchtest diesem Nichts etwas zuweisen. Ein New muß wohl erstmal her

Christian Kröll

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Re: Excel upload
« Antwort #5 am: 08.12.11 - 11:55:08 »
stimmt du hast recht hat geklappt dankeschön =)

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Re: Excel upload
« Antwort #6 am: 08.12.11 - 14:02:53 »
Hallo alle zusammen.

ich war mal am testen, da haben sich folgende Fehler sich herausgestellt.
1. wie schon eben erwähnt habe ich zwei kunden in der File die eine Kundennummer (Kunde A) existiert in der Ansicht und die andere Kundennummer (Kunde B))habe ich frei erfunden,

2. Den Kunden (Kunde A) der in der DB existiert, wird kein neues Dokument erstellt
3. Bei Kunde B wird ein neues Dokument erstellt so wie ich es mir vorgestellt

Wenn ich den Agenten erneut starte sollte er mir keine neuen Dokumente erstellen. Da Kunde A Kunde B bereits existiert.
Der Kunde B wird aber erneut angelegt somit habe ich das selbe Dokument mehrmals  ???  ???  ???  ???

Excel.Workbooks.Open PathFileName
   Set xlWorkbook = Excel.ActiveWorkbook
      'Set xlSheet = xlWorkbook.Worksheets(1)
   
   Set xlSheet = xlWorkbook.ActiveSheet                          ' *** Nur ein Sheet - wird hier definiert
   row = 2      
   
   With xlSheet
      
      tmpKundennr = .Cells( row, 1 ).Value
      Set view = db.GetView ("vwUpload")
      While tmpKundennr <> ""
         'tmpKundennr = .Cells( row, 1 ).Value
         Set vdoc = view.GetDocumentByKey(tmpKundennr)
         
         If   vdoc Is Nothing Then
            Set vdoc = New NotesDocument(db)   
            vdoc.Form = "maLCU"
            vdoc.txCustNo = .Cells( row, 1 ).Value
            vdoc.txCustName = .Cells( row, 2 ).Value                   
            vdoc.fdMandant = .Cells( row, 3 ).Value                 
            vdoc.fdAnzahlMA = .Cells( row, 4 ).Value       
               
            
            Call vdoc.save(False,True)   
            row = row + 1
            tmpKundennr = .Cells( row, 1 ).Value
         Else
            row = row + 1
            tmpKundennr = .Cells( row, 1 ).Value
         End If
         
      Wend
   End With 
NextDoc:
      ' *** Disconnecting from Excel...            
   xlWorkbook.Close False          
   Excel.Quit
   Set Excel = Nothing
End Sub

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #7 am: 08.12.11 - 14:05:03 »
Dann kläre, warum das Dokument in der Ansicht nicht gefunden wird. Eine Möglichkeit wäre, dass die Ansicht gar nicht schnell genug aktualisiert wird.

Bernhard

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Re: Excel upload
« Antwort #8 am: 08.12.11 - 14:12:07 »
also vom Script her sieht ihr auch keine Fehler oder?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #9 am: 08.12.11 - 14:19:09 »
Ich tippe auch eher darauf, dass die Ansicht nicht aktualisiert wurde. Daher würde ich beim Initialisieren der Ansicht diese refreshen

Set view = ...
Call view.Refresh

Wenn das dann auch nicht funktioniert, schau Dir die erste Spalte der Ansicht an, vielleicht werden da führende Nullen vorangesetzt.

Kunde A ist 11111 der funktioniert, Kunde B ist 2222, wird aber als 02222 in der Ansicht dargestellt.

Noch ein Hinweis: Verwende unbedingt Set vdoc = view.GetDocumentByKey(tmpKundennr, True), sonst findet Kundennummer 1234 den Kunden 12345

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #10 am: 08.12.11 - 14:24:25 »
also vom Script her sieht ihr auch keine Fehler oder?

Das Script schaue ich mir erst gar nicht an, solange wichtige Informationen fehlen.
Vorhin war ja auch die Fehlerzeile falsch angegeben ...

Bernhard

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #11 am: 08.12.11 - 15:06:36 »
Hallo,

wäre es nicht sinnvoll, statt auf die sich verändernde view zuzugreifen. die Kunden in eine collection einzulesen und dann nur auf diesen fixen Datenbestand zuzugreifen?

viele Grüße
Christian Kröll

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #12 am: 08.12.11 - 16:00:27 »
In der Collection hast Du aber kein GetDocumentByKey. Ich mache das i.d.R. so, dass ich die vorhandenen Kundennummern in eine Liste (Dim kundennummern List As Integer) einlese, und dagegen vergleiche.

Man muss natürlich die Rahmenbedingungen beachten. In einer Datenbank mit vielen Dokumenten, in die nur ein paar nachimportiert werden sollen, ist es performanter, in der Ansicht nachzuschauen.

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Excel upload
« Antwort #13 am: 08.12.11 - 16:05:32 »
Danke Peter für Deinen Gedanken dazu
Christian Kröll

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz