Autor Thema: Export_to_excel  (Gelesen 2815 mal)

Offline taheri

  • Senior Mitglied
  • ****
  • Beiträge: 380
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Export_to_excel
« am: 25.10.05 - 09:10:19 »
Guten Morgen,

Ich habe hier in Forum einen Agent gefunden und zwar „export_to_excel“. Ich kann eine bestimmte Ansicht auswählen und diese wird in Excel exportiert. Das Problem ist, dass alle Dokument in Ansicht werden exportiert. Gibt es eine Möglichkeit, dass ich selektieren kann?
Also, nur bestimmte doukumenet  per makierung exportieren kann?

Mit freundlichen Grüßen

Hiermit Agent:

Sub Initialize
   Dim Session As New NotesSession ,db As NotesDatabase
   Dim sourceview As NotesView,sourcedoc As NotesDocument
   Dim dataview As NotesView, dc As NotesDocumentCollection
   Dim datadoc As NotesDocument, maxcols As Integer
   Dim WS As New Notesuiworkspace
   Dim ViewString As String, Scope As String, GetField As Variant
   Dim C As NotesViewColumn, FieldName As String, K As Integer,N As Integer
   Dim xlApp As Variant, xlsheet As Variant, rows As Integer, cols As Integer
   Dim nitem As NotesItem  , entry As NotesViewEntry, vwNav As NotesViewNavigator
   Dim ShowView()  As Variant, i As Integer, VList As Variant, ColVals As Variant
   
   Set db = session.CurrentDatabase   'link to current database
   
         'fetch then display a list of views in the database
   Vlist= db.views
   K=Ubound(Vlist)  'get size of list
   Redim Preserve ShowView(K)
   N=-1
   For i = 0 To K
      If Len(Vlist(i).Name) >0 Then  
         FieldName=Trim(Vlist(i).Name)
         If Mid(Fieldname,1,1) <>"(" Then  'do not show hidden views
            N=N+1                          
            ShowView(N) = FieldName
         End If
      End If  
   Next i  
   Redim Preserve ShowView(N)
      'now sort the list - by default views are listing in the order that they were created
   For i=0 To N
      For K=i To N
         If  ShowView(i) > ShowView(k) Then
            FieldName=ShowView(i)  
            ShowView(i) = ShowView(k)
            ShowView(k)=FieldName
         End If
      Next k
   Next i  
   
   viewstring= ws.Prompt(PROMPT_OKCANCELLIST,"List of Views","Choose a View","",ShowView )
   If Len(viewstring)=0 Then Exit Sub
         'ViewString ="Dan's View"
   
   Set dataview = db.getview(ViewString)  'get selected view
   
   Set vwnav= dataview.createViewnav()
   
   rows = 1
   cols = 1
   maxcols=dataview.ColumnCount  'how many columns?
   
   Set xlApp = CreateObject("Excel.Application")  'start Excel with OLE Automation
   xlApp.StatusBar = "Creating WorkSheet. Please be patient..."
   xlApp.Visible = True
   xlApp.Workbooks.Add
   xlApp.ReferenceStyle = 2
   Set xlsheet = xlApp.Workbooks(1).Worksheets(1)   'select first worksheet
   
         'worksheet title
   xlsheet.Cells(rows,cols).Value ="View: " + ViewString + ", from Database: " +  db.title +",  Extract created on: " +  Format(Now,"mm/dd/yyyy HH:MM")
   
   xlApp.StatusBar = "Creating Column Heading. Please be patient..."
   
   rows=2  'column headings starts in row 2
   For K=1 To maxcols
      Set c=dataview.columns(K-1)
      xlsheet.Cells(rows,cols).Value = c.title
      cols = cols + 1
   Next K
   
   Set entry=vwnav.GetFirstDocument
   rows=3   'data starts in third row
   Do While Not (entry Is Nothing)
      
      For cols=1 To maxcols  
         colvals=entry.ColumnValues(cols-1)      'subscript =0
         scope=Typename(colvals)
         Select Case scope
         Case "STRING"
            xlsheet.Cells(rows,cols).Value ="'" +  colvals
         Case Else      
            xlsheet.Cells(rows,cols).Value = colvals
         End Select                      
      Next cols              
      xlApp.StatusBar = "Importing Notes Data   -    Document " & rows-1 '& " of " & dc.count & "."  
      rows=rows+1
      Set entry = vwnav.getnextdocument(entry)                
   Loop
   
   xlApp.Rows("1:1").Select
   xlApp.Selection.Font.Bold = True
   xlApp.Selection.Font.Underline = True
   xlApp.Range(xlsheet.Cells(2,1), xlsheet.Cells(rows,maxcols)).Select
   xlApp.Selection.Font.Name = "Arial"
   xlApp.Selection.Font.Size = 9
   xlApp.Selection.Columns.AutoFit
   With xlApp.Worksheets(1)
      .PageSetup.Orientation = 2
      
      .PageSetup.centerheader = "Report - Confidential"
      .Pagesetup.RightFooter = "Page &P" & Chr$(13) & "Date: &D"
      .Pagesetup.CenterFooter = ""
   End With
   xlApp.ReferenceStyle = 1
   xlApp.Range("A1").Select
   xlApp.StatusBar = "Importing Data from Lotus Notes Application was Completed."
         'xlapp.ActiveWorkbook.saveas "c:VX" + Trim(Format(Now,"yyy"))   'save with generated name
   dataview.clear  
   
   Set xlapp=Nothing   'stop OLE
   Set db=Nothing
End Sub


Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Export_to_excel
« Antwort #1 am: 25.10.05 - 09:19:01 »
ja, dann müsstest Du den Agenten aber in der Form umstricken, dass er auf einen Subset von Dokumeten/nur den ausgewählten Entries läuft. Dazu muss er dann aber aus einer speziellen View gestartet werden.
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

klaussal

  • Gast
Re: Export_to_excel
« Antwort #2 am: 25.10.05 - 09:34:23 »
Man kann ja auch die Funktion unter "Datei/Exportieren" benutzen und da nur "ausgewählte Dokumente" anhaken.......

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Export_to_excel
« Antwort #3 am: 25.10.05 - 19:42:49 »
Ich denke, Datei - Exportieren ist hier nicht so gefragt, da es ja explizit gen Excel gehen soll.

Die Frage ist für mich aber immer noch etwas schwammig formuliert:
Du hast einen fertigen Agent, der "nur" "anders" funktionieren soll.
Daher meine Fragen:
- Wie fit bist Du in LotusScript ? COM / VBA muss hier nicht unbedingt eine Rolle spielen, da Du diesen Code wirklich direkt weiter verwenden kannst, aber auch da wäre interessant: Wie gut bist Du da ?
- Brauchst Du überhaupt eine Auswahl einer View / Folder für den Export oder kannst Du eine ganz bestimmte View (oder Folder) für den Export hernehmen ?

Falls fixe View / Folder: Dann muss Du den Agent so aufbauen, dass er auf markierte Dokumente geht (NotesDatabase.UnprocessedDocuments).
Falls Du irgendeine View / Folder auswählen lassen willst (unter R6 geht das aber auch performanter als im Code realisiert - dafür läuft dieser aber unter R5), dann musst Du nach Auswahl der View / Folder mit einer PicklistCollection auf diese View / Folder arbeiten und diese dann abarbeiten.

Prinzipiell kann der Kern des von Dir geposteten Codes weiter verwendet werden. Nur: Du musst Dich dann mit LS wirklich auskennen. Daher meine Fragen oben. Wenn dem nicht so ist: Dann hast Du ganz schlechte Karten. Sorry ...

Bernhard

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Export_to_excel
« Antwort #4 am: 26.10.05 - 09:55:22 »
Servus,

ich habe ein ähnliches Problem wie taheri und auch bereits ein paar Gehirnzellen damit bemüht.

In LS gibt es ja verschiedenste Möglichkeiten ausgewähten Dokumente in einem NotesDocumentCollection-Objekt zurückzubekommen.

1. NotesUIView.Documents
2. NotesDatabase.UnprocessedDocument (Target-Eigenschaft des Agenten auf "All selected Documents" steht)
3. NotesUIDatabase.Documents (funkt nicht im Agenten, also hier unbrauchbar)


Beispiel:

   Dim dc As NotesDocumentCollection   ' all selected documents
   Dim doc As NotesDocument   ' any selected document
   Dim uiview As NotesUIView   ' current view
   Dim uiws As NotesUIWorkspace   ' worskpace object
   Dim ve As NotesViewEntry   ' view entry object
   Dim vwnave As NotesViewNavigator
   
   ' initialize
   Set uiws = New NotesUIWorkspace
   Set uiview = uiws.CurrentView   ' get the current view
   Set dc = uiview.Documents   ' get all selected document
   If dc.Count = 0 Then   ' validation
      ' -> Messagebox
      Exit Sub
   End If
   
   ' run for all documents
   Set vwnav = uiview.View.CreateViewNav
   Set doc = dc.GetFirstDocument
   Do Until doc Is Nothing
      Set ve = vwnav.GetEntry(doc)   ' get the view entry object of the document
      ' -> write column values to excel
      Set doc = dc.GetNextDocument(doc)
   Loop



Der Witz ist jetzt, dass die Collections nach dem Erstelldatum der Dokumente sortiert sind.
D.h. du müsstest Sortierungen nachträglich über ein Range-Objekt vornehmen.

Noch etwas zu deinem Script:
1. Große Ansichten (mit vielen Dokumenten bzw. Kategorien und vielen Spalten) benötigen beim Exportieren sehr viel Zeit.
Verschiebe xlApp.Visible = True ans Ende deines Scriptes
Setzte die ScreenUpdating-Eigenschaft des Application-Objekts (hier: xlApp) nach seiner Initialisierung auf False und bevor Excel in den Vordergrund geholt wird wieder auf True.
2. Schreibe die Zeilen möglichst nicht spaltenweise, sondern über ein Array. Bei mir gab es den Effect, dass beim Schreiben von Notes in Excel der Arbeitspeicher vollläuft.
Gruß
Johnson

Offline pheno

  • Frischling
  • *
  • Beiträge: 5
Re: Export_to_excel
« Antwort #5 am: 16.03.06 - 10:32:24 »
dieser agent is phantastisch, ich kann euch gar nicht sagen wie gern ich euch hab!!!!!!!

Offline nikon

  • Junior Mitglied
  • **
  • Beiträge: 97
  • Geschlecht: Männlich
  • Tut das Notes?
Re: Export_to_excel
« Antwort #6 am: 16.03.06 - 13:39:55 »
Hallo zusammen!

Was ich in diesem Zusammenhang nur empfehlen kann:
http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/807dd94ea530733800256bd8003a4e36?OpenDocument

Ist zwar leider schon lange nicht mehr weiterentwickelt worden, aber wenn man selbst noch ein wenig Gehirnschmalz reinsteckt, ist das durchaus ausbaufähig! Und die Integration in einer bestehende Aplikation ist ebenfalls nicht schwierig...

Nett ist dabei die Funktion, zusätzlich zum kompletten und selektiven Export, auch noch einen konfigurierbaren zu machen.


Gruß Dirk
Zitat von: fragmutti.de
Schmackhafter Milchreis
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt. ;)

IBM Certified Application Developer - Lotus Notes und Domino 6/6.5

Umgebung:
2 Domino Cluster-Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) Win2k Server
1 Domino Server (7.0.3) WinXP

~ 200 Notes Clients (7.0.1-7.0.3) Win2k&XP

Offline mrtachles

  • Frischling
  • *
  • Beiträge: 34
  • Geschlecht: Männlich
    • Die ECOBoys
Re: Export_to_excel
« Antwort #7 am: 16.03.06 - 14:38:57 »
Hi,

nimm doch einfach www.ecoplan.de/xlspumplight. Das Tool ist von uns, bis zu 2 Reports direkt nach Excel sind lizenzfrei möglich.
Falls Du keinen Smarticon dafür haben willst, es gibt eine Lib "XLSExternalCall", die einen Excel-Report auch über einen Aktion o.ä. aufrufen kann.
Die Formatierungen in Excel etc. sind frei definierbar, auch die ggf. weitere Aufbereitung in Excel als Chart etc. ist in Excel konfigurierbar.

Gruss
Thomas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz