Excel Buffer Datei direkt Abspeichern ohne öffnen

Bild Microsoft Dynamics 365 Business Central (On-Premises Version)
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie

Bitte unbedingt im Titel angeben, auf welche Version (BC13, BC14, BC15, ...) sich eure Frage bezieht!

Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon NAVGATOR » 31. Mai 2022 10:51

Hi Community,

Wie kann ich den Inhalt des Excel Buffers direkt als Datei unter einen definierten (Netzwerk- )Pfad abspeichern, ohne dass das Excel zuvor geöffnet wird?
Hab irgendwie keine passende Funktion gefunden.

Danke schonmal
NAVGATOR
 
Beiträge: 189
Registriert: 15. Januar 2009 22:26
Realer Name: Alex
Arbeitsort: Neuried
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: BC18

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon sweikelt » 31. Mai 2022 15:52

SaveToStream sollte klappen
-> den Stream dann in die Datei unter deinem Verzeichnis schießen
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon enh » 31. Mai 2022 16:29

SaveToStream ist DotNet, nicht D365BC, oder?

Nachtrag: Hat sich erledigt, hatte in einer alten Version geschaut wo es die function SaveToStream noch nicht gab...
Zuletzt geändert von enh am 31. Mai 2022 17:57, insgesamt 1-mal geändert.
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon NAVGATOR » 31. Mai 2022 17:49

Könnte das ungefähr dann so aussehen?

Code: Alles auswählen
        ExcelFile.Create(FileName + '.xlsx');
        ExcelFile.CreateOutStream(OutS);
        ExcelBuffer.SaveToStream(OutS, false);
NAVGATOR
 
Beiträge: 189
Registriert: 15. Januar 2009 22:26
Realer Name: Alex
Arbeitsort: Neuried
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: BC18

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon sweikelt » 1. Juni 2022 08:15

NAVGATOR hat geschrieben:Könnte das ungefähr dann so aussehen?


sag du es uns :)
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: BC18: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon NAVGATOR » 1. Juni 2022 08:37

Ja, es funktioniert einfach nicht ich bekommen immer folgenden Fehler:

E/A-Ausnahme während des Vorgangs


Beim Debuggen kommt dann folgendes:

In T370
Code: Alles auswählen
    procedure SaveToStream(var ResultStream: OutStream; EraseFileAfterCompletion: Boolean)
    var
        TempBlob: Codeunit "Temp Blob";
        BlobStream: InStream;
    begin
        FileManagement.BLOBImportFromServerFile(TempBlob, FileNameServer);
        TempBlob.CreateInStream(BlobStream);
        CopyStream(ResultStream, BlobStream);
        if EraseFileAfterCompletion then
            FILE.Erase(FileNameServer);
    end;


und dann in der Funktion FileManagement.BLOBImportFromServerFile scheitert das Ganze an InputFile.Open(FilePath);

Code: Alles auswählen
   procedure BLOBImportFromServerFile(var TempBlob: Codeunit "Temp Blob"; FilePath: Text)
    var
        OutStream: OutStream;
        InStream: InStream;
        InputFile: File;
    begin
        IsAllowedPath(FilePath, false);

        if not FILE.Exists(FilePath) then
            Error(FileDoesNotExistErr, FilePath);

        InputFile.Open(FilePath);
        InputFile.CreateInStream(InStream);
        TempBlob.CreateOutStream(OutStream);
        CopyStream(OutStream, InStream);
        InputFile.Close;
    end;


es ist auch völlig egal, ob ich mit CreateBook einen Pfad angebe oder nicht:

Code: Alles auswählen
        Clear(ExcelBuffer);
        ExcelBuffer.Reset();
        ExcelBuffer.DeleteAll();
        ExcelBuffer.CreateBook(FileName + 'temp.xlsx', InvoiceLineLbl);


Ich arbeite hier übrigens in einem Docker. Was schon seltsam war:
Wenn ich kein Pfad angebe, wird irgend ein FileNameServer im ExcelBuffer erzeugt, welchen es gar nicht in meinem Docker gibt.
Wenn ich aber einen Pfad angebe, den es definitiv in meinem Docker gibt, kommt auch die E/A Ausnahme
NAVGATOR
 
Beiträge: 189
Registriert: 15. Januar 2009 22:26
Realer Name: Alex
Arbeitsort: Neuried
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: BC18

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon sweikelt » 1. Juni 2022 10:04

vergessen wir mal SaveToStream
Code: Alles auswählen
codeunit 50032 "Excel Magic"
{
    trigger OnRun()
    begin
        DoSomething();
    end;

    local procedure DoSomething()
    var
        ServTempFileName: Text;
    begin
        ServTempFileName := FileMgt.ServerTempFileName('xlsx');
        ExcelBuffer.CreateBook(ServTempFileName, 'MyBook');
        ExcelBuffer.NewRow();
        ExcelBuffer.AddColumn('hello', false, '', false, false, false, '', ExcelBuffer."Cell Type"::Text);
        ExcelBuffer.WriteSheet('HELLOWORLD', CompanyName(), UserId());
        ExcelBuffer.CloseBook();
        FileMgt.DownloadTempFile(ServTempFileName);
    end;

    var
        ExcelBuffer: Record "Excel Buffer" temporary;
        FileMgt: Codeunit "File Management";
}


anstatt
Code: Alles auswählen
    FileMgt.DownloadTempFile(ServTempFileName);


kannst du auch
Code: Alles auswählen
    FileMgt.CopyServerFile(ServTempFileName,'<<<<SavingPathWithFullFileName :)>>>>',false);


nutzen, um den FileSave-Dialog garnicht erst für den User sichtbar zu machen (den hab ich nur genutzt, damit ich die Datei auch mal in den Händen halten kann, ohne mich durch den Container "wühlen" zu müssen
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon fiddi » 1. Juni 2022 10:40

Hallo,

diese Programmierung wird aber wahrscheinlich teuer, weil das nicht Cloud- kompatibel ist.

Besser wäre es den Excel- Buffer in einen Stream zu speichern, und diese dann manuell herunter laden.

Gruß Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! Dafür ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Excel Buffer Datei direkt Abspeichern ohne öffnen

Beitragvon sweikelt » 1. Juni 2022 10:49

korrekt, daher mein erster Vorschlag - SaveToStream.
Mein 2. Beipsiel war nur zur Verdeutlichung gedacht
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC


Zurück zu 365 Business Central (On-Premises)

Wer ist online?

Mitglieder in diesem Forum: DotBot [Bot] und 1 Gast