Autor Thema: Zugriff auf Excel Tabelle  (Gelesen 3422 mal)

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Zugriff auf Excel Tabelle
« am: 22.07.13 - 11:16:16 »
Ich greife auf eine Excel-Tabelle zu um Werte auszulesen.
In der einen Tabelle habe ich verschiedene Reiter, die ich beim Auslesen berücksichtigen muss.
Mit diesem Script greift er nur auf den aktuellen Reiter zu. Wie kann ich den Sheet fest bestimmen ?

Set xl = CreateObject( "Excel.Application")
xl.Workbooks.Open xlFilename ' Open the Excel file
Set xlWorkbook = xl.ActiveWorkbook
Set xlSheet = xlWorkbook.ActiveSheet

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Zugriff auf Excel Tabelle
« Antwort #1 am: 22.07.13 - 11:20:24 »
xl.Sheets ("Name des Sheets").Select

Du kommst darauf, indem Du in Excel ein Macro aufzeichnest und dann die Tabelle wechselst. Danach schaust Du Dir das generierte VBA-Script an und kannst das sinngemäß übernehmen.

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Zugriff auf Excel Tabelle
« Antwort #2 am: 22.07.13 - 12:07:39 »
super,  Danke das habe ich hinbekommen !

Jetzt habe ich ein neues Problem.

Wenn ich die Excel -Datei im geöffneten Notes-Dokument bearbeite und speicher muss ich im Anschluss das Notes-Dokument einmal schließen damit die geänderten Werte in der Excel-Tabelle im Notes-Dokument auch richtig übernommen werden werden.

Gibt es dafür auch einen Trick ohne das Dokument schließen zu müssen ?

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zugriff auf Excel Tabelle
« Antwort #3 am: 22.07.13 - 16:27:06 »
Frage zu deiner Frage.
Was heist bei dir "im geöffneten Dokument"?

Ist das Excel Sheet im Notes Document enthalten? Als Object?
Oder als Attachment und du öffnest es beim öffnen des Notes documents?
Oder hast du einen eigenen Mechanismus eingebaut?
Oder holst du "nur" Werte aus einem Excel Sheet, das ganz woanders im File System gespeichert wurde?

Dein "greife zu" lässt eigentlich darauf schließen, das du es von irgendwo anders her holst. Dazu passt aber dein "neues Problem" nicht.

Der Rest ist Glaskugel.
Schau mal in die Dokumentation des Richtext Items. Da steht so was drin "Modifications made to rich text items on the back-end document do not appear on the current document until it is closed and reopened." Das bedeutet, eigentlich, das du auch programmtechnisch einen UIDocClose und Reopen machen musst um Backend Änderungen am Richtext Feld ins Frontend zu bekommen.
Hier http://searchdomino.techtarget.com/tip/Modify-a-rich-text-field-in-the-UI-without-having-to-save-and-re-open gibt es eine Anleitung wie das auch ohne Save gehen soll, aber das Dokument muss vorher mindestens einmal gespeichert worden sein.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Zugriff auf Excel Tabelle
« Antwort #4 am: 23.07.13 - 10:03:30 »
Hallo Thomas,

Vielen Dank für Deine Antwort !

In einem geöffneten Notesdokument bearbeite ich eine bestehende Exceltabelle, die ich im Anschluß speichere.
Anschließend sollen per Button im gleichen immer noch offenen Notes-Dokument einige Werte aus der Excel-Tabelle ausgelesen werden und im Notes-Dokument gespeichert werden.Das funktioniert auch. Aber ich muss nach dem Bearbeiten der Excel-Datei das Notes-Dok vorher einmal schließen.

Deinen o.a. Code habe ich mal getestet. Die geänderten Daten in der Exceltabelle werden über diesen Weg aber nicht übernommen:

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim thisdb As NotesDatabase
   Dim thisdoc As NotesDocument
   
   Dim rtitem As NotesRichTextItem
   Dim nitem As Variant
   
   Dim olduidoc As NotesUIDocument
   Dim newuidoc As NotesUIDocument
   
   Set thisdb = s.CurrentDatabase
   
   Set olduidoc = ws.CurrentDocument
   Set thisdoc = olduidoc.Document
   
   If thisdoc.IsNewNote Then
      Set nitem = thisdoc.CreateRichTextItem( "tabelle" )
   End If
   
   Set nitem =    thisdoc.GetFirstItem( "tabelle" )
   
   If ( nitem.Type = RICHTEXT ) Then
      Set rtitem = nitem
      Call rtitem.Appendtext("TESTLAUF")
      Call rtitem.Update
   End If
   
   thisdoc.SaveOptions = "0"
   Call olduidoc.Close(True)
   Set newuidoc = ws.EditDocument(True, thisdoc)
   Delete olduidoc
   Set thisdoc = newuidoc.Document
   Call thisdoc.RemoveItem( "SaveOptions" )
   
End Sub





Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Zugriff auf Excel Tabelle
« Antwort #5 am: 23.07.13 - 10:15:45 »
Somit lese ich die Werte aus der Excel-Tabelle aus:

'Excel Beschluss-Doc auslesen (Excel Tabelle)
   If Not doc.HasEmbedded Then
      Msgbox "Kein Beschluss-Dokument vorhanden !",, "Hinweis"
      Exit Sub
   End If
   pfad = "u:\"
   zaehler = 0
   Dim rtitem As Variant
   Dim object As NotesEmbeddedObject
   Set rtitem = doc.GetFirstItem( "tabelle" )
   If doc.HasEmbedded Then
      Call doc.ComputeWithForm( False, False )
      Call doc.Save( False, True )
      If ( rtitem.Type = RICHTEXT ) Then
         Forall o In rtitem.EmbeddedObjects
            If ( o.Type = EMBED_ATTACHMENT ) Then
               Redim Preserve dateinamen (Cint(zaehler))
               dateinamen (Cint(zaehler)) = o.Source
               zaehler = zaehler +1
            Else
               Msgbox "Kein Beschlussdokument vorhanden !",, db.Title
               Exit Sub
            End If
         End Forall
      End If
   End If
   
   If zaehler > 1 Then
      dateinametmp = ws.Prompt ( PROMPT_OKCANCELLIST,db.Title,"Wählen Sie das aktuelle Beschlussdokument aus:", dateinamen(0), dateinamen)
      dateiname = "IGK_Tmp5_" & dateinametmp
   Else
      dateinametmp = dateinamen(0)      
      dateiname = "IGK_Tmp5_" & dateinamen(0)
   End If
   
   If dateiname = "" Then
      Exit Sub
   Else
      Forall o In rtitem.EmbeddedObjects
         If o.Type = EMBED_ATTACHMENT Then 
            If o.Name = Cstr(dateinametmp) Then
               Call o.ExtractFile(Cstr(pfad & dateiname))
               Print (Cstr(pfad & dateiname))
            End If
         End If
      End Forall
      Dim excelreturn As Variant
      excelreturn = get_excelwerte(Cstr(pfad & dateiname))
      Kill pfad & dateiname
      
      If Not excelreturn(0) = "" Then
         For i = 0 To Ubound(excelreturn)
            Msgbox excelreturn(i),, i+1 & ". Wert aus Excel"
'         Next   

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Zugriff auf Excel Tabelle
« Antwort #6 am: 23.07.13 - 12:45:40 »
Da fehlt am Ende noch Code.

Bis jetzt sehen wir nur, das du das Attachment abhängst und dann nachdem du die Excelwerte mit einer anderen Routine zurückgelesen hast das abgehängtee File killst.

Die spannenden Sachen wie, wo gibst du die gefundenen Werte ans entsprechende Item zurück und speicherst du das Document auch irgendwann, erwähnst du nicht.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: Zugriff auf Excel Tabelle
« Antwort #7 am: 23.07.13 - 12:55:37 »
ich hatte im Reopen ein Save vergessen....
Nun läuft es erstmal gut !

Vielen Dank !

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz