AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Inhalt so in Excel speichern, wie aus Excelfeld ausgelesen

Inhalt so in Excel speichern, wie aus Excelfeld ausgelesen

Ein Thema von zeras · begonnen am 9. Aug 2020 · letzter Beitrag vom 10. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2   
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#1

Inhalt so in Excel speichern, wie aus Excelfeld ausgelesen

  Alt 9. Aug 2020, 10:35
Datenbank: SQLITE • Version: 3.x • Zugriff über: Firedac
Ich habe ein Programm geschrieben, welches Daten aus Excelzellen ausliest und dann in die DB schreibt.
Diese Felder schreibe ich dann wieder eine andere Exceltabelle. Dabei ist der Inhalt aber nicht immer wieder gleich.
Wie kann ich sicherstellen, dass der Einhalt einer Excelzelle in die DB kommt und wenn es wieder ins Excel geschrieben wird, gleich aussieht?
Es hängt offenbar mit der Maskierung zusammen.
Ich habe das schon einmal mit einem BLOB Feld probiert. Aber der Inhalt war dann in der geschriebenen Exceltabelle nicht mehr derselbe.
Muss ich in der DB noch etwas mitgeben?
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras ( 9. Aug 2020 um 11:29 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.950 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 9. Aug 2020, 15:08
Wenn's so aussehen soll, wie es im Original war, musst Du Dir wohl oder übel die Formatierung des Originals merken und die dann nach Übernahme der Daten aus der DB nach Excel dort diese Formatierung wieder anwenden.

Wie man das macht?

Keine Ahnung.

Suchmaschine mal mit sowas in der Art füttern:
excel formatierung auslesen
excel zelle format

Eventuell ist da ja schon was bei: zellenformatierung auslesen, muss halt Richtung Delphi "übersetzt" werden.
Oder beim Hersteller: ZELLE (Funktion)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 9. Aug 2020, 15:41
Danke für die Links.
Es muss nicht genauso aussehen, wie das Original, aber der Inhalt sollte komplett wiedergegeben werden. Ich habe das mal mit TEXT in der DB versucht, dann QuotedStr (was aber himitsu erst kürzlich schrieb, dass das nicht der richtige Weg sei). Aber auch BLOB brachte nicht den gleichen Text, wie er im Original stand. Eigentlich müsste doch BLOB genau das richtige sein, aber ???
Oder muss ich beim Erstellen der DB irgendwas mit ISO eingeben?
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.950 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 9. Aug 2020, 16:25
Was bitteschön speicherst Du denn in dem Blob?

Einen Wert?
Den gesamten Inhalt einer Exceltabelle?

Eine Spalte in 'ner Tabelle, egal ob Integer, VarChar, Blob, ... ist dazu da, einen Wert zu speichern. Dieser Wert könnte bei einem Binärblob z. B. auch eine vollständige Exceldatei sein.

Aber aller Werte einer Exceltabelle "irgendwie" auszulesen und dann "irgendwie" in 'nem Blob zu speichern und das dann "irgendwie" wieder in Excel auszugeben, so dass es dann wieder "irgendwie" so oder so ähnlich, wie in Excel, aussieht, erscheint mir eher ein arg ungeeigneter Weg.

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.

Wie soll man die Lösung zu einem nicht näher definierten Problem finden?
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 9. Aug 2020, 16:43
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.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.978 Beiträge
 
Delphi 2010 Enterprise
 
#6

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

  Alt 9. Aug 2020, 17:17
Du müsstest Dich schon festlegen, ob es um gleiche Werte oder um gleiches Aussehen geht oder auch beides geht. Außerdem müsstest Du Dich damit auseinandersetzen, welche Automatiken greifen, wenn man Daten in Excel eingibt.

Es gibt einen Wert und es gibt eine Formatierung des Wertes, sehr anschaulich z.B. bei der Zahlendarstellung und der Formatierung auf 2 Nachkommastellen oder Tausendertrennzeichen. Noch schöner ist das bei Datumsangaben.
Unabhängig davon hat Excel die nette Eigenschaft, schlauer zu sein, als einem lieb ist und rät, was Du eigentlich eingeben wolltest. Diese Automatiken muss man kennen und ihre Anwendung aussetzen.
Gruß, Jo
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 9. Aug 2020, 17:25
Speziell geht es um Texte. Ich lese zwar auch das Datum aus, aber das habe ich schon hinbekomme.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Delphi.Narium

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

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

  Alt 9. Aug 2020, 17: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
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.505 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 9. Aug 2020, 18:23
Beispiel:
Aus jeder Exceltabelle wird Zelle A5 ausgelesen und in die DB geschrieben -> Datentyp TEXT. Das passiert 5000 Mal, also 5000 Datensätze.
Am Ende steppe ich durch die Datensätze und lese diesen Wert wieder aus und schreibe ihn in eine neue Exceltabelle, Zeile für Zeile. Also eine neue Exceltabelle mit 5000 Zeilen.
Nun sehe ich, dass der Wert, der aus Zelle A5 gelesen wurde, nicht mit dem Inhalt der Zelle ist, die in der neuen Tabelle steht.
Es geht meistens um Umlaute etc.
Das gleiche hatte ich mit dem Datentyp BLOB versucht.
Ich versuche noch einmal ein Beispiel zu erzeugen.
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.978 Beiträge
 
Delphi 2010 Enterprise
 
#10

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

  Alt 9. Aug 2020, 21:15
Gut, eine Hürde bei der Klärung des Sachverhalts wäre fast umschifft, es ergeben sich Hinweise auf konkrete Fehler. Unter den fehlerhaften "Darstellungen" befinden sich Umlaute!

Daraus ergeben sich ein paar Fragen:
- wie kommen die Originaldaten in die Excelsheets
- welche Version wird verwendet
- welches Dateiformat wird verwendet
- usw.

Es könnte sein, dass es ein Codierungsproblem ist, das ohne den Zwischenschritt auf SQLite bis jetzt verdeckt blieb.

Natürlich ergeben sich noch mehr Fragen, z.B. nach verwendetem Programmcode, nach weiteren, fehlerhaften Zeichen, nach Betriebssystem, Ländereinstellungen, ..
aber man ist ja bescheiden.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf