[Gelöst] Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 10:54

Hi,

ich würde gerne eine bestehende Exceldatei verändern.
Aber automatisiert über die Ausgabewarteschlange. Nicht über den Excel Buffer sondern über DotNet Elemente.

Der Code funktioniert wenn ich DotNet auf RunoOnClient = YES habe.
Bei No funktioniert das leider nicht

XlApp DotNet Microsoft.Office.Interop.Excel.ApplicationClass.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
XlWrkBk DotNet Microsoft.Office.Interop.Excel.Workbook.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
XlWrkBks DotNet Microsoft.Office.Interop.Excel.Workbooks.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
XlWrkSht DotNet Microsoft.Office.Interop.Excel.Worksheet.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
XlRange DotNet Microsoft.Office.Interop.Excel.Range.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
XlHelper DotNet Microsoft.Dynamics.Nav.Integration.Office.Excel.ExcelHelper.'Microsoft.Dynamics.Nav.Integration.Office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
XlShts DotNet Microsoft.Office.Interop.Excel.Worksheet.'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'



Code:
act_zeile := 3;

filepath_server := '\\fileserver\Company\1\1.xlsx';

XlApp := XlApp.ApplicationClass;

XlWrkBk := XlHelper.CallOpen(XlApp,filepath_server);

XlWrkSht := XlWrkBk.Worksheets.Item('xxx');

XlWrkSht.Range('B' + FORMAT(act_zeile) , 'B' + FORMAT(act_zeile)).Value := 'Neuer Wert';

XlWrkBk.Save;
XlWrkBk.Close(TRUE,filepath_server,TRUE);
XlHelper.CallQuit(XlApp);
XlApp.Quit;

CLEARALL;
CLEAR(XlHelper);
CLEAR(XlApp);
CLEAR(XlWrkBk);
CLEAR(XlWrkSht);
CLEAR(XlRange);



Fehler:
Fehler.PNG


Die Datei ist aber über den NAV Dienst erreichbar und das Dienstkonto hat auch Zugriff.

Hat da jemand eine Idee?

Danke!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Miles1980 am 4. Juli 2019 19:58, insgesamt 1-mal geändert.

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 11:14

Hallo,

die OfficeInterop- Objekte benötigen so viel ich weis ein funktionierendes Office auf dem Rechner. Außerdem gibt es, soweit ich weiß, ein Problem, wenn diese Komponenten von einem Dienst benutzt werden sollen (mal suchen mit google/bing)

Ich benutze für solche Zwecke "ClosedXML", das ohne office auskommt.

Gruß Fiddi

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 11:18

Hi,

danke für die schnelle Antwort.
Office ist installiert. In der gleichen Version wie es auf dem Client ist wo es funktioniert. Das ist es leider nicht.
Das mit dem Dienst suche ich gleich mal....

Hast du mal ein Beispiel für das "ClosedXML" ?

Danke.

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 11:58

Hallo,
Hast du mal ein Beispiel für das "ClosedXML" ?


Google/Bing sind deine besten Freunde in diesem Fall.

Die Umsetzung ist, soviel ich weiß aber fast 1:1 es sind nur andere Variablennamen.

Gruß Fiddi

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 12:08

ok... ich mach mich mal auf die Suche :-D

Der Hinweiß mit dem Fehler im Dienst war echt gut.... bin jetzt ein Stück weiter.

Jetzt kommt der Fehler:
Fehler_neu.PNG


laut debugger hier:

Code:
XlWrkSht := XlWrkBk.Worksheets.Item('xxx');
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 12:21

Hallo,

der Server kann glaube ich auch kein COM mehr.

Gruß Fiddi

Re: Exceldatei ändern über Aufgabenwarteschlange

4. Juli 2019 19:57

Habe es dann doch noch gelöst :-D :-D

Code:

filepath_server := '\\fileserver\Company\1.xlsx';

XlApp := XlApp.ApplicationClass;

XlWrkBk := XlHelper.CallOpen(XlApp,filepath_server); // Hier wichtig... Auf dem Server muss der Ordner "Desktop" angelegt werden (siehe Anlage - am besten beide :))

XlHelper.ActivateSheet(XlWrkBk,'Tabelle1');

XlWrkSht := XlWrkBk.Worksheets;

XlRange := XlApp.Range('C1','C1');
XlRange.Value2 := FORMAT(CURRENTDATETIME);

XlWrkBk.Save;
XlWrkBk.Close(TRUE,filepath_server,TRUE);
XlHelper.CallQuit(XlApp);
XlApp.Quit;

CLEARALL;
CLEAR(XlHelper);
CLEAR(XlApp);
CLEAR(XlWrkBk);
CLEAR(XlWrkSht);
CLEAR(XlRange);



Leider beendet er auf dem Server nicht immer die Excelinstanz... da hat man schnell viele Instanzen zusammen :-?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.