AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Preislisten Generator für Excel

Ein Thema von milos · begonnen am 16. Sep 2013 · letzter Beitrag vom 16. Sep 2013
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#1

Preislisten Generator für Excel

  Alt 16. Sep 2013, 00:02
Hallo,

ich habe bisher für meinen Arbeitgeber einen Preislisten Generator in C# geschrieben, der eine unstrukturierte Excel Arbeitsmappe mit einer linearen Liste der Geräte, die wir verkaufen, in eine "gutaussehende" richtige Preisliste generiert.

Dabei geht das programm folgendermassen vor.
Der Benutzer wählt eine Excel Datei aus, die wird durch das COM-Steuerelement von Microsoft geladen.
Danach wird Arbeitsblatt für Arbeitsblatt alles geparsed. Anschliessend wird eine neue Arbeitsmappe erstellt und dort das resultat hingezaubert xP
Das unstrukturierte arbeitsblatt wird gelöscht und das eben erstelllte wird in den richtigen namen umbenannt. So geht es bei jedem Arbeitsblatt.

Ich habe zuerst diese Lösung in VBA - also direkt in Excel - gelöst, aber da es da ziemlich umständlich ist ein Programm über ein Projekt laufen zu lassen, entschied ich mich den Generator halt in C# zu schreiben. Mein jetziges Problem ist, dass das Programm ziemlich lahmarschig läuft. Es liegt glaube ich nicht an C# sondern eher am COM Steuerelement.
Meine Idee ist es nun den Generator in FreePascal/Delphi neu zu schreiben, habe jedoch Schwierigkeiten mich zu entscheiden. Heute (ganz knapp Heute - Montag) würde ich gerne starten wollen, damit dieses Problem noch bis ca. Mittwoch oder Donnerstag gelöst ist.

Wie kann ich Excel Dateien Parsen ohne das COM Steuerelement zu benutzen? Ich würde wirklich gerne so wenig Performance wie möglich verlieren indem ich nun eine Bibliothek verwende die meiner meinung nach sowieso nichts taugt.

Denkt ihr, das Programm wäre schneller wenn ich es in C++ mit dem COM Steuerelement versuche?

Bin gespannt auf eure antworten

MfG
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Preislisten Generator für Excel

  Alt 16. Sep 2013, 02:31
Wer oder wie werden diese Excel-Tabellen erstellt, die du dann bearbeiten musst?

Ich würde versuchen in den Prozess schon früher einzugreifen.

Es gibt auch die Möglichkeit, die Excel-Tabellen als Datenbank (ADODB) anzusprechen.
Evtl. besteht aber die Möglichkeit die Daten schon vorher abzugreifen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Preislisten Generator für Excel

  Alt 16. Sep 2013, 05:24
Erstellt werden diese ganz normal über Excel denke ich. Die Sheets kommen von einer Partnerfirma, ich müsste mal nachfragen. Wàre es ein unterschied ob diese generiert oder von menschenhand erstellt worden sind?

Die Idee mit der ADODB klingt ziemlich gut, danke.
Werde dies heute sofort ausprobieren.

Was ich noch fragen wollte: Wie löst man am besten längere aufgaben?
Soll ich die Liste mit FOR parsen und wieder mit FOR generieren? Bei C# hatte ich das Problem das die anwendung eingefrohren ist bis der vorgang fertig war.(ist doch richtig da for 100% der cpu einnimt oder)
das wiederum brachte das problem das die ProgressBar nicht weiterlief sondern sofort auf 100% ging bei der fertigstellung. Wie kann ich das lösen das das programm nicht einfriert und das ein progressbar funktioniert? Ich dachte an eine sich selbst aufrufende funktion. das ist ja auch ne schleife die endlich sein kann aber wird dies funktionieren? und wie sieht der performance unterschied aus?

MfG
Milos
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: Preislisten Generator für Excel

  Alt 16. Sep 2013, 05:32
Was ich noch fragen wollte: Wie löst man am besten längere aufgaben?
Soll ich die Liste mit FOR parsen und wieder mit FOR generieren? Bei C# hatte ich das Problem das die anwendung eingefrohren ist bis der vorgang fertig war.(ist doch richtig da for 100% der cpu einnimt oder)
das wiederum brachte das problem das die ProgressBar nicht weiterlief sondern sofort auf 100% ging bei der fertigstellung. Wie kann ich das lösen das das programm nicht einfriert und das ein progressbar funktioniert? Ich dachte an eine sich selbst aufrufende funktion. das ist ja auch ne schleife die endlich sein kann aber wird dies funktionieren? und wie sieht der performance unterschied aus?

MfG
Für solche Sachen, packe ich immer ein Application.ProcessMessages in die FOR-Schleife unter Delphi. Damit läuft die Progressbar dann auch weiter und die Anwendung friert nicht ein. Unter C# müsste das Application.DoEvents() sein.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Preislisten Generator für Excel

  Alt 16. Sep 2013, 07:00
Das Problem sind häufig die vielen Punkte beim Aufruf der Excelfunktionen.
Delphi-Quellcode:
// kleines Beispiel
excel.activesheet.cells(1,j+1).EntireColumn.NumberFormat:='@';
Wenn man immer ganz oben beginnt und sich durch die Objekthierarchie von Excel herunterhangelt dann geht unheimlich viel Zeit verloren.
Wenn man's geschickt macht und viele Zellen auf einmal als Variantarray ausliest/schreibt dann kommt man auf Geschwindigkeiten von mehreren Tausend Zellen pro Sekunde.

Ob du C#, C++ oder Delphi verwendest ändert an der Geschwindigkeit gar nichts wenn 1000 Mal mehr Zeit durch obiges Problem verbraten wird.
Am ungeeignetsten ist C++ weil die Ansteuerung von Dispatch-Interfaces ziemlich unschön ist.
C# und Delphi sind da besser geeignet wobei ich Delphi vorziehen würde weil der Resourcenhunger kleiner ist und man kein .NET Framework benötigt.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz