![]() |
Re: Code beschleunigen
Stimmt! Testen wir mal ...
|
Re: Code beschleunigen
nimm dochmal schrittweise jeden Befehl raus, und schau wo der Flaschenhals ist ..
propier doch mal:
Delphi-Quellcode:
if i Mod 10 = 0 then begin
Label6.Caption := IntToStr(i); Label6.Refresh; end; |
Re: Code beschleunigen
Ich würde darauf Tippen das 99% der Rechenzeit in den beiden Zeilen
Delphi-Quellcode:
da du einen COM-Out-Of-Process-Server verwendest. Falls du auch noch über Frühe Bindung gehst (Sheet: OleVariant) kannst du jedliche andere Optimierung vergessen. Hier solltest du über GetRange/SetRange arbeiten um den ganzen Block als Variant Array in deinen Adressraum holen. Leider kann ich dir keinen Sourcecode liefern da ich dies auch nur von einer Kaufkomponente habe. Alternativ könntest du native Excel-Format wie Flexel kaufen welche Exceldateien native laden können.
help := Sheet.Cells[j,13].Value;
... Sheet.Cells[j,13].Value := help; |
Re: Code beschleunigen
welche Werte haben bei dir arr[0] und arr[1]? Sind die beiden Werte gleich lang? Wenn ja - wie lang?
|
Re: Code beschleunigen
Wie hast Du denn das Excel eingebunden, bzw. was genau ist Sheet? Wenn Sheet ein Variant ist, dann liegt da die Lösung. COM-Objekte als Variants verbraten enorm viel Zeit mit nichts tun.
Sherlock |
Re: Code beschleunigen
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt zwei Möglichkeiten :
1.) Die Unit in der angehängten Datei habe ich mal gefunden und es soll laut Beschreibung, ziemlich schnell gehen. 2.) Im Excel-Makrocode kannst Du so einen String-Replace durchführen
Code:
Set Intstring = "25=>35"
Intstring = WorksheetFunction.Substitute(Intstring, "=>", "") |
Re: Code beschleunigen
Was auch noch ein wenig Geschwindigkeit bring ist
Code:
ExcelApp.ScreenUpdating[0] := False;
try ... finally ExcelApp.ScreenUpdating[0] := True; end; |
Re: Code beschleunigen
Hallo nochmal und Danke an alle,
nachdem meine Funktion in der letzten Nacht 8 h für 1000 (das war nur ein/Fünftel!) Datensätze gebraucht hat, habe ich die betroffene Excel-Spalte als Textdatei gespeichert und nach Bearbeitung einfach wieder in Excel eingefügt (zum Glück lagen keine Formatierungen bzw. Formeln darauf). Der Code macht die gesammte Liste jetzt in einer Minute:
Delphi-Quellcode:
Unglaublich, was Excel da an Performance schluckt :shock:
for i := 0 to sl.Count-1 do
begin Label6.Caption := IntToStr(i); Label6.Refresh; if sl[i] <> '' then begin arr := explode(';',sl[i]); for j := 0 to nuList.Count-1 do begin help := StringReplace(nuList[j],arr[0],arr[1],[rfReplaceAll]); nuList[j] := help; end; end; end; Viele Grüße ... |
Re: Code beschleunigen
Das ist nicht unbedingt Excel, was da Performance schluckt. Wäre ja auch fatal.
Du solltest versuchen, so viel wie möglich mit den Excelroutinen zu erledigen, ansonsten bewegst Du zu viel zwischen Deiner App und Excel hin und her, und je nach Einbindung von Excel kostet das Performance. Sherlock |
Re: Code beschleunigen
Zitat:
da hast du Recht und so wars auch gemeint. Am liebsten wäre es mir gewesen, wenn ich das über ein Macro hätte regeln können, aber da hätte ich mich erst einarbeiten müssen. Viele Grüße ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz