[Gelöst]Schleife IF .. OR

6. Juni 2018 10:08

Hallo zusammen.

ich versuche einen Report Export nach Excel über mehrere Mandanten zu schreiben und habe wenig Zeit, aber der stürzt vor Beendigung ab?
Ich weiß, mein Code ist an der Stelle nicht perfekt, aber darf man das in Excel-Automation Code so schreiben?
Ich hatte keine Zeit den Export mit Excelbuffer zu programmieren, deswegen hatte ich mich zu dieser altbackenen Art entschieden.

Code:
OnPreReport()
_Mandant:=Company.GETFILTER(Company.Kurzbezeichnung);
_Buchungsdatum:=Kreditorenposten.GETFILTER(Kreditorenposten.Buchungsdatum);

h:='3';
CREATE(App,FALSE, TRUE);
App.Visible(TRUE);

Book:=App.Workbooks.Add;
Sheet:=Book.Worksheets.Item('Tabelle1');

Sheet.Range('A1').NumberFormat:='@';
Sheet.Range('A1').Font.Bold:=FALSE;
Sheet.Range('A1').Font.Size:=11;
Sheet.Range('A1').Value:='Kreditorenposten Übersicht: '+FORMAT(CURRENTDATETIME);

comp.SETFILTER(comp.Kurzbezeichnung,_Mandant);
comp.SETCURRENTKEY(Name);
IF comp.FIND('-') THEN REPEAT
    IF  (comp.Kurzbezeichnung = '150') OR
        (comp.Kurzbezeichnung = '151') OR
        (comp.Kurzbezeichnung = '152') OR
        (comp.Kurzbezeichnung = '154') OR
        (comp.Kurzbezeichnung = '155') OR
        (comp.Kurzbezeichnung = '156') OR
        (comp.Kurzbezeichnung = '157') OR
        (comp.Kurzbezeichnung = '159') OR
        (comp.Kurzbezeichnung = '160') OR
        (comp.Kurzbezeichnung = '161') OR
        (comp.Kurzbezeichnung = '164') OR
        (comp.Kurzbezeichnung = '171') OR
        (comp.Kurzbezeichnung = '172') OR
        (comp.Kurzbezeichnung = '180') OR
        (comp.Kurzbezeichnung = '181') OR
        (comp.Kurzbezeichnung = '197') OR
        (comp.Kurzbezeichnung = '227') OR
        (comp.Kurzbezeichnung = '228') OR
        (comp.Kurzbezeichnung = '229') OR
        (comp.Kurzbezeichnung = '230') OR
        (comp.Kurzbezeichnung = '231') OR
        (comp.Kurzbezeichnung = '235') OR
        (comp.Kurzbezeichnung = '236') OR
        (comp.Kurzbezeichnung = '239') OR
        (comp.Kurzbezeichnung = '240') OR
        (comp.Kurzbezeichnung = '242') OR
        (comp.Kurzbezeichnung = '243') OR
        (comp.Kurzbezeichnung = '244') OR
        (comp.Kurzbezeichnung = '245') OR
        (comp.Kurzbezeichnung = '246') OR
        (comp.Kurzbezeichnung = '247') OR
        (comp.Kurzbezeichnung = '248') OR
        (comp.Kurzbezeichnung = '249') OR
        (comp.Kurzbezeichnung = '308') OR
        (comp.Kurzbezeichnung = '310') OR
        (comp.Kurzbezeichnung = '311') OR
        (comp.Kurzbezeichnung = '332') OR
        //(comp.Kurzbezeichnung = '333') OR
        (comp.Kurzbezeichnung = '335') OR
        (comp.Kurzbezeichnung = '351') OR
        (comp.Kurzbezeichnung = '353') OR
        (comp.Kurzbezeichnung = '354') OR
        (comp.Kurzbezeichnung = '355') OR
        (comp.Kurzbezeichnung = '357') OR
        (comp.Kurzbezeichnung = '358') OR
        (comp.Kurzbezeichnung = '370') OR
        (comp.Kurzbezeichnung = '371') OR
        (comp.Kurzbezeichnung = '372') OR
        (comp.Kurzbezeichnung = '373') OR
        (comp.Kurzbezeichnung = '374') OR
        (comp.Kurzbezeichnung = '380') OR
        (comp.Kurzbezeichnung = '382') OR
        (comp.Kurzbezeichnung = '383') OR
        (comp.Kurzbezeichnung = '384') OR
        (comp.Kurzbezeichnung = '386') OR
        (comp.Kurzbezeichnung = '396') OR
        (comp.Kurzbezeichnung = '397') OR
        (comp.Kurzbezeichnung = '417') OR
        (comp.Kurzbezeichnung = '418') OR
        (comp.Kurzbezeichnung = '419') OR
        (comp.Kurzbezeichnung = '420') OR
        (comp.Kurzbezeichnung = '421') OR
        (comp.Kurzbezeichnung = '433') OR
        (comp.Kurzbezeichnung = '434') OR
        (comp.Kurzbezeichnung = '442') OR
        (comp.Kurzbezeichnung = '445') OR
        (comp.Kurzbezeichnung = '446') OR
        (comp.Kurzbezeichnung = '459') OR
        (comp.Kurzbezeichnung = '461') OR
        (comp.Kurzbezeichnung = '462') OR
        (comp.Kurzbezeichnung = '463') OR
        (comp.Kurzbezeichnung = '464') OR
        (comp.Kurzbezeichnung = '471') OR
        (comp.Kurzbezeichnung = '474') OR
        (comp.Kurzbezeichnung = '477') OR
        (comp.Kurzbezeichnung = '481') OR
        (comp.Kurzbezeichnung = '482') OR
        (comp.Kurzbezeichnung = '483') OR
        (comp.Kurzbezeichnung = '490') OR
        (comp.Kurzbezeichnung = '491') OR
        (comp.Kurzbezeichnung = '493') OR
        (comp.Kurzbezeichnung = '495') OR
        (comp.Kurzbezeichnung = '681') OR
        (comp.Kurzbezeichnung = '682') OR
        (comp.Kurzbezeichnung = '683') OR
        (comp.Kurzbezeichnung = '684') OR
        (comp.Kurzbezeichnung = '685') OR
        (comp.Kurzbezeichnung = '686') OR
        (comp.Kurzbezeichnung = '687') OR
        (comp.Kurzbezeichnung = '695') OR
        (comp.Kurzbezeichnung = '696') OR
        (comp.Kurzbezeichnung = '697') OR
        (comp.Kurzbezeichnung = '698') OR
        (comp.Kurzbezeichnung = '699') OR
        (comp.Kurzbezeichnung = '704') OR
        (comp.Kurzbezeichnung = '705') OR
        (comp.Kurzbezeichnung = '714') OR
        (comp.Kurzbezeichnung = '715') OR
        (comp.Kurzbezeichnung = '716') OR
        (comp.Kurzbezeichnung = '722') OR
        (comp.Kurzbezeichnung = '723') OR
        (comp.Kurzbezeichnung = '724') OR
        (comp.Kurzbezeichnung = '725') OR
        (comp.Kurzbezeichnung = '726') OR
        (comp.Kurzbezeichnung = '738') OR
        (comp.Kurzbezeichnung = '739') OR
        (comp.Kurzbezeichnung = '740') OR
        (comp.Kurzbezeichnung = '743') OR
        (comp.Kurzbezeichnung = '753') OR
        (comp.Kurzbezeichnung = '757') OR
        (comp.Kurzbezeichnung = '768') OR
        (comp.Kurzbezeichnung = '770') OR
        (comp.Kurzbezeichnung = '777') OR
        (comp.Kurzbezeichnung = '781') OR
        (comp.Kurzbezeichnung = '782') OR
        (comp.Kurzbezeichnung = '783') OR
        (comp.Kurzbezeichnung = '784') OR
        (comp.Kurzbezeichnung = '787') OR
        (comp.Kurzbezeichnung = '788') OR
        (comp.Kurzbezeichnung = '789') OR
        (comp.Kurzbezeichnung = '792') OR
        (comp.Kurzbezeichnung = '793') OR
        (comp.Kurzbezeichnung = '794') OR
        (comp.Kurzbezeichnung = '795') OR
        (comp.Kurzbezeichnung = '796') OR
        (comp.Kurzbezeichnung = '797') OR
        (comp.Kurzbezeichnung = '798') OR
        (comp.Kurzbezeichnung = '799') OR
        (comp.Kurzbezeichnung = 'R01') OR
        (comp.Kurzbezeichnung = 'R02') OR
        (comp.Kurzbezeichnung = 'R03') OR
        (comp.Kurzbezeichnung = 'R04') OR
        (comp.Kurzbezeichnung = 'R05') OR
        (comp.Kurzbezeichnung = 'R06') OR
        (comp.Kurzbezeichnung = 'R07') OR
        (comp.Kurzbezeichnung = 'R10') OR
        (comp.Kurzbezeichnung = 'R11') OR
        (comp.Kurzbezeichnung = 'R13') OR
        (comp.Kurzbezeichnung = 'R15') OR
        (comp.Kurzbezeichnung = 'R16') OR
        (comp.Kurzbezeichnung = 'R17') OR
        (comp.Kurzbezeichnung = 'R18') OR
        (comp.Kurzbezeichnung = 'R19') OR
        (comp.Kurzbezeichnung = 'R22') OR
        (comp.Kurzbezeichnung = 'R23') OR
        (comp.Kurzbezeichnung = 'R24') OR
        (comp.Kurzbezeichnung = 'R25') OR
        (comp.Kurzbezeichnung = 'R26') OR
        (comp.Kurzbezeichnung = 'R27') OR
        (comp.Kurzbezeichnung = 'R28') OR
        (comp.Kurzbezeichnung = 'R32') OR
        (comp.Kurzbezeichnung = 'R33') THEN BEGIN

        kred_posten.CHANGECOMPANY(comp.Name);
        rechnungseingangkopf.CHANGECOMPANY(comp.Name);
       
        Sheet.Range('A2').NumberFormat:='@';
        Sheet.Range('A2').Font.Bold:=TRUE;
        Sheet.Range('A2').Font.Size:=11;
        Sheet.Range('A2').Value:='Kurzbez. Mdt.';
        Sheet.Range('B2').NumberFormat:='@';
        Sheet.Range('B2').Font.Bold:=TRUE;
        Sheet.Range('B2').Font.Size:=11;
        Sheet.Range('B2').Value:='Name Mdt.:';       
        Sheet.Range('C2').NumberFormat:='@';
        Sheet.Range('C2').Font.Bold:=TRUE;
        Sheet.Range('C2').Font.Size:=11;
        Sheet.Range('C2').Value:='Anzahl Bemerkungszeilen';
        Sheet.Range('D2').NumberFormat:='@';
        Sheet.Range('D2').Font.Bold:=TRUE;
        Sheet.Range('D2').Font.Size:=11;
        Sheet.Range('D2').Value:='Niederlassung';
        Sheet.Range('E2').NumberFormat:='@';
        Sheet.Range('E2').Font.Bold:=TRUE;
        Sheet.Range('E2').Font.Size:=11;
        Sheet.Range('E2').Value:='Buchungsdatum';
        Sheet.Range('F2').NumberFormat:='@';
        Sheet.Range('F2').Font.Bold:=TRUE;
        Sheet.Range('F2').Font.Size:=11;
        Sheet.Range('F2').Value:='Belegart';
        Sheet.Range('G2').NumberFormat:='@';
        Sheet.Range('G2').Font.Bold:=TRUE;
        Sheet.Range('G2').Font.Size:=11;
        Sheet.Range('G2').Value:='Belegdatum';
        Sheet.Range('H2').NumberFormat:='@';
        Sheet.Range('H2').Font.Bold:=TRUE;
        Sheet.Range('H2').Font.Size:=11;
        Sheet.Range('H2').Value:='Leistungsdatum';
        ...               

        //Kreditorenposten pro Mandant
        kred_posten.SETCURRENTKEY("Kreditorennr.",Buchungsdatum,Währungscode,Statistisch,Niederlassung,Kostenstelle,Kostenträger,Belegart,"Kein Bonusumsatz",Kreditorenbuchungsgruppe,"Belegart Anz. Vorgang");
        kred_posten.SETFILTER(kred_posten.Buchungsdatum,_Buchungsdatum);
        IF kred_posten.FIND('-') THEN REPEAT

            //Rechnungseingang
            rechnungseingangkopf.SETFILTER(rechnungseingangkopf."Nr.",kred_posten."Belegnr.");
            rechnungseingangkopf.SETCURRENTKEY(Kreditor,Gebucht,Fälligkeitsdatum,Belegdatum,"Belegart Anz. Vorgang",Niederlassung,Kostenstelle,"Anz. Vorgang",Kostenträger,Abgrenzung,Einbehaltsart,Währungscode);
            IF rechnungseingangkopf.FIND('-') THEN BEGIN
                Sheet.Range('AQ'+h).NumberFormat:='@';
                Sheet.Range('AQ'+h).Font.Bold:=FALSE;
                Sheet.Range('AQ'+h).Font.Size:=11;
                Sheet.Range('AQ'+h).Value:=rechnungseingangkopf."Freigabe zur Buchung";

                Sheet.Range('AR'+h).NumberFormat:='@';
                Sheet.Range('AR'+h).Font.Bold:=FALSE;
                Sheet.Range('AR'+h).Font.Size:=11;
                Sheet.Range('AR'+h).Value:=rechnungseingangkopf.Freigabedatum;

            END;

            Sheet.Range('A'+h).NumberFormat:='@';
            Sheet.Range('A'+h).Font.Bold:=FALSE;
            Sheet.Range('A'+h).Font.Size:=11;
            Sheet.Range('A'+h).Value:=comp.Kurzbezeichnung;

            Sheet.Range('B'+h).NumberFormat:='@';
            Sheet.Range('B'+h).Font.Bold:=FALSE;
            Sheet.Range('B'+h).Font.Size:=11;
            Sheet.Range('B'+h).Value:=comp.Name;

            kred_posten.CALCFIELDS("Anzahl Bemerkungszeilen");
            Sheet.Range('C'+h).NumberFormat:='@';
            Sheet.Range('C'+h).Font.Bold:=FALSE;
            Sheet.Range('C'+h).Font.Size:=11;
            Sheet.Range('C'+h).Value:=kred_posten."Anzahl Bemerkungszeilen";

            //Belegart
            IF kred_posten.Belegart = 0 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='';
            END ELSE IF kred_posten.Belegart = 1 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='Zahlung';
            END ELSE IF kred_posten.Belegart = 2 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='Rechnung';
            END ELSE IF kred_posten.Belegart = 3 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='Gutschrift';
            END ELSE IF kred_posten.Belegart = 4 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='Zinsrechnung';
            END ELSE IF kred_posten.Belegart = 5 THEN BEGIN
                Sheet.Range('F'+h).NumberFormat:='@';
                Sheet.Range('F'+h).Font.Bold:=FALSE;
                Sheet.Range('F'+h).Font.Size:=11;
                Sheet.Range('F'+h).Value:='Mahnung';
            END;
           
            Sheet.Range('AO'+h).NumberFormat:='@';
            Sheet.Range('AO'+h).Font.Bold:=FALSE;
            Sheet.Range('AO'+h).Font.Size:=11;
            Sheet.Range('AO'+h).Value:=kred_posten.Änderungsdatum;

            Sheet.Range('AP'+h).NumberFormat:='@';
            Sheet.Range('AP'+h).Font.Bold:=FALSE;
            Sheet.Range('AP'+h).Font.Size:=11;
            Sheet.Range('AP'+h).Value:=kred_posten."Anz. Vorgang";

            h:=INCSTR(h);
        UNTIL kred_posten.NEXT(+1)=0;
        kred_posten.RESET;
  END;

UNTIL comp.NEXT(+1)=0;
comp.RESET;

OnPostReport()
Sheet.Columns.AutoFit; // optimale Spaltenbreite

Book.Save;
MESSAGE('fertig');


Der Report ist sehr langsam, ich überlege wieso. Und er bricht vor Beendigung ab.
Darf man das über so viele Mandanten mit IF und OR schreiben?

Code:
IF comp.FIND('-') THEN REPEAT
    IF  (comp.Kurzbezeichnung = '150') OR
        (comp.Kurzbezeichnung = '151') OR
        (comp.Kurzbezeichnung = '152') OR
        (comp.Kurzbezeichnung = '154') OR
        (comp.Kurzbezeichnung = '155') OR
        ...


Gruß, Christian
Zuletzt geändert von navCH am 8. Juni 2018 10:10, insgesamt 1-mal geändert.

Re: Schleife IF .. OR

6. Juni 2018 10:19

Setze doch einfach einen Filter auf die Company. Dann musst du nicht per IF abfragen.

Re: Schleife IF .. OR

6. Juni 2018 10:30

Guten Morgen.
Meinst du so?
Code:
comp.SETFILTER(comp.Kurzbezeichnung,_Mandant);

Hier übergebe ich die Mandanten nach Eingabe in Filter Request schon.

Re: Schleife IF .. OR

6. Juni 2018 13:52

Ich habe inzwischen ein Filter auf Company.Name gesetzt, da es auf Company.Kurzbezeichnung keinen Key gibt.
Auch habe ich die Reihenfolge von
Code:
IF comp.FIND('-') THEN REPEAT
    IF  (comp.Kurzbezeichnung = '154') OR
        (comp.Kurzbezeichnung = '155') OR
        (comp.Kurzbezeichnung = '150') OR
        (comp.Kurzbezeichnung = '151') OR
        (comp.Kurzbezeichnung = '152') OR
         ...
so gesetzt, dass die Abfrage nach Company.Name sortiert ist, da es nach dieser Reihenfolge in der Tabelle steht.
Leider ist mir der Export noch zu langsam!

Gruß, Christian

Re: Schleife IF .. OR

6. Juni 2018 14:21

Um wie viele Zeilen handelt es sich denn?

Grundsätzlich würde ich einen Export direkt nach Excel nur bei wenigen Datensätzen machen da das sonst nunmal einfach langsam ist.
Alternativ würde ich dir empfehlen einen XMLPort zu schreiben und eine CSV Datei zu generieren. Diese kannst du dann ja auch in Excel öffnen.
Das wird vermutlich um einiges schneller gehen.

Re: Schleife IF .. OR

6. Juni 2018 14:40

Um wie viele Zeilen handelt es sich denn?

pro Mandant können durchaus mehrere 1000 Posten durchlaufen werden.

Gruß Christian

Re: Schleife IF .. OR

6. Juni 2018 14:49

navCH hat geschrieben:pro Mandant können durchaus mehrere 1000 Posten durchlaufen werden.


Dann könnte der Export abbrechen, weil die maximale Zeilenanzahl von Excel erreicht ist.
Bei Excel 2016 sind das ca 1,05 Mio Zeilen.

Wenn du bei 150 Mandanten im schnitt 7500 Zeilen hast bist du schon bei 1,125 Mio Zeilen.

An deiner Stelle würde ich das echt mit einem XMLPort oder sogar direkt per SQL Abfrage machen.

Re: Schleife IF .. OR

6. Juni 2018 15:45

Dann könnte der Export abbrechen, weil die maximale Zeilenanzahl von Excel erreicht ist.
Bei Excel 2016 sind das ca 1,05 Mio Zeilen.

Nein, der brach schon bei irgendwas mit 5000 Zeilen ab.

Wenn du bei 150 Mandanten im Schnitt 7500 Zeilen hast bist du schon bei 1,125 Mio Zeilen.
es gibt auch Mandanten mit weniger Posten. 1.000.000 sollte ich nicht erreichen.

Re: Schleife IF .. OR

6. Juni 2018 16:36

Ohne eine Fehlermeldung oder sonst irgendwelche Anhaltspunkte kann ich dir leider nicht helfen.
Aber an deiner "OR"- Abfrage wird es garantiert nicht liegen.

Aber wieso willst du diese Menge an Daten so unbedingt direkt nach Excel exportieren?
Ich benutze den direkten Export nach Excel wirklich nur dann wenn es um nicht mehr als ein paar 1000 Datensätze geht. Die hast du auf jeden Fall überschritten.

Re: [Gelöst]Schleife IF .. OR

9. Juni 2018 12:49

Hallo.

Und wieder einmal ist der Export abgebrochen.
Wieso kommt der Export nicht über 4.800 Zeilen hinaus?

Beim Export meiner Kreditioren-Belege hat NAV wieder bei ca. 4800 Zeilen abgebrochen! Weiß jemand wieso?
Folgende Fehlermeldung hat NAV ausgegeben:
zuwenigSpeicher.PNG


Gruß,
Christian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [Gelöst]Schleife IF .. OR

11. Juni 2018 08:37

Wieso nutzt du denn keinen XMLport?

shove hatte das ja auch schon angemerkt...

Re: [Gelöst]Schleife IF .. OR

11. Juni 2018 08:48

Hallo,

das könnte an der Einstellung "MaxNoOfXMLRecordsToSend" in "C:\Users\BENUTZER\AppData\Roaming\Microsoft\Microsoft Dynamics NAV\80\ClientUserSettings.config' liegen.

Erhöhe diese Wert doch mal nachdem du den Client beendet hast.

Das gleiche Problem dürfte dann auch der XML- Port haben :wink: .

Gruß Fiddi

Re: [Gelöst]Schleife IF .. OR

11. Juni 2018 11:20

Guten Tag.

das könnte an der Einstellung "MaxNoOfXMLRecordsToSend" in "C:\Users\BENUTZER\AppData\Roaming\Microsoft\Microsoft Dynamics NAV\80\ClientUserSettings.config' liegen.

Erhöhe diese Wert doch mal nachdem du den Client beendet hast.

Das kann daran liegen. Der Export bricht immer knapp vor 5.000 Zeilen ab.
Das ist in der Config eingetragen:
Code:
<add key="MaxNoOfXMLRecordsToSend" value="5000" />

Ich werde den Wert erstmal auf 100.000 erhöhen.
Code:
<add key="MaxNoOfXMLRecordsToSend" value="100000" />

Wir haben ja mehrere Mittelschicht Server. Reicht es, wenn ich die Config nur auf den einen Server ändere, wo ich den Export mache?
Kann da was passieren auf den Mittelschicht, wenn ich den Wert einfach erhöhe?

Gruß, Christian

Re: [Gelöst]Schleife IF .. OR

11. Juni 2018 11:55

Reicht es, wenn ich die Config nur auf den einen Server ändere, wo ich den Export mache?


Das ist eine Benutzereinstellung!

Gruß Fiddi

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 09:29

Guten Morgen.

hatte die ClientUserSettings.config im Feld
Code:
<add key="MaxNoOfXMLRecordsToSend" value="500000" />
erhöht.

Problem besteht immernoch. Report bricht bei ca. 4.700 Zeilen ab.

:-(

Gruß,
Christian

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 09:52

Hast du nen 32 oder 64 bit System/Office installiert?
Wie viele Spalten hat dein Export?

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 10:06

Excel 2016 32 Bit

Bericht hat ca. 45 Spalten

Gruß, Christian

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 10:06

Hallo,

der Microsoft Support sagt, es hat etwas mit der IRPStackSize zu tun.

Wieiviel RAM hat denn dein Server? Vielleicht ist der nicht ausreichend.

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 10:30

Einfach mal zum Test:
Entferne mal ein paar Spalten und probier es noch einmal.
Ich gehe davon aus du bekommst nun mehr Zeilen.

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 10:34

Vorallem hast du ja auch vier Operationen pro Zelle:

Numberformat
Bold
FontSize
Value

bei 45 Spalten und 4700 Zeilen sind das schon 846.000 Operationen.
Ich weiß nicht wie die Excel Automation genau funktioniert aber es könnte schon sein, dass das im RAM zwischen gespeichert wird bis du das Excelblatt schreibst.
Zusätzlich hält die Automation die Daten vermutlich auch noch im RAM.

Hast du mal versucht Book.Save in der Schleife aufzurufen? Evtl. hilft das.

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 14:01

Memory: 16.384 MB

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 14:25

bitte versuche die vorgeschlagenen Methoden einmal. Wenn das alles nicht hilft, versuch doch auch mal nur einen Mandanten zu exportieren.

auch eine 64bit Office-Installation könnte helfen.

16Gb Ram sind schnell vollgeschrieben

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 14:40

Hallo,

hast du schon mal den Datenexport probiert? Der ist für größere Mengen an Daten (GDPDU) geeignet, und den kann man im Zweifel auch wieder in Excel einlesen. Im schlimmsten Fall bereitest du die Excel einfach hinterher auf.

Gruß Fiddi

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 14:41

das liegt am RAM.
Ich hatte die Anzahl der Spalten eben mal auf 9 reduziert und neu gestartet.
Der Export ist deutlich schneller und schon viel weiter.

Ich muss dann mal die Infrastructur bitten aufzurüsten.

Re: [Gelöst]Schleife IF .. OR

12. Juni 2018 14:44

Und was denkst du wieviel Ram du brauchen wirst für deinen Export? :roll: