[gelöst] EXCEL-Datei updaten- Problem (2013/R1)

18. Februar 2016 17:18

Hallo zusammen,

ich muss in eine bestehende EXCEL-Datei Werte einfügen. Zum Test habe ich mal folgendes programmiert:

OnPreReport()
Datei := 'C:\TestDatei.xlsx';
SheetName := 'Tab1';

OnPostReport()

User Setup - OnPreDataItem()

User Setup - OnAfterGetRecord()
EXCELBuffer.UpdateBook(Datei,SheetName);
EXCELBuffer.ReadSheet;
IF EXCELBuffer.GET(16,3) THEN
MESSAGE('Inhalt : %1',EXCELBuffer."Cell Value as Text");

Es gibt dann beim ReadSheet folgende Meldung:
Diese Meldung richtet sich an C/AL-Programmierer: Eine .NET-Variable wurde nicht instanziiert. Es wurde versucht,
'Microsoft.Dynmics.Nav.OpenXML.Spreadsheet.WorksheetReader.GetEnumerator' in 'Table EXCEL-Buffer' auzurufen: ReadSheet

(EXCEL-Buffer extra nochmal kompiliert, .NET ist auf dem neuesten Stand)

Wenn ich das ganze beim Kunden auf seinem Rechner probiere, kommt schon beim Open im EXCEL-Update die Meldung:
Fehler beim Aufrufen von ''Microsoft.Dynmics.Nav.OpenXML.Spreadsheet.WorkbookWriter.Open':
The custom numbering ID Format should start at 164 and should be listed in consecutive order.

Ich hoffe, irgendjemand hat eine Idee, was da los ist.

Vielen Dank im voraus
Grüße
ATLAN / Hermann Schubert.
Zuletzt geändert von Atlan am 6. März 2016 13:02, insgesamt 2-mal geändert.

Re: EXCEL-Buffer-Problem (2013/R1)

18. Februar 2016 19:53

Ich würde mit OpenBook anfangen.

ExcelBuffer.OpenBook(FileName,SheetName);
ExcelBuffer.ReadSheet;

Re: EXCEL-Buffer-Problem (2013/R1)

19. Februar 2016 10:48

Danke, das bringt mir jetzt den Zugriff.

Aber : Ich mache einen MODIFY auf eine Zelle und will diese Daten dann wieder in der EXCEL-Tabelle speichern. Und da gibt es Probleme:

mit : EXCELBuffer.UpdateBook(Datei,SheetName); und CloseBook passiert gar nichts.

Wenn ich dann noch
EXCELBuffer.OverwriteAndOpenExistingExcel(Datei); ergänze gibt es einen E/A-Fehler.
Ein WriteBook ohne vorherigen CreateBook bringt den Fehler, dass er nicht instanziiert ist.

Irgendwie werde ich die Daten doch wieder in die Datei zurückbekommen !?

Grüße
Atlan / Hermann Schubert

Re: EXCEL-Datei updaten- Problem (2013/R1)

24. Februar 2016 12:30

Hallo zusammen,

bevor ich hier einen neue Thread eröffne, dachte ich mir, dass ich mich mit meinem, fast identischen, Problem hier anhänge ;-)

Folgende Situation:
Ich habe ein Excel-Template, welches fest vorgeschrieben ist (Vorgabe einer Bank). Dieses Template enthält verschiedene Tabellenblätter, die alle entsprechend mit Daten versorgt werden müssen. Bisher habe ich dies im Classic Client über Automations gelöst, was auch gut funktioniert hat: Excel nebst Template geöffnet, Daten in Tabellenblatt 1 eingetragen, in Blatt 2 gewechselt und dieses gefüllt, usw. bis alles erledigt war. Excel offen gelassen, damit der Anwender direkt mit dem Sheet weiter arbeiten kann.

Nun benötige ich genau diese Funktionalität auch in NAV 2015. In meiner grenzenlosen Naivität habe ich gehofft, dass ich mich an den Report 29 anlehnen kann, da es hier die Möglichkeit gibt "Exceltabelle aktualisieren", allerdings schmeißt er dann sämtliche, vorher gespeicherten, Formatierungen über den Haufen. Somit ist die Variante gestorben. Mit dem ThreadOpener habe ich gesprochen, allerdings sind wir hier auch noch zu keinem weiteren Ergebnis gekommen.

Hat noch jemand eine Idee, wie man am einfachsten vorgehen kann?

Danke!

Re: EXCEL-Datei updaten- Problem (2013/R1)

5. März 2016 00:36

Hallo zusammen,

ich kann hier etwas Hilfestellung geben.

1.) Excel Datei mit Dynamics NAV lesen:

Code:
TmpExcelBuffer.OpenBook(FileName, SheetName);
TmpExcelBuffer.ReadSheet;


2.) Die Zellen aktualisieren, die Ihr ändern wollt!

Code:
TmpExcelBuffer.GET(1,1);
TmpExcelBuffer."Cell Value as Text" := 'Hallo';


3.) Aktualisieren der Excel Datei mit einer simplen Funktion:

Die Funktion UpdateSheet müsst ihr im ExcelBuffer einfach einfügen!

Code:
TmpExcelBuffer.UpdateBook(FileName,SheetName);
TmpExcelBuffer.UpdateSheet(RowFilter, Spaltenfilter); //Welche Spalten und Zeilen will man aktualisieren
TmpExcelBuffer.CloseBook;



UpdateSheet - Parameter ->RowNoFilter Text30 / ColumnNoFilter Text30

Code:
LastUpdate := CURRENTDATETIME;
ExcelBufferDialogMgt.Open(Text005);

IF RowNoFilter_p > '' THEN
  SETFILTER("Row No.", RowNoFilter);

IF ColumnNoFilter_p > '' THEN
  SETFILTER("Column No.", ColumnNoFilter);

CRLF := 10;
TotalRecNo := COUNT + InfoExcelBuf.COUNT;
RecNo := 0;

// commit is required because of the result boolean check of ExcelBufferDialogMgt.RUN
COMMIT;

IF FINDSET THEN
  REPEAT
    RecNo := RecNo + 1;
    IF NOT UpdateProgressDialog(ExcelBufferDialogMgt,LastUpdate,RecNo,TotalRecNo) THEN BEGIN
      QuitExcel;
      ERROR(Text035)
    END;
//    IF Formula = '' THEN
      WriteCellValue(Rec)
//    ELSE
//      WriteCellFormula(Rec)
  UNTIL NEXT = 0;

ExcelBufferDialogMgt.Close;


Da wir hier von 3-Tier Architektur sprechen, ist es natürlich erforderlich, dass ihr die Datei zum Server hochladet, dann die Daten importiert/aktualisiert/exportiert und danach wieder auf den Client schiebt. Das sollte aber bekannt sein!

VG
Robert

Re: EXCEL-Datei updaten- Problem (2013/R1)

6. März 2016 13:01

Hallo Herr Wendler,

vielen Dank für die Hinweise !

Atlan
Hermann Schubert.