Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Catrex am 15.06.04 - 14:26:38

Titel: Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 15.06.04 - 14:26:38
Hallo,


ich habe mal eine Frage. Und zwar habe ich hier mal wieder einen Excel-Export. Nur das dieser diesmal auch soweit noch formatiert werden soll, das hinterher ein druckbaren "Einheitsformular" rauskommt.
 
Also Sachen wie: Spaltenbreite, Summen bilden, Textausrichtung usw.

Nun habe ich mir schon ein paar Gedanken gemacht wie ich das denn wohl realisieren könnte. Zum einen gäbe es ja die Möglichkeit das per Excel-Makro zu machen, aber dann bräuchte jede Person die mit dem Export arbeitet ja auch eine "Muster-Excel-Datei" damt Makro. Die andere Möglichkeit ist dieses komplett per Lotus-Script zu regeln. Und genau da ist der Haken. Ich finde im Internet keine Auflistung der möglichen Befehle für Excel. Deshalb wollte ich wissen ob ihr vielleicht wisst wo ich sowas finden kann.

Noch eine andere Frage, ich sprach oben von einer "Muster-Excel-Datei". Kann ich im Script denn auch sagen das "er" genau diese Datei lokal auf dem Rechner des jeweiligen öffnen soll ? Weil sonst müsste man ja mit Strg+C und Strg+V arbeiten, oder ?

Wäre euch sehr dankbar wenn einer einen Tipp hätte !
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 15.06.04 - 14:50:50
...Ich finde im Internet keine Auflistung der möglichen Befehle für Excel. Deshalb wollte ich wissen ob ihr vielleicht wisst wo ich sowas finden kann.

Hi,

du kannst dir die entsprechenden Anweisungen aus der VBA-Hilfe holen und nach LotusScript portieren. Oder du zeichnest dir in Excel das Makro für die Formatierung auf und übernimmst es nach Notes. Geht aber leider nicht 1zu1.

Hier mal ein Beispiel, die gesamte Tabelle wird mit Arial 10 formatiert:

...
Set objExcel = CreateObject("Excel.Application")
Call objExcel.Workbooks.Add  'Neue Arbeitsmappe anlegen
Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)

objSheet.Cells.Select  'Gesamtes Arbeitsblatt markieren
objExcel.Selection.Font.Name = "Arial"  'Schriftart
objExcel.Selection.Font.Size  = 10  'Zeichengrösse setzen
objSheet.Range("A1").Select          
...


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 15.06.04 - 15:09:31
mmh, ja den "Trick" habe ich auch ausprobiert. Also das mit dem Makro aufzeichen und dann in VBA Editor die Sachen rauskopieren. Eigentlich ganz nett aber interessant wird es ja bei den Befehlen die ich nicht eins zu ein übernehmen kann. z.B Textausrichtung oben oder so. Was mach ich denn dann mit den Kammeraden ?

Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: koehlerbv am 15.06.04 - 15:19:32
Ich glaube, Du hast Axel missverstanden. In der Hilfe des VBA-Editors findest Du alle Klassen und Methoden von Excel-VBA, und diese kannst Du in LS einfach weiter verwenden. Axel hat dazu ja bereits ein Beispiel aufgemalt: Hast Du einmal ein Excel-Object in LS instantiiert, kannst Du wie in VBA weiterarbeiten.

Bernhard
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 15.06.04 - 15:28:18
Eigentlich ganz nett aber interessant wird es ja bei den Befehlen die ich nicht eins zu ein übernehmen kann. z.B Textausrichtung oben oder so. Was mach ich denn dann mit den Kammeraden ?


Schau dir das Beispiel an und vergleiche es mit der VBA-Hilfe oder dem Code in einem Makro. Wenn du erstmal das Prinzip verstanden hast, dann klappt auch mit den anderen Kameraden.  ;)

Hier noch ein Beispiel:

...

'Konstanten für die vertikale Ausrichtung innerhalb der Zellen
Const xlVAlignTop = -4160
Const xlVAlignBottom = -4107
Const xlVAlignCenter = -4108

'Formatiert ein Arbeitsblatt mit den Attributen vertikale Textausrichtung oben und
'optimale Spaltenbreite
objSheet.Cells.Select  'Gesamtes Arbeitsblatt markieren
objExcel.Selection.VerticalAlignment = xlVAlignTop  'Vertikale Ausrichtung nach oben
objExcel.Selection.Columns.AutoFit  'Optimale Spaltenbreite
objExcel.Selection.Rows.AutoFit  'Optimale Zeilenhöhe
objSheet.Range("A1").Select          
...


In der Regel ist es so, dass alles was mit Formatierung zu tun hat, sich auf Selection beziehen.


Axel

 
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: TMC am 15.06.04 - 23:03:33
Was hier immer wieder gefragt wird: Wo finde ich die Excel-Konstanten?

Antwort siehe:
http://www.atnotes.de/index.php?board=7;action=display;threadid=8479

Kannst Dir auch mal eine Demo-Datenbank downloaden, hier werden View-Dokumente nach Excel exportiert:
http://www.atnotes.de/index.php?board=9;action=display;threadid=15203
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 16.06.04 - 07:45:16
Alternativ kannst Du auch eine Tabelle vorformatieren und dann in ein Setup-Dokument in die DB anhängen. Vor dem Export löst Du die Datei dann und schreibst die Werte in die formatierte Tabelle.

Das ganze hat den Charme, dass Du dann auch ein Makro in die Tabelle einfügen kannst, dass Du dann nach dem Export aufrufst und anschließend löschst.

Ich habe mit dem Vorgehen sehr gute Erfahrungen gemacht.

Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 16.06.04 - 09:53:16
Ja zunächst einmal danke für die Antworten. Ich werde mal sehen was ich noch so machen kann und werde mich bei Bedarf dann hier wieder zu Wort melden.

@Makrus:

Ja das wäre auch die "Notlösung" zu der ich dann ausweichen würde !


Also nochmal danke !
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 16.06.04 - 10:57:36
Notlösung? Ich finde das eigentlich die schönste Lösung, weil man sich durch die Formatierung und das Makro nicht damit rumschlagen muss, wie man das ganze sauber hinbekommt. Aber ich glaube da hat jeder seine eigenen Vorstellungen.  ;)
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: g202e am 16.06.04 - 11:15:17
Das ganze hat den Charme, dass Du dann auch ein Makro in die Tabelle einfügen kannst, dass Du dann nach dem Export aufrufst und anschließend löschst.
Kannst du das ein wenig genauer beschreiben?
Makro in der Vorlage ist einleuchtend, aber wie löschst du das dann?
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 16.06.04 - 11:19:56
Ja das wäre auch die "Notlösung" zu der ich dann ausweichen würde !

Ich empfinde das auch nicht unbedingt als Notlösung. Diese Vorgehensweise hat sogar in einigen Anwendungsfällen Vorteile.

Kleine Formatierungen kann man ohne weiteres mit Lotusscript durchführen. Umfangreicheres würde ich auf jeden Fall auch in Excel selbst mit einem Makro machen.


Axel
 
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 16.06.04 - 11:51:39
Ok ok. Ich ziehe das mit der Notlösung zurück. Dann würde ich mich aber freuen wenn einer das ein wenig ausschmücken könnte wie man da genau vorgeht.

Sorry wenn ich einem auf die Füsse getreten bin  :P
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 16.06.04 - 11:54:10
Also Makros löschen geht so (Codeschnipsel aus meiner Excel-Klasse):


'Zuerst die Codezeilen löschen
For i = Me.xlApp.ActiveWorkbook.VBProject.VBComponents.Count To 1 Step -1
      
l = 1         
l = Me.xlApp.ActiveWorkbook.VBProject.VBComponents(i).CodeModule.CountOfLines
Me.xlApp.ActiveWorkbook.VBProject.VBComponents(i).CodeModule.DeleteLines 1, l
         
Next
      
'dann die Module löschen
For i = Me.xlApp.ActiveWorkbook.VBProject.VBComponents.Count To 1 Step -1
         
Me.xlApp.ActiveWorkbook.VBProject.VBComponents.Remove(Me.xlApp.ActiveWorkbook.VBProject.VBComponents(i))
         
Next   


Wie gesagt, es ist ein Schnispel aus meiner Excel-Klasse. Ich wollte hier auch nur zeigen welche Befehle genommen werden müssen und wie das Vorgehen aussieht.

Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 16.06.04 - 12:23:35
Sorry wenn ich einem auf die Füsse getreten bin  :P


Du bist hier niemanden auf die Füsse getreten. Das ist eine ganz normale Diskussion und Vor- und Nachteile von Lösungen.

Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: g202e am 16.06.04 - 13:55:49
(Codeschnipsel aus meiner Excel-Klasse):


Wo gibt's diese Excel-Klasse?
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 16.06.04 - 15:29:11
Die gibts in meinen Datenbanken. ;-)

Aber such mal im Sandkasten oder bei OpenNTF.ofg, da findest Du bestimmt was ähnliches.

Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 16.06.04 - 16:09:35
Hi,

da Markus seinen Code nicht mit uns teilen möchte (warum auch immer), kann ich dir mit meiner Klasse vielleicht auch helfen. Sie ist allerdings bei weitem noch nicht vollständig und wahrscheinlich noch nicht 100% fehlerfrei bzw. optimiert. Ich bitte daher um Nachsicht.

Anwendungsbeispiel (Agent):

(Options)
Use "libExcel"


Sub Initialize

...   
Dim oExcel As cExcel    

...

Set oExcel = New cExcel  'Erstellen eines OLE-Objects
Call oExcel.NewWorkbook
      
Call oExcel.SetCellValue("A1", "RB")
Call oExcel.SetCellValue("B1", "Land")

...

Call oExcel.FormatBereichAsText("A", "B" )      

...

row = 2

Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
   
   Call oExcel.SetCellValue("A" & Trim$(Str$(row)), doc.RegBereich(0))
   Call oExcel.SetCellValue("B" & Trim$(Str$(row)), doc.Land(0))
...
   Set doc = collection.GetNextDocument(doc)
   row = row + 1
Wend  'While Not (doc Is Nothing)
      
'Abschließende Formatierungen
Call oExcel.SortTable
Call oExcel.FormatBereichAsWaehrung("F","G")
Call oExcel.FormatBereichAsDateShort("I", "I" )
Call oExcel.FormatRangeFont("Arial", 9)
Call oExcel.FormatRowCenterBold(1)
Call oExcel.FormatRangeAlignment
Call oExcel.FormatRangeWidth("K:K")
      
'Aktivieren und Anzeigen von Excel      
Call oExcel.SetVisible
Call oExcel.ActivateExcel
...

Ich hoffe du kannst was damit anfangen.


Axel


 
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 17.06.04 - 08:38:20
@Axel: Es hat einen einfachen Grund, warum ich den Code nicht teilen kann. Es ist nicht meiner. Im Gegensatz zu einigen hier im Forum bin ich nicht selbstständig, also gehört der Code den ich schreibe dem Unternehmen für das ich arbeite. Außerdem benutze ich hier keinen Nickname, sondern meinen echten Namen und ich hab keinen Bock Ärger zubekommen, weil ich Firmeneigentum weitergebe. Wenn andere Forumsmitglieder das anders halten ist das ihre Sache. :-)

Gruß
Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 17.06.04 - 09:16:04
Hi,

eine kleiner Hinweis, warum du den Code nicht weitergeben kannst, hätte keine Mißverständnisse ausgelöst. In der Regel lassen alle Forumsmitglieder die anderen an ihrem Code teilhaben.

Wenn du das aus rechtlicher Sicht nicht kannst, wofür sicherlich jeder Verständnis hat, hätte ein kurzer Hinweis genügt. So kam es rüber, als das du nicht willst.


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: g202e am 17.06.04 - 11:18:08
@Axel: Danke für deinen Code. (Den hatte ich übrigens schon gefunden)
@Markus: Klar, dass du den Code nicht rausgibst, wenn er der Firma gehört!
Weil es gerade so schön passt: Ich exportiere mehrere Dokumente (bzw. Daten aus diesen Dokumenten) nach Excel, um diese dann (schön formatiert) in Tabellenform auszudrucken. Gibt es eine Möglichkeit, diesen Druck "aus der Exportfunktion" zu starten, ohne Excel überhaupt sichtbar zu machen?
Also: Man wählt die zu exportierenden Doks, klickt auf den Buhtong, welcher den Export anstößt und danach wird die Excel-Tabelle sofort an den Drucker weitergeleitet.
Mir fällt da im Moment nichts ein und SuFu half mir auch nicht.
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 17.06.04 - 11:35:13
Hi,

da müsste mit der Methode PrintOut funktionieren.

Bsp.:

ActiveWorkbook.PrintOut oder ActiveSheet.PrintOut

Angaben zu den Parametern findest du in der VBA-Hilfe.


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 17.06.04 - 13:13:08
@Axel: Sorry, dass ich mich nicht ordentlich ausgedrückt habe. :-)

@g202e: Axels Tipp sollte Dir da helfen. Wobei ich davon fast abraten würde das ganze direkt zu drucken. Ich habe es so gemacht, dass erst exportiert wird und der User kann dann, wenn er es will das ganze manuell drucken. Das ganze hat den Vorteil, dass der Benutzer den Drucker wechseln kann. Wenn Du das ganze exportierst und dann druckst, ohne das Excel sichtbar ist, wird vielleicht der falsche Drucker benutzt. Aber das ist wieder abhängig von den Vorlieben des Programmierers.

Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: g202e am 17.06.04 - 14:18:34
Aber das ist wieder abhängig von den Vorlieben des Programmierers.
Ja, wenn es man so wäre!
Ich würde es aus den von dir genannten Gründen auch so machen, aber: Der auftraggebende Chef ist der Meinung, dass dies für die Vorzimmer-Damen des GANZ GROSSEN CHEFS zu kompliziert ist. Er möchte gern eine Lösung, wo man bloß einen Knopf drückt und dann kommt die Liste aus dem Drucker.
Danke trotzdem. Printout funzt.
(Mit der VBA-Hilfe bin ich noch nicht so richtig warm geworden, aber das ist wohl Übungssache... Ich habe mit ActiveSheet.Print oder ActiveWorkbook.Print probiert, aber immer Essig! Mal sehen, ob ich den Befehl finde, mit dem ich im Background das per LotusScript erzeugte Excel.Object wieder zu zerstöre, das ich nach dem Druck nicht mehr braucher??) ???
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 17.06.04 - 14:31:06
Hi,

ich mach' damit:

Set objExcel = CreateObject("Excel.Application")   'Excel "unsichtbar" starten
...

objExcel.DisplayAlerts = False  'Warnmeldungen abschalten
Call objExcel.Quit  'Excel beenden




Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: g202e am 17.06.04 - 15:49:34
OK, ich habs so gelöst:
objExcel.Saved = True  'Warnmeldungen abschalten
Call objExcel.Quit  'Excel beenden
Aber die Sache hat einen Haken: Ich habe das Ganze in einem Aktions-Buhtong. Alles Quit und auch "Set objExel = Nothing" (oder auch beides zusammen) nützt nichts. Im Taskmanager bleibt immer noch eine Excel-Instanz zu sehen. Diese verschwindet erst, wenn man die Ansicht schließt/wechselt.
Fragen Sie Bill Gates!
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: koehlerbv am 17.06.04 - 16:06:53
Bei mir schiesst
   excelWorkbook.Save
   excelWorkbook.Close
   Set excelApp = Nothing
Excel zuverlässig ab (dieser Teil gehört nach einem Test auf
excelApp = Nothing
in den ErrorHandler !).
Bei Dir wird das Objekt offensichtlich erst zerstört, wenn das LS-Modul aus dem Speicher genommen wird.

HTH,
Bernhard
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 18.06.04 - 11:24:05
So, nun habe ich auch noch etwas "Zündstoff" ;)

Also mein Export und das Formatieren haben wunderbar geklappt. Ist zwar sicherlich nicht so elegant wie es hätte sein können aber das Resultat stimmt mich zufrieden. Nur zwei Sachen habe ich noch auf dem Herzen.

1.) Ich würde ganz gerne noch "automatisch" Summen bilden lassen
Also es werden x Dokumente exporiert und ich möchte in der Zelle x+1 gerne eine Spaltensumme er x exportierten Doks haben. Wie bekomme ich das hin ? Habe das Makro mir mal angesehen aber das möchte er so leider nicht übernehmen  ???

2.) Ich würde gerne noch die Zahlen an sich formatieren, also einheitlich 2 Nachkommastellen und wenn möglich negative Zahlen rot darstellen. Nur leider bin ich auch hier nicht weitergekommen

Wäre super wenn mir das noch einer "nahebringen" könnte dann kann ich das Thema hier auch guten Gewissens schliessen ;)

mfg

Sebastian !
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 18.06.04 - 11:49:33
Hi,

zu 2.

Set objExcel = CreateObject("Excel.Application")
Call objExcel.Workbooks.Add  'Neue Arbeitsmappe anlegen
Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)

...

objSheet.Columns("A:A").Select  'Spalte A markieren
objExcel.Selection.NumberFormat = "#,##0.00_ ;-#,##0.00 " 'Zellen formatieren
...

zu 1.

Wie sieht denn das Makro aus und warum willst du es so nicht machen?


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 18.06.04 - 12:05:39
mmh, wenn ich das so machen bekomme ich in Notes folgende Fehlermeldung: MS Excel: Die NumberFormat-Eigenschaft des Range-Objektes kann nicht festgelegt werden. Was hat das zubedeuten.

zu 1.) Ich würde das gerne so machen wie er mir das im Makro vorgibt aber leider geht es nicht

Das Makro sah wie folgt aus:

Range("F21").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 18.06.04 - 12:38:21
Hi,

das liegt an der Einstellung  "Z1S1-Bezugsart" in Excel. Nimm diese Einstellung raus (unter Extras - Optionen, Reiter Allgemein).

Verwende dann diese Formel

ActiveCell.Formula = "=SUM(A1:A12)"

Natürlich nach Sript umgesetzt.

Axel

Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 18.06.04 - 13:33:10
ok das scheint zu klappen mit den Summen aber kann ich das auch flexibelmachen ? also weil die Zeilenzahl ja unterschiedlich ist ?

Muss ich das mit dem Z1S1-Bezug noch im Script einstellen wenn das Problem auf anderen Rechner auch auftritt ?

Ist das auch der Grund für den Fehler bei dem Zahlenformat ?
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 18.06.04 - 13:47:16
aber kann ich das auch flexibelmachen ? also weil die Zeilenzahl ja unterschiedlich ist ?

Klar geht das auch "dynamisch". Du brauchst nur eine Variable in der du die Anzahl der Docs hast. Dann baust du dir die Formel zusammen.

row = 10
ActiveCell.Formula = "=Summe(F1:F" & Trim$(Str$(row)) & ")"


Muss ich das mit dem Z1S1-Bezug noch im Script einstellen wenn das Problem auf anderen Rechner auch auftritt ?

Das ist eine Einstellung in Excel. Ob man diese Einstellung auch über die COM-Schnittstelle ändern kann, weiß ich nicht. Auf die Schnelle hab ich in der VBA-Hilfe nichts gefunden.


Ist das auch der Grund für den Fehler bei dem Zahlenformat ?

Wenn es sich um die Fehlermeldung "Die NumberFormat-Eigenschaft des Range-Objektes ..." handelt, vermute mal ja.


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Markus Henke am 18.06.04 - 13:47:53
Es gibt eine Eigenschaft, die Dir die letzte benutzte Zeile zurückgibt.

Hier ist ein Beispiel dazu:


Dim xlApp As Variant
Dim xlSheet As Variant


Function OpenExcel() As String
   
   'Errorroutine
   On Error Goto Errorhandler
   
   'Excel Applikation öffnen
   Set xlApp = CreateObject("Excel.application")
   'neues Arbeitsblatt
   xlApp.Workbooks.Add
   Set xlSheet = xlApp.Workbooks(1).Worksheets(1)
   
   OpenExcel = "OK"
   Exit Function
   
Errorhandler:
   OpenExcel = "ERROR"
   
End Function


Sub Click(Source As Button)
   
   'Excel öffnen und Rückgabe überprüfen
   Rückgabe = OpenExcel()
   If Rückgabe <> "OK" Then
      'abbrechen
      Exit Sub
   End If
   
   'Werte schreiben
   'Cells benötigt Zahlen, Range benötigt z.B. "A5"
   For i = 1 To 50
      xlSheet.Cells(i,1).Value = "TEST"
   Next i
   
   'letzte Zeile finden und ausgeben (4 entspricht xlUp)
   Msgbox xlApp.Columns("1,1").End(4).Row
   
   'Excel sichtbar machen
   xlApp.Visible = True
   
   'Variablen freigeben
   Set xlSheet = Nothing
   Set xlApp = Nothing
   
End Sub


Packs in einen Button und probiers mal aus.

Markus
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Axel am 18.06.04 - 15:54:37
Hi,

ich zur Umstellung der Bezugsart noch was gefunden. Sie lässt sich mit

Application.ReferenceStyle = xlA1 umstellen, wobei xlA1 den Wert 1 hat.

Mit Application.ReferenceStyle = xlR1C1 stellt du das Ganze wieder zurück.
xlR1C1 hat den Wert -4150


Axel
Titel: Re:Befehle für einen formatierten Excel-Export
Beitrag von: Catrex am 21.06.04 - 11:05:26
Also nochmal besten Dank für die Infos & Hilfen.
Ich denke hier gibt es nun nichts mehr zu klären !