C/C++-Programm oder VBA-Makro ?



  • Hallo zusammen,

    im Beruf werde ich täglich mit Aufgaben rund um Excel konfrontiert, die ich gerne automatisieren würde. Dabei handelt es sich um:

    • Vergleich von Datensätzen in Excel-Tabellen
    • Vereinfachung von Datensätzen aus unterschiedlichen Tabellen: d.h. aus drei Bestellungen (Tabellen) sollen die gleichen Produkte nur einmalig mit der Gesamtanzahl dargestellt werden.
    • Auswertung der Datensätzen (Bestellstatistiken, Berechnungen, Übersichten, Geschäftsberichte)
    • Berechnung von Preisen, Erstellungen von Stücklisten und Abrechnungen,...

    Auf Grundlage einer einheitlichen Datenbasis sollen also verschiedene Funktionen implementiert werden. Quelle der Datenbasis sind in 95% Exceltabellen. Nachdem die Daten "verknüpft" wurden, soll zumindest die Funktion eines Excel/Access-Export möglich sein, falls die Darstellung "im Programm" nicht ausreicht.

    Mit dieser Motivation hatte ich mich länger mit VBA auseinandergesetzt. In diesem Zuge habe ich dann aber ein anderes "Excel-Programm" kennen gelernt, dass nicht mehr als 10 Worksheets hat, aber dessen Performance teilweise sehr zu wünschen übrig lässt. Daher bin ich sehr skeptisch geworden und mir kam die Idee, dass ich meine Datensätze in ein C/C++-Programm einlesen könnte. Hier könnte ich die "Verknüpfungen" und Darstellung implementieren. Im Anschluss steht die Möglichkeit die Daten wieder zu exportieren.

    Vorteil: schnellere Performance, (relativ) unabhängige Plattform, weniger Abhängigkeiten, die Möglichkeit das Programm deutlich zu erweitern, Möglichkeit das Tool als Unterstützung auch anderen Kollegen zur Verfügung zu stellen (keine gemeinsame Datennutzung)

    Nachteil: längere Programmierzeit, evtl. nicht den gewünschten Mehrwert; aufwändiges Im- und Exportieren von Dateien,

    Nun meine Frage an euch: habt ihr schon mit Ähnlichem zu tun gehabt? Seht ihr den Mehrwert? Macht für euch ein Programm in C/C++ statt Makroprogrammierung in VBA Sinn?

    Wie würdet ihr in einem C/C++-Programm Datensätze langfristig speichern? In welchem Format?

    Vielen Dank für Eure Unterstützung!

    Nico



  • Es gibt kein C/C++. Es gibt die zwei Sprachen C und C++.

    Für mich hört es sich so an, als würde hier Excel mal wieder als Datenbank missbraucht. Da du Access erwähnst: vielleicht könntest du die Daten besser in Access importieren und dort mit SQL verarbeiten.



  • Ich würde sagen, weder noch.
    Ich mache sowas in Python:

    • Der Zugriff auf die MSOffice Daten ist in den mir bekannten Fällen (einfache Excel Tabellen, DB(auch Access)) problemlos
    • Es gibt gute und ausgereifte Tools zur Datenbearbeitung und Visualisierung
    • Die Performance sollte ausreichen (kommt drauf an, was du genau machst).

    Nachteil ist, dass du nicht einfach eine exe bekommst, die du an die Kollegen weitergeben kannst.



  • Für mich klingt das auch sehr nach einer Datenbankanwendung.

    Ich persönlich mache einen großen Bogen um VBA, zu wenig Erfahrung, zu viel gefrickel und auch sonst finde ich VBA nicht schön.
    Wenn c++ zu Aufwendig ist und ein Datenbank System aus irgendeinem Grund nicht in Frage kommt, vlt. eine andere Skriptsprache wie Python?



  • Dieser Beitrag wurde gelöscht!

  • Mod

    @Swordfish
    Hör bitte auf, überall mit Offtopic-Witzen zu stören, so lange in den Threads noch ernsthafte Diskussionen laufen!



  • @manni66 vielen Dank für deine Antwort.

    Hast du Erfahrungen mit Access?



  • @Mittagspause vielen Dank für den interessanten Input.

    Bei Python braucht man aber eine Runtime, oder? Würde bedeuten, dass ich mehr Abhängigkeiten hätte, oder?

    Ist denn die Performance dauerhaft stabil? Der Zugriff auf einzelne Zellen dauert ja bei Excel besonders lang.



  • @Schlangenmensch :

    vielen Dank für deine Rückmeldung. Vermutlich ist es tatsächlich eine Art Datenbankanwendung, nur möchte ich keine externen Datenbanken im Hintergrund laufen haben, sondern alles kompakt für maximale Flexibilität.

    Inzwischen bin ich genauso skeptisch was VBA angeht. Für kleine Vergleiche sehr praktisch, für größere Konstruktionen wohl weniger geeignet.

    C++ ist nicht zu aufwendig. Ich habe nur Angst, da Zeit zu investieren und am Ende scheitert es an Excel-Importe/Exporte oder anderen, mir jetzt noch nicht bekannten, Gründen.

    Würdest du dann C++ nehmen?



  • C++ aufwendig. Wenn du was anderes behauptest, kannst du kein C++ 😉
    Ich persönlich würde es z.B. in der Arbeit mit hoher Wahrscheinlichkeit nehmen, weil ich in dem Umfeld arbeite, und es für mich kein Problem wäre, schnell ein neues Projekt aufzusetzen, und ich könnte vermutlich auch auf alle möglichen Bibliotheken zugreifen, die wir eh schon verwenden. Und weil ich seit Jahren fast nur mit C++ zu tun hab und mich in alle anderen Sprachen erst reindenken müsste.
    Für alle anderen ist es vermutlich nicht das Mittel der Wahl und die würden mit anderen Mitteln schneller ans Ziel kommen.



  • Statt Python könntest du auch C# nehmen (hat zwar auch die .NET Runtime, aber diese ist ja auf den Windows-Rechnern vorinstalliert).

    Es gibt dort dann verschiedene Möglichkeiten zum Bearbeiten von Office bzw. Excel-Dateien: Optimal way to Read an Excel file (.xls/.xlsx).

    Am elegantesten ist wohl die Verwendung von NPOI (für XLS) oder EPPlus (für XLSX).
    Aber auch direkter Zugriff per COM (wenn Excel installiert ist) ist möglich: Read Excel File in C# (dieser Weg ginge natürlich auch direkt von C++ aus).



  • Ja, ne, was ich mit meinem inzwischenm gelöschtem Beitrag sagen wollte ist, daß C oder C++ die Beschissensteeidenste Wahl für soetwas ist. Nimm bitte irgendeine Scriptsprache.



  • @capetown-nico sagte in C/C++-Programm oder VBA-Makro ?:

    @manni66 vielen Dank für deine Antwort.

    Hast du Erfahrungen mit Access?

    Ja, mit 2.0 und 95. Hab mal eine Minibuchhaltung damit geschrieben. Wird heute hoffentlich nicht schlechter sein.



  • @capetown-nico sagte in C/C++-Programm oder VBA-Makro ?:

    Würdest du dann C++ nehmen?

    Das kommt stark drauf an. Wenn die Idee ist, dass das später soweit erweitert wird, dass Kollegen das selbstständig nutzen können sollen, dann vlt schon. Aber dann wird das auch schnell zu einem größeren Projekt.

    Wenn es "nur" um Auswertungen geht, die ich hinter verteile, würde ich Python nehmen.
    Abhängigkeiten hast du bei C++ auch. Wahrscheinlich nimmst du eine Bibliothek für die Excel Anbindung, dann die üblichen Windows Abhängigkeiten und so weiter.



  • @capetown-nico sagte in C/C++-Programm oder VBA-Makro ?:

    Bei Python braucht man aber eine Runtime, oder? Würde bedeuten, dass ich mehr Abhängigkeiten hätte, oder?

    Abhängigkeiten wirst Du immer haben, wenn Du auf Office Dateien zugreifen willst. Ausser Du schreibst dir selbst einen xlsx-Parser..

    Du brauchst eine Python Umgebung, und auch die notwendigen Bibliotheken, auf jedem Rechner. Das ist nicht kompliziert, aber wenn das Programm auf mehreren Rechnern laufen soll schon ein Aufwand.

    Es gibt auch Wege, sowas wie eine Exe zu bauen, aber damit kenn ich mich nicht aus.

    Und Plattformunabhängig wäre das mit Python eigentlich schon (falls es die Bibliotheken für den Excel zugriff auch unter Linux gibt).

    Ist denn die Performance dauerhaft stabil? Der Zugriff auf einzelne Zellen dauert ja bei Excel besonders lang.

    Was meinst Du mit dauerhaft stabil? Die Performance hängt davon ab, wieviel Arbeit Du in Bibliotheken wie NumPy auslagern kannst. Also von deiner genauen Aufgabenstellung. Wenn du sowas wie Regressionen oder Matrixmultiplikationen machst, bist Du mit Python und NumPy sicher nicht viel lansamer als mit c.
    In meiner Anwendung (das war ursprünglich ein VBA Script mit Excel Sheets mit einigen 100000 Zellen, ohne die Möglichkeit, Arbeit an NumPy o.ä. auszulagern) ist die Performance eine Größenordnung besser als mit VBA.

    @Th69 sagte in C/C++-Programm oder VBA-Makro ?:

    Statt Python könntest du auch C# nehmen (hat zwar auch die .NET Runtime, aber diese ist ja auf den Windows-Rechnern vorinstalliert).

    Ja, das halte ich auch für eine gute Möglichkeit (auch wenn ich c# nicht mag und kaum kann).


Anmelden zum Antworten