Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.433 Beiträge
 
Delphi 7 Professional
 
#8

AW: Inhalt so in Excel speichern, wie aus Excelfeld ausgelesen

  Alt 9. Aug 2020, 16:42
Ich hatte dazu schon einen Thread aufgemacht siehe hier.
Wir haben etliche tausende Exceltabellen mit gleichem Aufbau.
Aus diesen lese ich einige Zellen aus und schreibe diese in eine DB (jede Exceltabelle ein Datensatz). Anschließend möchte ich diese Daten in eine Übersichtsabelle schreiben. Dazu nehme ich jeden Datensatz und schreibe dies in jeweils eine Zeile der Übersichtstabelle.
Hier kommt es dann vor, dass der Inhalt einer Zelle aus einer Quellexceltabelle nicht mit dem Inhalt einer Zelle der Übersichtstabelle übereinstimmt.
Wie schon geschrieben, das Format der jeweiligen Zelle ist nicht so wichtig, nur der Inhalt.
Jetzt weiß ich genausoviel wie vorher.

Wie ist ein Datensatz definiert?

Eine Zelle aus einer Exceltabelle = eine Spalte im zugehörigen Datensatz einer Datenbanktabelle?
Oder ein Datensatz = ein Blob mit allem aus der Exceltabelle?
Oder irgendeine beliebige Kombination daraus?

Bisher weiß ich nur:

Du hast viele tausend Exceltabellen.
Zu jeder Exceltabelle gehört ein Datensatz in 'ner Datenbanktabelle.
Es gibt also genausoviele tausend Datensätze, wie es Exceltabellen gibt.

Was ich nicht weiß ist: Wie sind die Zellen der Exceltabellen in dem zugehörigen Datensatz der Datenbanktabelle wiederzufinden.

Wenn hiermit
Zitat:
Hier kommt es dann vor, dass der Inhalt einer Zelle aus einer Quellexceltabelle nicht mit dem Inhalt einer Zelle der Übersichtstabelle übereinstimmt.
gemeint ist, dass z. B. in der Exceltabelle 47 steht, im Datensatz 48 und anschließend in der Übersichtstabelle 49, solltest Du sowohl die Routinen zum Lesen der Exceltabelle, die zum Schreiben des Datensatzes, die zum Lesen des Datensatzes und die zum Schreiben in die Übersichtstabelle überprüfen.

Wenn man in Excel einen Wert liest, dann in der Datenbank was anderes steht, ist entweder in der Leseroutine ein Fehler oder in der Routine zum Schreiben das Datensatzes. (Wobei diese beiden Routinen im Quelltext durchaus wie eine aussehen können, jenachdem wie sehr man die Aufgaben in eigene Routinen kapselt.)

Dies gilt natürlich auch für das Lesen eines Datensatzes und die Ausgabe seiner Inhalte in die Übersichtsabelle.

Ohne den Quellcode dürfte es kaum möglich sein, hier auch nur annähernd in die mehr oder weniger weit entfernte Nähe der Fehlerursache zu gelangen.
Wenn Du also viele tausend Exceltabellen hast und aus jeder dieser Exceltabellen jeweils eine Anzahl von 10 Werten ausliest, so enthält der zugehörige Datensatz 10 Spalten, für jeden Wert eine. Diese 10 Spalten werden dann in die Übersichtstabelle ausgegeben.

Sind es mehr oder weniger als 10 Werte, musst Du halt die Tabellenstruktur entsprechend anpassen. Ist die Zahl der Werte je Tabelle unterschiedlich, da vom Inhalt abhängig, musst Du Dir eine Tabellenstruktur überlegen, mit der Du das abbilden kannst.
Handelt es sich bei den vielen tausend Exceltabellen um Tabellen, die in mehrere Kategorien einteilbar sind, z. B. Tabellen für Autos, Tabellen für Häuser, Tabellen für Bücher, ... so könnte es hilfreich sein, für jeden dieser Tabellentypen eine eigene Datenbanktabelle anzulegen, die diesem Tabellentyp entspricht.
Bei Allem darfst Du nicht vergessen, dass jeder Datensatz eindeutig einer Exceltabelle zuzuordnen sein muss, damit nicht eventuell beim Schreiben in die Übersichtstabelle ein anderer Satz der Datenbanktabelle geschrieben wird, als der, der aus der Exceltabelle ursprünglich entstanden ist.
Auch hier könnte eine mögliche Ursache für das von Dir beschriebene Problem zu suchen sein.

Erschwerend kommen hier die von jobo beschriebenen Excelselbstdenkratewirdschonirgendwiehinhauenodera uchnichtautomatismen von Excel hinzu.

Speziell geht es um Texte. Ich lese zwar auch das Datum aus, aber das habe ich schon hinbekomme.
Was für Texte? Eine Zelle = ein Wort ... eine Zelle = ein Roman. Je Exceltabelle 42 Romane?

Daher bleibe ich dabei:
Zitat:
Eventuell solltest Du mal (losgelöst von Delphi, losgelöst von irgendeiner Datenbank) beschreiben, was Du eigentlich vorhast. Ohne die Kenntnis der zugrundeliegenden Aufgabenstellung, scheint es mir nicht möglich Dir hier irgendwelche (wenn auch nur annähernd) zielführende Lösungsmöglichkeiten aufzuzeigen.
Die bisherigen Informationen reichen schlicht und einfach nicht aus, um eine zielführende Hilfestellung geben zu können.

Im Zweifelsfalle: Screenshots, Beispieldatei(en), ... anhängen.

Beschreibung dazu: Aus anhängender Beispieldatei lese ich die Werte von Zelle A1 bis B5 aus, oder eine Liste der auszulesenden Zellen, oder: Die auszulesenden Zellen wurden in anliegender Exceltabelle rot umrandet, oder, oder ...
Dazu noch das Createstatment für Deine Datenbanktabelle und 'ne Beschreibung, was aus der Exceltabelle wo in die Datenbanktabelle kommt.

Alles was ich bisher schrieb, hat mir meine verraten und die ist momentan (witterungsbedingt) ziemlich trübe.
Frei nach dem Motto: Ähnlichkeiten mit dem realen Leben und der konkret bestehenden Problemsituation sind rein zufällig und weitgehend unbeabsichtigt (oder so ähnlich).
  Mit Zitat antworten Zitat