![]() |
Größere Anzahl von Exceldateien auswerten
Ich habe ein Programm, welches alle Exceldateien (gleicher Aufbau) eines Pfades einliest und dann Werte zwischenspeichert.
Derzeit sind das ca. 8000 Dateien und es dauert einige Stunden, bis das Programm durch ist. Hier die Code Schnipsel
Delphi-Quellcode:
Sieht hier jemand Optimierungsmöglichkeiten?
if OpenXlsWorkBook(fName, WSName, WBk, WS) then begin
.... KalkData.Kunde := WS.Cells.Item[arZellBezüge[Kunde, 1], arZellBezüge[Kunde, 2]].Value; .... if WBk <> Nil then begin SaveChanges := Save; WBk.Close(SaveChanges, EmptyParam, EmptyParam, lcidXls); WBk := NIL; end; |
AW: Größere Anzahl von Exceldateien auswerten
schreiben und lesen in Excel über Delphi ist ziemlich langsam ,
ich würde, wenn möglich, die Excel Datei als CSV abspeichern und die CSV verarbeiten mfg Hannes |
AW: Größere Anzahl von Exceldateien auswerten
Eine richtige Datenbank zu verwenden scheitert an den Umständen/Kundenvorgaben?
|
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Zitat:
Vielleicht merke ich mir intern (in einer DB) das Datum der jeweiligen Exceltabelle. Wenn sich dieses nicht geändert hat, dann brauche ich die Daten ja nicht erneut auswerten und ich kann mir das Laden einer Exceltabelle sparen. |
AW: Größere Anzahl von Exceldateien auswerten
Was genau ist bei dir langsam?
Das Speichern oder das Ändern der Werte in der Excel-Datei? Wenn du viele Werte (in einem Excelbereich) änderst, dann ist evtl. das Arbeiten mit VariantArrays schneller Alternativ gibts ein paar € aus und machst alles native in Delphi: ![]() |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Zitat:
Derzeit kopiere ich jede Zelle, wie oben beschrieben. Das sind aber nur 13 Werte. Zitat:
|
AW: Größere Anzahl von Exceldateien auswerten
Aber Du wirst doch nicht jeden Tag alle Dateien einlesen müssen, oder?
Also reicht es doch bestimmt aus, den letzten Zeitpunkt der Auswertung zu speichern und beim nächsten Durchgang nur die dateien zu verarbeuten, die eben nach diesem gemerkten Zeitpunkt erstellt/geändert worden sind. |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Ich hatte erst einmal das Programm geschrieben, damit ich überhaupt an die Daten komme und nun habe ich bemerkt, dass es "ewig" dauert. Wie Uwe oben beschrieben hat, kann ich ja auchmal flexcel versuchen. Aber das Merken der das Dateidatums wird wohl die schnellste Lösung sein. |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
|
AW: Größere Anzahl von Exceldateien auswerten
Flexcel ist um ein Vielfaches schneller als der Zugriff über OLE, besonders beim Schreiben. Man muss allerdings den Code umschreiben.
Wenn es nur ums Einlesen geht sollte das aber nicht aufwendig sein. Einfach mal probieren. Der Code zum Einlesen und zum Verarbeiten ist getrennt? |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
|
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Gibt es in Delphi Funktionen, die direkt die MD5 Checksumme ausspucken oder muss man sich das selbst zusammenbauen? |
AW: Größere Anzahl von Exceldateien auswerten
Hallo,
wird für jede Datei eine neue Excel-Instanz geöffnet? Wenn Du die Dateien einlesen willst, haben zu gleicher Zeit noch andere User Zugriff auf die Dateien? Wenn die Daten nur gelesen werden braucht man das Workbook nicht abspeichern, es muss nur geschlossen werden. Bis bald Chemiker |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Ich habe nochmal nachgeschaut. Das Workbook wird in diesem Falle nicht gespeichert, sondern nur geschlossen. |
AW: Größere Anzahl von Exceldateien auswerten
Also wenn es komplett formalisiert ist, könnte ich mir vorstellen es nur über eine Excel oder Access Master Datei und Makro / Links zu machen und bloß das Ergebnis mit Delphi abzugreifen.
Eine lokale Kopie (mit MD5 Hash) oder durch einen Windows Dienst ist vielleicht auch hilfreich. Wenn Du eine funktionierende Variante hast, dann kannst Du das ja wunderbar gegeneinander laufen lassen und durchtesten. |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
MD5 und Delphi? ![]() Du hast die Qual der Wahl. Die Indys haben das auch dabei und sollen schon seit 'ner Weile bei Delphi immer mit dabei sein ;-) 18 Zeilen zur Umsetzung in einer eigenen Funktion sind z. B. ![]() |
AW: Größere Anzahl von Exceldateien auswerten
Der erste Gedanke, der einem kommt, ist, ob man die Daten nicht unter Umgehung von Excel extrahieren könnte. Insbesondere, weil es immer die gleichen Zellen sind. Spätestestens seit 2007 verwendet Excel das Office Open XML-Format. Wenn man das direkt auslesen könnte, müsste das die Geschwindigkeit enorm steigern. Tatsächlich gibt es zumindest für .NET
![]() ![]() |
AW: Größere Anzahl von Exceldateien auswerten
Ob MD5 direkt von Delphi's RTL unterstützt ist weiß ich nicht, aber
SHA1/SHA2 (SHA224, SHA256, SHA384 und SHA512) sind in System.Hash standardmäßig seit ein paar Versionen dabei. Grüße TurboMagic |
AW: Größere Anzahl von Exceldateien auswerten
Zitat:
Des Weiteren hatte ich noch beim Öffnen der Exceltabelle ReadOnly auf True gesetzt. Das sollte nun für eine Optimierung reichen. Danke nochmals für alle Tipps. |
AW: Größere Anzahl von Exceldateien auswerten
![]() ![]() ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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 by Thomas Breitkreuz