Autor Thema: Excel Export/Report Klasse  (Gelesen 4772 mal)

Offline cgorni

  • Junior Mitglied
  • **
  • Beiträge: 54
  • Geschlecht: Männlich
Excel Export/Report Klasse
« am: 07.11.05 - 15:53:47 »
Hallo zusammen,

für alle, die häufig Auswertungen von Lotus Notes nach Excel schreiben, habe ich eine Lotus Script Klasse nach www.openntf.org gestellt unter
http://www.openntf.org/Projects/codebin/codebin.nsf/CodeBySubContributor/C55558FC7E187C2786256FD50076B2C3

Für Erweiterungsideen und andere Kommentare/verbesserungen wäre ich sehr dankbar  :)
Das gleiche plane ich für Word. Falls jemand bestimmte Dinge in einer WordReport-Klasse implementiert sehen will: immer her damit.

Christian

P.S.: ich musste den destructor deaktivieren. hat leider nicht so funktioniert wie ich dachte (Version um 16:45 geändert)
« Letzte Änderung: 07.11.05 - 16:44:10 von cgorni »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Excel Export/Report Klasse
« Antwort #1 am: 07.11.05 - 17:06:27 »
Danke.
Schau mir das mal an.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Excel Export/Report Klasse
« Antwort #2 am: 09.11.05 - 16:00:42 »
super Idee, meine Kommentare habe ich bei OpenNTF abgelassen...

Leider funktioniert die Klasse ExcelExport bei mir nicht (OLE-Automation Error in der setCell-Methode).

(Ja, ich habe Excel auf meinem Rechner  ;) )
sagt Mark.



slowfood.de

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Excel Export/Report Klasse
« Antwort #3 am: 09.11.05 - 23:06:55 »
P.S.: ich musste den destructor deaktivieren. hat leider nicht so funktioniert wie ich dachte (Version um 16:45 geändert)

Kannst Du das präzisieren?

Ich habe bei mir mal in einem Code nachgesehen:

Code
	Sub Delete
		If Not Isempty(xlApp) Then	
			xlApp.DisplayAlerts = False		
			xlApp.Quit		
			Set xlApp = Nothing
		End If			
	End Sub

Was es mit dem DisplayAlerts auf False auf sich hat, hab ich damals leider nicht kommentiert  >:( ::)
Vermutlich hatte Excel einen Fehler geworfen unter manchen Umständen.....


Für Erweiterungsideen und andere Kommentare/verbesserungen wäre ich sehr dankbar  :)

Gerne  ;)

Grundsätzlich wären denke ich folgende Quellen hilfreich:
 - Alle Dokumente einer View
 - Ausgewählte Dokumente einer View (also db.UnprocessedDocuments)
 - @Formel Suchstring (db.Search)

Notes-Daten auslesen dann optional
a) entweder aus den Dokumenten der DocCollection selbst (also die Items die als Property per String-Array mitgegeben werden)
b) Anhand Export-View (also Spalten / Zellenwerte wie in der View angegeben)
Grund: View lässt sich oft schneller zusammenklicken, und man kann da einfach Spaltenformeln angeben.

zu (a): Hier noch eine Möglichkeit, alternative Spaltentitel mitzugeben, und nicht die Itemnamen verwenden.
Außerdem: Möglichkeit, Inhalte nach Bedingung anzuzeigen. Angenommen man hat einen Radiobutoon, dort ist hinterlegt "Ja|0, Nein|1". Beim Auslesen bekommt man dann nur 0 oder 1. Im Excel-Export sollte aber "Ja" oder "Nein" erscheinen. Quasi wie in einer View-Spaltenformel, wo man schreiben würde @If(_Feld = "0"; "Ja"; "nein").
Wie man das vernünftig umsetzen könnte, muss ich mir noch Gedanken machen....

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Excel Export/Report Klasse
« Antwort #4 am: 10.11.05 - 08:59:10 »
Was es mit dem DisplayAlerts auf False auf sich hat, hab ich damals leider nicht kommentiert  >:( ::)
Vermutlich hatte Excel einen Fehler geworfen unter manchen Umständen.....

Damit schaltet man Warnmeldungen ab. In deinem Fall wolltest du mit Sicherheit verhindern, dass beim Beenden von Excel Meldungen angezeigt werden, wie z.B. das diese Arbeitsmappe noch nicht gespeichert wurde.

BTW:
In einem Destruktor Excel zu beenden, halte ich nicht für so geschickt. In bestimmten Fällen kann das durchaus Sinn machen. Allerdings schreibt man ja Klassen um sie relativ einfach wiederverwenden zu können. Oftmals ist es aber so, dass Excel nach der Übergabe der Daten offen bleiben soll, damit das Sheet weiterbearbeitet werden kann. Rufst du dann den Destruktor der Klasse auf, wird Excel in deinem Fall beendet.

Ich hab's mir angewöhnt eine zusätzliche Methode EndExcel (oder so ähnlich) einzubauen, mit der ich bei Bedarf Excel beenden kann. Im Destruktor steht dann nur noch so was wie Set xlApp = Nothing.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Excel Export/Report Klasse
« Antwort #5 am: 10.11.05 - 09:44:18 »
ich habe mal vor geraumer Zeit dieses Projekt erstellt:
http://www.openntf.org/Projects/pmt.nsf/HomeLookup/5DCF746BB5A0B95286256DF0005141FA?OpenDocument

Das greift das Konzept auf, alle Dokumente einer Ansicht oder nur bestimmte Dokumente zu exportieren. Vielleicht kann ein Teil hiervon genutzt werden...
sagt Mark.



slowfood.de

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Excel Export/Report Klasse
« Antwort #6 am: 10.11.05 - 10:52:44 »
die OLE-Automation-Fehler konnte ich nun beheben mit 'Recompile all LotusScript'. Zuvor hatte ich mehrfach nur die Skriptbibliothek geändert und gespeichert, das reichte nicht aus.
sagt Mark.



slowfood.de

Offline cgorni

  • Junior Mitglied
  • **
  • Beiträge: 54
  • Geschlecht: Männlich
Re: Excel Export/Report Klasse
« Antwort #7 am: 15.11.05 - 23:48:10 »
Hallo,

jetzt habe ich endlich Gelegenheit zu antworten. Schön, das sich tatsächlich in paar Leute für die klasse interessieren :-) Vielleicht schaffen wir es ja gemeinsam noch ein paar interessante Ideen zu entwickeln. Aber hier zu den einzelnen Punkten:


OLE-Automation Error:
---------------------
Gut das du ihn beseitigen konntest. Ich war schon verzweifelt, weil ich den Fehler nicht reproduzieren konnte. :-) Vielen Dank fürs ausprobieren.


Beenden von Excel
------------------------
Wie hier schon erwähnt wurde ist es ungünstig das quit in den destructor einzubauen, da man dann Excel auf jeden Fall nach Abschluss des Scripts schließt. Daher mein Kommentar, das ich den Destruktor deaktiviert habe. In den meisten Fällen in denen ich Excel-Reports erzeugt habe, wurde der fertige Excel-Report angezeigt und nicht im Backend weiterverarbeitet.

Zur Beendigung habe ich einfach die .quit Methode "durchgereicht". Was wäre denn der Zusatz in der erwähnten "EndExcel" Methode?


Erweiterungen
----------------------
Ich habe schon selbständig zwei Methoden hinzugefügt (V1.2.0):
 Function setCellColor ( Sheet As Variant , row As Integer , column As Variant, innercolor As Variant )
Function setCellFont ( Sheet As Variant , row As Integer , column As Variant, style As Variant, size As Variant, color As Variant )

Anwendung: farbliches Hervorheben bestimmter Werte, z.B. Datumswerte schwarz anzeigen, es sei denn der Endstatus ist erreicht, dann grün und fett.


Erweiterungsvorschläge
----------------------
Der Vorschlag mit der DocumentCollection erscheint mir sinnvoll. Das heisst ich übergebe:
- eine DocumentCollection
- eine Liste der Spaltenüberschriften (Variant, Optional)
- eine Liste der zu exportiereden Items der Dokumente (variant)

Also so:

function exportNotesDocCollection (coll As NotesDocumentCollectionw, Sheet As Variant, OffsetRow As Integer, OffsetCol As Integer, FieldList As Variant, HeaderList as variant)

Was db.search angeht würde ich sagen sollte der User das ausserhalb der klasse machen und dann wieder die Collection übergeben. Und bei dem Vorschlag mit der Umsetzung von Werten über Formeln denke ich es ist einfacher (und sinnvoller) das im Dokument über verborgene Felder selber zu machen und dann erst die Klasse zu benutzen.

Fragen
------
Die Frage, die ich mir momentan stelle ist die nach der Fehlerbehandlung. Wie behandelt man Fehler in einer solchen Klasse? Jede Methode gibt einen Fehlercode zurück? Jede Methode erhält weitere parameter "ErrorCode"/"ErrorText", die mit dem Fehler gefüllt werden und sonst leer sind? Fehlervariablen, die Teil der Klasse selbst sind und über Methoden ausgelesen werden können?


Grüsse,
C.

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Excel Export/Report Klasse
« Antwort #8 am: 16.11.05 - 07:44:01 »
ich war gerade auf der Suche nach einer Import-Klasse für Excel-Dateien. Vielleicht kann  man die Klasse aufteilen in eine übergeordnete Klasse ExcelObject und daraus zwei Klassen ExcelReport und ExcelImport ableiten.

Da nicht alle Excel-Objekte in der Klasse abgebildet werden sollt edie Möglichkeit bestehen, über Attribute an die Excelobjekte ranzukommen, z.B. so:

'-------------------------------------------------------------
'Properties
'-------------------------------------------------------------
   Public Property Get Workbooks
      Set Workbooks = xlWbks
   End Property
   
   Public Property Get Workbook
      Set Workbook = xlWbk
   End Property
   
   Public Property Get Application
      Set Application = xlApp
   End Property
sagt Mark.



slowfood.de

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Excel Export/Report Klasse
« Antwort #9 am: 17.11.05 - 20:41:18 »
Die Frage, die ich mir momentan stelle ist die nach der Fehlerbehandlung. Wie behandelt man Fehler in einer solchen Klasse? Jede Methode gibt einen Fehlercode zurück? Jede Methode erhält weitere parameter "ErrorCode"/"ErrorText", die mit dem Fehler gefüllt werden und sonst leer sind? Fehlervariablen, die Teil der Klasse selbst sind und über Methoden ausgelesen werden können?
Ich glaube einen Königsweg gibt es da nicht, aber Deine Idee klingt schon mal gut.

Schön wäre sicherlich wenn jede Methode zumindest True/False zurückgibt.
Also:
 if (Objekt.FärbeDieZellenLila(a,b,c) = False) Then 'jetzt eine Aktion.

Den Fehlercode, die Zeilennummer und den Fehlertext kann man dann beliebig vom Objekt abholen, ist also eine Property: Objekt.ErrorLine (Integer), Objekt.ErrorNumber (Integer), Objekt.ErrorMessage (String)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Excel Export/Report Klasse
« Antwort #10 am: 17.11.05 - 20:49:23 »
Was es mit dem DisplayAlerts auf False auf sich hat, hab ich damals leider nicht kommentiert  >:( ::)
Vermutlich hatte Excel einen Fehler geworfen unter manchen Umständen.....

Damit schaltet man Warnmeldungen ab. In deinem Fall wolltest du mit Sicherheit verhindern, dass beim Beenden von Excel Meldungen angezeigt werden, wie z.B. das diese Arbeitsmappe noch nicht gespeichert wurde.

BTW:
In einem Destruktor Excel zu beenden, halte ich nicht für so geschickt. In bestimmten Fällen kann das durchaus Sinn machen. Allerdings schreibt man ja Klassen um sie relativ einfach wiederverwenden zu können. Oftmals ist es aber so, dass Excel nach der Übergabe der Daten offen bleiben soll, damit das Sheet weiterbearbeitet werden kann. Rufst du dann den Destruktor der Klasse auf, wird Excel in deinem Fall beendet.

Ich hab's mir angewöhnt eine zusätzliche Methode EndExcel (oder so ähnlich) einzubauen, mit der ich bei Bedarf Excel beenden kann. Im Destruktor steht dann nur noch so was wie Set xlApp = Nothing.

Axel

Jo, stimmt, hast Recht.
Im Prinzip muss man oft nur im Fehlerfall abbrechen und Excel beenden. Sonst hängen noch Excel-Tasks im Taskmanager, wenn ein User während dem Export z.B. Strg+Untbr drückt.

Aber wenn Excel nach dem Export geöffnet bleiben soll recht ja wohl ein:
Code
ExcelApp.Range("A1").Select
ExcelApp.Application.ScreenUpdating = True 'hat man natürlich vorher abgeschaltet
ExcelApp.Visible = True 'hat man natürlich vorher abgeschaltet
ExcelApp.StatusBar = "Excelexport erfolgreich bla bla"
Set ExcelApp = Nothing
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Excel Export/Report Klasse
« Antwort #11 am: 24.11.05 - 09:28:47 »
Hallo cgorni,

im deinem Post auf openntf.org hab ich es (im gebrochenen Englisch) bereits angebsprochen.

Hier ist die MSOffice Library. Ich entwickle ständig daran und versuche es so dynamische wie nur irgend möglich zu halten. Einige Office-Produkte sind noch nicht ganz lauffähig aber Excel und Word sind bereits im Einsatz.

Wenn du was Verenden kannst oder noch ein paar Anmerkungen oder Sorgen hast, du weißt wo du mich findest.  ;)


Gruß
Johnson

PS: Die Office-Konstanten der MSOffice-Library befinden sich in externen LSS-Files. Bei Interesse kann ich die noch nachreichen.
Gruß
Johnson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz