Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: botschi am 19.03.07 - 14:57:47

Titel: Excel auf dem Server?
Beitrag von: botschi am 19.03.07 - 14:57:47
Moin,

ich möchte in der Nacht per Agent eine Excel-Datei erzeugen und diese per Mail versenden.
Eigentlich kein Problem, weder der Agent, noch periodisch.

Ich habe aber nun doch ein Problem, weil es in der Zeile

Set quelle_xlApp = CreateObject("Excel.Application")

einen Fehler gibt.
Auf dem Server ist KEIN Excel installiert.
Muss dort Excel installiert sein, damit der Server das Objekt erzeugen kann?
Kennt jemand eine Alternative zur Installation von Excel auf dem Server?

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 19.03.07 - 15:07:36
Ja, Excel muss installiert sein.

Alte Naive:

http://www.eknori.de/archives/1

Titel: Re: Excel auf dem Server?
Beitrag von: ZaLudtske am 19.03.07 - 15:08:50
Hallo,

du benötigst auf jeden Fall auf dem Server das entsprechende Programm. Eine Alternative währe das Schreiben einer Datei im Excel-Format aus dem Agenten heraus. Ich habe da einer Klasse mit der du das erledigen kannst. Sie schreibt aber nur Dateien im Format der Version 3. Wenn du Interesse hast, dann melde dich bitte

Rainer
Titel: Re: Excel auf dem Server?
Beitrag von: Demian am 19.03.07 - 15:28:56
Moin,moin,

eine andere Alternative wäre je nach Datenmenge auch die Daten in sequentielle Dateien zu schreiben, die Werte mit ; zu trennen und als .csv zu speichern. Wenn der Benutzer den Anhang mit Excel öffnet, werden automatisch die ; als Spaltenwechsel gedeutet.

Gruß
Demian

in etwa so:
Code
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:\testfile.csv", True)
    a.writeline "Zeile 1 Spalte A;SpalteB;SpalteC"
    a.writeline "Zeile 2 Spalte A;SPalteB;SpalteC"
    a.Close
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 20.03.07 - 13:34:31
Ja, Excel muss installiert sein.

Alte Naive:

http://www.eknori.de/archives/1



Danke dafür.

Leider komme ich damit nicht weiter.
Wenn ich nur die Sub "Click" einbinde, kann ich nicht kompilieren. Wenn ich Deine Frage auf Pams Beitrag richtig verstanden habe, muss man noch eine Klasse einbinden.
Auch das kann ich nicht kompilieren, weil u.a. diverse Variablen nicht deklariert sind...

Kannst Du mir nochmal eine kleine Hilfestellung geben, wie ich das in meinem Agenten einbinden kann? Ich würde den Code gerne verwenden oder zumindest mal probieren, ob das für uns in Frage kommt.

Danke!

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: flaite am 20.03.07 - 13:57:22
Eine Alternative sind auch Java Bibliotheken. Das gebräuchlichste ist zur Zeit jxl. Hier ein Beispiel:
http://www.java-tips.org/other-api-tips/jexcel/how-to-create-an-excel-file.html
oder POI-HSSF: http://jakarta.apache.org/poi/hssf/index.html
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 20.03.07 - 15:12:08
@Axel: das jexcel funktioniert ja super; merci für den Tipp
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 20.03.07 - 15:59:58
Leider habe ich (noch) keine Ahnung von Java.
Trotzdem habe ich versucht, das Beispiel umzusetzen. Es scheiterte daran, dass ich das jexcelapi.jar nicht eingebunden bekommen habe...

Ich habs auch noch nicht verworfen, sondern für später bereit gelegt.
Jetzt habe ich aber noch das akute Problem, dass der Code von Eknori bei mir nicht funzt.

Beim Speichern bekomme ich den Fehler, dass createfile kein Member ist... Die Klasse "ExcelFile" ist aber in Declarations vorhanden  ???

Eknori, kannst Du mir einen Hinweis geben was ich falsch mache?

Danke!

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 20.03.07 - 17:27:59
@Matthias:

Habe dir in der angehängten Datei mal meinen Code in eine Aktion eingebaut. Schaue es dir an und dann sage mir, was du falsch gemacht hast ...
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 20.03.07 - 17:55:55
Danke! Danke, danke!

Ich glaube mein Fehler war, dass ich "Option declare" in den Options hatte... Wenn ich das entferne, kann ich den Agenten auch speichern und ausführen. Ich habe sogar ne Datei mit dem Agenten erzeugt  ;D

Allerdings habe ich auf meiner Maschine auch Excel installiert... Ich werde das jetzt mal einmalig periodisch auf dem Server starten und die Datei verschicken.
Mein Ziel soll ja sein, dass der Agent periodisch auf dem Server ausgeführt wird und am Ende des Laufs wird diese Datei an versch. Personen gesendet.

Muss die Datei physisch auf dem Server gespeichert werden, damit ich diese verschicken kann?

Würde ja auch noch gehen, ich kann diese nach dem versenden ja wieder löschen oder in einem Dokument archivieren oder sowas.

Ich sehe wieder Licht am Ende des Tunnels.
Danke nochmal.

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 20.03.07 - 17:59:47
Zitat
Muss die Datei physisch auf dem Server gespeichert werden, damit ich diese verschicken kann?

yo, das musst du
Titel: Re: Excel auf dem Server?
Beitrag von: rasacani am 20.03.07 - 20:47:23
Hallo

Da bin ich wieder. Ich habe mich getraut (LS). Ich gebe eine Excel-Datei aus und es klapp auch, aber nicht auf dem Server. Ich habe hier gelesen, das man als alterative auch eine CSV-Datei ausgeben kann. Dies habe ich dann promt eingebaut

-->  OLE: Automation object error       -->      ???

hier die Stelle wo ich es eingebaut habe:

   Else  ' alle Documente
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set abc = fs.CreateTextFile("c:\Raitest.csv", True)

      Set otherdoc = otherview.GetFirstDocument 
      While Not otherdoc Is Nothing 
         abc.writeline otherdoc.columnvalues(1)      
         For colmn = 0 To Ubound(otherview.Columns)
            
            MulCol = otherdoc.columnvalues(colmn)
            If Isarray(MulCol) Then
               ColCat = Cstr(MulCol(0) )
               For ColNum=1 To Ubound(MulCol)
                  ColCat=ColCat & " | " & Cstr(MulCol(ColNum))
               Next ColNum
               
               xlApp.cells(row,colmn+1) = ColCat
            Else
               xlApp.cells(row,colmn+1) = Cstr( MulCol )
            End If
      'xlApp.cells(row,colmn+1) = otherdoc.columnvalues(colmn)      
         Next   
         row=row+1 
         Set otherdoc = otherview.GetNextDocument(otherdoc)     
      Wend

      abc.close
   End If

Was kann das denn schon wieder sein?

Rainer
Titel: Re: Excel auf dem Server?
Beitrag von: rasacani am 20.03.07 - 21:04:40
Sorry   8) 8) 8)


mein Beitrag sollte woanders hin.


Rainer
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 21.03.07 - 12:54:57
Zitat
Muss die Datei physisch auf dem Server gespeichert werden, damit ich diese verschicken kann?

yo, das musst du

Könnte man das Script so umstellen, dass ich mir keine neue Datei erzeuge sondern eine Vorlage öffne, die als Anhang in einem Dokument abgelegt wurde? Oder irgendwo ausm Netzlaufwerk heraus?
Die Vorlage (mit Formel) kopieren und in meine Datei einfügen oder sowas?

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 21.03.07 - 13:00:40
Klar kann man das Script umbauen; mach ich aber nicht ...  ;D

Für den Fall, den du ansprichst, ist das hier eine geeignete Lösung http://jxls.sourceforge.net/
( langsam aber sicher machen mir die Java Dinger richtig Spass ! )
Zitat
jXLS is a project that implements this approach and allows creation of extremely complex Excel reports just in several lines of code. All you need is to create XLS template file with all required formatting, formulas, macros etc using specific notation to indicate placement of data and then write a couple lines of code to invoke jXLS engine passing XLS template and the exported data as parameters.
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 21.03.07 - 13:06:19
Gut.
Diese Java Dinger interessieren mich im Prinzip auch, aber nicht wenn ich ein wenig Zeitdruck habe...

Ich verstehe Dich so, dass man das Script zwar generell umbauen KÖNNTE, es aber wohl nicht trivial ist und ich selber das wohl nicht kann. Ist das richtig?

Einfacher wird es für mich dann wohl sein, wenn Excel auf dem Server installiert wird und ich mir eine Vorlage schnappe, die ich dann nur noch fülle.

Trotzdem Danke für Deine Mühe!

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 21.03.07 - 13:09:02
Zitat
wohl nicht trivial ist
Richtig, weil der komplette XLS Reader Kram fehlt. Und der Interpreter für die Formeln etc etc ...

Da hast du dich schneller in jXLS eingearbeitet ...
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 21.03.07 - 13:31:23
Es ist ohnehin gefährlich Code produktiv zu nutzen, den ich nicht verstehe oder ändern kann.
Wenn ich jetzt auch noch Java einbinde (wovon ich NULL Ahnung habe) führe ich mich quasi ja selber zur die Schlachtbank...
Ich weiß noch nicht einmal, wie ich was in den Classpath einfügen kann oder wie ich diesen finde. Die Hilfe (Admin und Designer) kurz durchsucht und keinen Hinweis gefunden wie "drücken Sie hier und da und fügen da etwas ein, um ihr .jar einzufügen".

jXLS scheint wirklich eine Lösung zu sein, die extra für mich und mein Problem geschaffen wurde...
Leider bin ich im Moment noch zu doof, dieses für mich zu nutzen...

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 21.03.07 - 16:35:19
ich habe hier mal eine SampleDB gebaut. Die Datei enthält alle notwendigen *.jar files und einen Agenten ("XLS"). Der erstellt unter Beteiligung der xls-Datei "c:\in.xls" die Datei "c:\out.xls" und schreibt dort ein paar Daten rein. Das Template macht daraus Diagramme. ( wie in http://jxls.sourceforge.net/samples/chartsample.html )

Ich habe zwar immer noch nicht begriffen, was ich denn wie, wann warum in die import ... Statements schreiben muss, aber das finde ich noch raus. Der Agent ist mehr ein Resultat von try&error als von fundierten Kenntnissen der Materie  ;D

Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 21.03.07 - 17:59:33
Ich hab Pipi in den Augen  :o

Das Beispiel liefert zwar noch lange nicht das Ergebnis was ich brauche, aber der Anfang ist gemacht.
Ausserdem habe ich ein schlechtes Gewissen, weil Du mir hier den ganzen Beitrag über zur Seite standst und nun auch noch Code geliefert hast.

Was soll ich da noch sagen, ausser DANKE  :-*

Damit hast Du Dir einen Eintrag in mein Buch der guten Leute gesichert  ;D
Wer weiss, irgendwann kann ich Dir vielleicht auch mal helfen- in irgendeiner Art und Weise.

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 21.03.07 - 18:10:58
nichts zu danken.

Ich kann das selber gut gebrauchen. Mit der Doku unter http://jxls.sourceforge.net/index.html sollte das auch für kompliziertere Sachen in den Griff zu bekommen sein.

Titel: Re: Excel auf dem Server?
Beitrag von: eknori am 30.03.07 - 06:47:09
Bist du denn schon weitergekommen, Matthias ??
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 30.03.07 - 09:34:27
Ja, aber ich konnte die Java-Lösung nicht nutzen.
Weil der Vorstand zum 1. April Berichte haben möchte, war kaum Zeit für Experimente.

Die Admins haben mir auf den relevanten Servern Excel installiert und so konnte ich mit einfachen Scriptmitteln zum Ziel kommen.

Da Excel auf den Servern keine Dauerlösung sein soll, werde ich in nächster Zeit an der Java-Lösung noch tüfteln dürfen.
Und da kommt denn Deine DB verstärkt zum Zuge  ;D

Also demnächt wird wohl noch die eine oder andere generelle Java-Frage von mir hier landen...

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: Driri am 08.05.07 - 13:28:15
Hallo,

ich habe gerade etwas Zeit und wollte mal das Excel-Reporting mit jXLS testen. Ich habe mir Ulrichs Demo-DB geladen, wenn ich den Agent ausführe, passiert aber nichts.

Muß ich die jar-Files lokal auf dem PC "installieren" (hab was von Classpath gelesen auf der Projektseite von Sourceforge) ? Oder funktioniert der Spaß im 6.5er Client nicht ?

Die Java-Console schmeißt mir folgendes aus :

Zitat
java.lang.NoClassDefFoundError: java/lang/CharSequence
   at net.sf.jxls.parser.CellParser.parseFormula(CellParser.java:82)
   at net.sf.jxls.parser.CellParser.parseCellFormula(CellParser.java:72)
   at net.sf.jxls.util.SheetHelper.findFormulasInRow(SheetHelper.java:70)
   at net.sf.jxls.util.SheetHelper.findFormulas(SheetHelper.java:30)
   at net.sf.jxls.util.SheetHelper.findFormulas(SheetHelper.java:22)
   at net.sf.jxls.transformer.Workbook.createFormulaSheetMap(Workbook.java:93)
   at net.sf.jxls.formula.FormulaControllerImpl.<init>(FormulaControllerImpl.java:28)
   at net.sf.jxls.transformer.Workbook.createFormulaController(Workbook.java:99)
   at net.sf.jxls.transformer.XLSTransformer.createWorkbook(XLSTransformer.java:418)
   at net.sf.jxls.transformer.XLSTransformer.transformXLS(XLSTransformer.java:222)
   at net.sf.jxls.transformer.XLSTransformer.transformXLS(XLSTransformer.java:201)
   at JavaAgent.NotesMain(JavaAgent.java:35)
   at lotus.domino.AgentBase.runNotes(Unknown Source)
   at lotus.domino.NotesThread.run(NotesThread.java:218)

Sorry, bin blutiger Java-Anfänger und kann damit nichts anfangen. Gibt es eine Chance für mich oder muß ich doch erst tiefer in Java einsteigen ?  ;)
Titel: Re: Excel auf dem Server?
Beitrag von: botschi am 08.05.07 - 13:35:05
Die Frage hätte auch von mir kommen können  ;)

Leider bin ich immer noch nicht dazu gekommen, verfolge den Thread aber mit Argusaugen. Ich denke, dass es einige Entwickler gibt, die das auch gebrauchen könnten.
Wär vielleicht was für Tipps und Tricks...?

Matthias
Titel: Re: Excel auf dem Server?
Beitrag von: m3 am 08.05.07 - 13:36:56
"java/lang/CharSequence" ist seit Java 1.4 Bestandteil (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/CharSequence.html) der JRE.

Laut Johan Känngård (http://johankanngard.net/2006/02/09/java-versions-in-lotus-domino-and-notes/) ist bei Notes 6.5 nur das JRE/JDK 1.3.1 dabei.

Schaut schlecht aus.
Titel: Re: Excel auf dem Server?
Beitrag von: Driri am 08.05.07 - 13:37:42
Noch ein Update :

In der Demo-DB von Ulrich sehe ich den Agenten "XLS", da steht auch hübsch viel Java-Code drin. Zusätzlich gibt es eine Lib "jxls.java", da steht aber nur folgendes drin :

public class Untitled {

}


Erscheint mir ein bißchen mager  ???

Titel: Re: Excel auf dem Server?
Beitrag von: Driri am 08.05.07 - 13:39:25
@Martin :

Sch...ade. Dann wirds wohl vorerst nix damit bei uns.