[Gelöst] Fremdprogramm aus NAV starten

12. November 2009 09:57

Ich bins mal wieder,
ich würde gerne aus Navision raus über einen Commandbutton o.Ä. ein bestimmtes Excelfile öffnen und im Idealfall dort noch einen Wert aus der aktuellen Karte in ein bestimmtes Feld eintragen lassen.
Gibts es da in Navision schon eine Stelle wo man sich sowas angucken könnte, oder gibt es ein Tutorial dazu?
Ich bin leider nicht sonderlich bewandert was programmieren angeht.
Gruß
Daniel
Zuletzt geändert von daniel am 13. November 2009 09:45, insgesamt 3-mal geändert.

Re: Fremdprogramm aus NAV starten

12. November 2009 11:18

In deinem Fall könntest du den "Excelbuffer" nutzen.

Ein Programm von nav aus zu starten ginge auch über die Befehle "SHELL" oder mit dem "Windows Script Host".
(Wäre aber in deinem fall unpraktikabel)

Duchsuche den Objektdesigner mal nach '@*excel*'
(Ohne Hochkomma, die Ansicht auf "All"!)

Hier kannst du einiges zum Thema Excel sehen, z.B. die Reports 81 & 82 "Import Budget from Excel", "Export Budget to Excel"

Andernfalls hier im Forum nach Excel suchen, es gibt dutzende Beiträge zum Thema.

Re: Fremdprogramm aus NAV starten

12. November 2009 11:21

Eine andere Möglichkeit zum Excelbuffer wäre auch:

Die Gobalen Variablen einbinden bzw. die konkrete MS Excel Object Library die du verwendest.

Code:
Name   DataType                   Subtype   
Excel   Automation   'Microsoft Excel 9.0 Object Library'.Application   
Book   Automation   'Microsoft Excel 9.0 Object Library'.Workbook   
Sheet   Automation   'Microsoft Excel 9.0 Object Library'.Worksheet


Instanz erzeugen
Code:
Create(Excel);


Exceltabelle mit Workbook und Sheet erzeugen und speichern
Code:
Book:=Excel.Workbooks.Add; // Exceltabelle und Worksheet erzeugen
Book:=Excel.Workbooks.Open('C:\Pfad\Dateiname.xls'); //Pfad zur Exceldatei
Sheet:=Book.Worksheets.Item('Tabelle1'); // gehe zu Tabelle 1
Book.SaveAs('dateiname.xls'); // Excel Datei speichern
Sheet.Activate; // Sheet aktivieren
Book.Save; // in bestehende Datei speichern
Book.Close; // Schliessen
Excel.Quit; // Excel beenden


ein paar nützliche Excel Formatierungen und Zuweisungen:
Code:
Sheet.Range('A1:B100').NumberFormat := '@';  // Text für Spalte A1-D100
Sheet.Range('C1:C100').NumberFormat := '#.##0'; // Zahlformat mit 1000. Trennung
Sheet.Range('D1:D100').NumberFormat := '#.##0,00 €'; // Währungsformat für Euro mit 1000. Trennung

Sheet.Range('A1').Font.Bold:=TRUE; // Schrift Fett
Sheet.Range('A1').Font.Size:=12; // Schriftgröße
Sheet.Range('A1:B1').MergeCells := TRUE; // Zellen verbinden
Sheet.Columns.AutoFit; // optimale Spaltenbreite

Sheet.Range('A1').Value:='Text'; // Wert zuweisen


Ich hoffe ich konnte helfen.

P.S: Die Variante würde übrigens auch für die Versionen funktionieren, die noch keine Excelbuffer-Unterstützung haben (siehe Tabelle 370).

Gruß,
winfy
Zuletzt geändert von winfy am 13. November 2009 09:32, insgesamt 4-mal geändert.

Re: Fremdprogramm aus NAV starten

12. November 2009 12:19

Für mich hört sich das so nach ausfüllen eine Formulars an. Ist denn da evtl nicht das Style-Sheettool eine Möglichkeit?

Volker

Re: Fremdprogramm aus NAV starten

12. November 2009 15:18

ja genau das wäre es.
ich möchte kein neues sheet erzeugen sonder einfach eine auf einem Netzlaufwerk liegende Excel-Datei öffnen und in diese in ein bestimmtes Feld den Wert eines Feldes aus meiner NAV2009-Karte einfügen.
Was genau ist dieses Style-Sheettool?

Re: Fremdprogramm aus NAV starten

12. November 2009 15:22

Also ich würde es mir einfach machen (Datenübertragung aussen vor gelassen), einfach wie in jeder Karte zu bestaunen, die funktionalität der Links (Büroklammer in der Symbolleiste) kopieren, anpassen an den genauen Wunsch, fertig. Aber wie gesagt ist nur ohne Übertragung bestimmter Zelleninhalte...

Re: Fremdprogramm aus NAV starten

12. November 2009 15:30

Cr4cks hat geschrieben:Also ich würde es mir einfach machen (Datenübertragung aussen vor gelassen), einfach wie in jeder Karte zu bestaunen, die funktionalität der Links (Büroklammer in der Symbolleiste) kopieren, anpassen an den genauen Wunsch, fertig. Aber wie gesagt ist nur ohne Übertragung bestimmter Zelleninhalte...

Klingt gut. Könntest du den Ablauf etwas genauer erläutern?

Re: Fremdprogramm aus NAV starten

12. November 2009 15:42

Die Befehle oben waren nur eine Sammlung einiger nützlicher Befehle in dem Zusammenhang.
Natürlich kannst du damit auch nur die Datei öffnen und deinen Wert dort ablegen! :wink:

Wie gesagt die Globals hinzufügen Excel Instanz erzeugen und dann wären die folgenden Befehle für dich hilfreich.

Code:
Book:=Excel.Workbooks.Open('C:\Pfad\Dateiname.xls'); // Pfad zu der Exceldatei im Netzlaufwerk
Sheet:=Book.Worksheets.Item('Tabelle1'); // oder den Sheet deiner Exceldatei
Sheet.Activate;
Sheet.Range('A1').Value:='Text'; // Wert als String Feld A1 zuweisen bzw. deinem Feld in der Exceldatei

Book.Save; // den Wert in die Exceldatei speichern
Book.Close; // Datei schliessen
Excel.Quit; // Excel schliessen/beenden


Gruß,
winfy
Zuletzt geändert von winfy am 13. November 2009 09:33, insgesamt 1-mal geändert.

Re: Fremdprogramm aus NAV starten

12. November 2009 16:05

Ich und meine schnellen Finger...

Hab gerade versucht die Form mit STRG-F2 zu bearbeiten um genauere Infos der Funktionalität zu bekommen... Geht garnicht. :cry:
Also wird dir wohl nichts anderes Üprig bleiben als das beim näheren Betrachten doch einfach Aussehende von meinen Vorpostern zu nehmen...

Re: Fremdprogramm aus NAV starten

12. November 2009 16:29

hallo winfy, jetzt hab ich es verstanden.
Bei mir ist es allerdings die 'Microsoft Excel 11.0 Object Library' installiert.
Beim kompilieren sagt er mir jetzt immer, dass ihm die Variable OPEN nicht bekannt ist!!!
Ist der Befehl für die 11er Version anders als bei der von dir angegebenen?
Aber das scheint auf jeden Fall das zu sein was ich suche.


-----Edit

Also es gibt den Befehl
Code:
Excel.GetOpenFilename('C:\pfad\datei.xls');


aber hier bringt er mir die fehlermeldung:
Für diese Automation Variable wurde keine Instanz erstellt.
Sie können ihr eine Instanz zuordnen, indem Sie sie entweder erstellen oder zuordnen.
das gleiche passiert wenn ich nur versuche Excel zu öffnen via Excel.run.
Für das Book sehe ich leider keinen Open-Befehl, auch nichts ähnliches.

Re: Fremdprogramm aus NAV starten

12. November 2009 16:59

Okay mit CREATE(Excel) habe ich ihm eine Instanz erstellt.
Der Fehler der jetzt kommt:
Diese Meldung ist für C/AL Programmierer:
In Methode Run wurde eine Ausnahme hervorgerufen. Das OLE Control oder der automation Server gaben folgende Fehlermeldung zurück (HRESULT) -2147352567.
Die Komponente verfügt über keine Ausnahmebeschreibung.

Re: Fremdprogramm aus NAV starten

12. November 2009 17:04

daniel hat geschrieben:hallo winfy, jetzt hab ich es verstanden.
...

Also es gibt den Befehl
Code:
Excel.GetOpenFilename('C:\pfad\datei.xls');


aber hier bringt er mir die fehlermeldung:
Für diese Automation Variable wurde keine Instanz erstellt.
Sie können ihr eine Instanz zuordnen, indem Sie sie entweder erstellen oder zuordnen.
das gleiche passiert wenn ich nur versuche Excel zu öffnen via Excel.run.
Für das Book sehe ich leider keinen Open-Befehl, auch nichts ähnliches.


Entschuldige du musst natürlich erst noch eine Instanz erzeugen mit:

Code:
CREATE(Excel); // Instanz erzeugen
Excel.Visible(TRUE); // falls du es angezeigt bekommen möchtest


Code:
Book:=Excel.Workbooks.Add; // Exceltabelle und Worksheet erzeugen

Code:
Book:=Excel.Workbooks.Open('C:\Pfad\Dateiname.xls'); // Excel-Datei öffnen


Gruß,
winfy
Zuletzt geändert von winfy am 12. November 2009 17:24, insgesamt 1-mal geändert.

Re: Fremdprogramm aus NAV starten

12. November 2009 17:18

Super es hat geklappt. Du bist echt der Beste. Vielen Dank.

Re: [halb Gelöst] Fremdprogramm aus NAV starten

12. November 2009 17:56

jetzt noch zur übergabe von werten an die Excel-Datei.
es kommt folgende Meldung:
Für das OLE-Control oder den automation Server GUID xxxxxxx.... 'Microsoft Excel 11.0 Object Library'.Workbook konnte keine Instanz erstellt werden.
Prüfen Sie ob das OLE Control oder der autom. Server korrekt installiert und registriert wurde.

mein code:
Code:
CREATE(Excel); // Instanzen erzeugen
CREATE(Book);
CREATE(Sheet);

Excel.Visible(TRUE);  //sichtbar machen
Excel.Workbooks.Open('C:\Dokumente und Einstellungen\daniel\Desktop\UPS-Tracking\Kopie von SignatureTracking.xls'); //Pfad zur Datei
Sheet:=Book.Worksheets.Item('Eingabe'); // Eingabe ist der Name des Sheets (es gibt insgesamt 4 sheets in der datei.
Sheet.Activate;
Sheet.Range('B4').Value:='Text'; // hier müsste ja im moment der Text an feld b4 übergeben werden

Re: [halb Gelöst] Fremdprogramm aus NAV starten

12. November 2009 21:29

daniel hat geschrieben:jetzt noch zur übergabe von werten an die Excel-Datei.
es kommt folgende Meldung:
Für das OLE-Control oder den automation Server GUID xxxxxxx.... 'Microsoft Excel 11.0 Object Library'.Workbook konnte keine Instanz erstellt werden.
Prüfen Sie ob das OLE Control oder der autom. Server korrekt installiert und registriert wurde.

CREATE(Excel); // Instanzen erzeugen
CREATE(Book);
CREATE(Sheet);

...
[/code]


Code:
CREATE(Book);
...
Excel.Workbooks.Open('C:\Dokumente und Einstellungen\daniel\Desktop\UPS-Tracking\Kopie von SignatureTracking.xls'); //Pfad zur Datei
...
Sheet:=Book.Worksheets.Item('Eingabe'); // ???

Der Code würde bei dir ins Nirvana zeigen. :wink:

So müsste es für meine Begriffe gehen, habe es aber gerade nicht getestet!

Code:
CREATE(Excel);
Book:=Excel.Workbooks.Open('C:\Dokumente und Einstellungen\daniel\Desktop\UPS-Tracking\Kopie von SignatureTracking.xls'); //Pfad zur Datei
Sheet:=Book.Worksheets.Item('Eingabe'); // Eingabe ist der Name des Sheets (es gibt insgesamt 4 sheets in der datei.
Sheet.Activate;
Sheet.Range('B4').Value:='Text'; // hier müsste ja im moment der Text an feld b4 übergeben werden


Gruß,
winfy

Re: [Gelöst] Fremdprogramm aus NAV starten

13. November 2009 09:46

EInen Ehrenurkunde für winfy :-D :-D
Problem gelöst.
Vielen Dank.