Hallöchen,
folgendes Problem:
Im Excel sind die Spalten normalerweiße auf 256 gegrenzt.
Mit einem Shape - Spreadsheet lässt sich die Spaltenzahl auf 26*26*26 erweitern.
In der Regel ist es möglich von Access aus, eine Exceltabelle mit Daten zu füllen.
Das klappt auch ohne Probleme.
Doch wie kann ich von Access aus, das Spreedsheet im Excel mit Daten füllen?
Habe schon über all gesucht und einiges ausprobiert.
Doch konnte ich das Spreadsheet im Access über VBA nicht ansprechen.
Das einzige was ging, ich konnte es ein- und ausblenden. Doch das hilft mir nicht weiter.
Weiß jemand eine Lösung?
Die mehr als 256 Spalten werden zwingend benötigt, also ist Aufteilung auf mehrere Tabellen keine Option. Aus dem Grund das ein Datensatz bis zu 800 Felder haben kann und es um die 8000 Datensätze sein können.
Vielen Dank für Anregungen und Vorschläge.
Viele Grüße Amsé
Hallo,
ZitatDie mehr als 256 Spalten werden zwingend benötigt, also ist Aufteilung auf mehrere Tabellen keine Option. Aus dem Grund das ein Datensatz bis zu 800 Felder haben kann
Da möchte ich dann doch die Struktur der DB (das Datenmodell bezweifeln), 800 Felder, das scheint mir von Normalisierung weit entfernt zu sein.
Warum sind das 800 Felder?
Es lässt sich nicht vermeiden, denn das Array in dem die Daten stehen, lässt sich nicht verkleinern.
Wie in einer Biliothek, dort kann es zB 800 Bücher gebene, die den Buchstaben A im Titel haben.
Nur das in meinem Fall es 8000 Kriterien vom Typ A gibt.
Oder man könnte es auch so beschreiben:
Man hat ein Bild mit 5 Milionen Pixeln.
Eine Funktion ermittelt die Koordinaten der Pixel mit gleichem RGB - Wert.
Ziel ist es in einer Tabelle, hinter dem RGB-Wert, die ganzen dazugehörigen Koordinaten in einer Zeile aufzulisten.
Hallo,
oder könntest Du vielleicht authentisch beschreiben, um was es wirklich geht?
Das mit dem Bild trifft es ganz gut.
Soll als Student im Semsterferien etwas programmieren und das unterliegt einer Sperrklausel.
Da kann ich es nur grob umschreiben, sonst gibt es heftig Ärger.
Zum Problem:
Die einzige Alternative die ich sehe, das ich das Arrey immer nach 256 Spalten in eine neue Tabelle exportiere und es dann im Excel über VBA wieder zusammenfüge. Um es dann im Spreadsheet anzuzeigen.
Hallo,
wenn ich im Zusammenhang mit einer DB Array lese klingeln sowieso alle Alarmglocken. In einer DB braucht man kein Array.
Und 800 Parameter in einer Zeile halte ich für grob falsch. Wenn das wirklich 800 Parameter sind, wird eine Tabelle gebraucht für die Parameter, ein Parameter je Datensatz = 800 DS.
Mit einer Zwischentabelle als n:m Beziehung ergibt sich dann eine Tabelle mit 4 (in Worten: Vier) Feldern, dem Primärschlüssel, der ParameterID, der HauptID und dem Wert.
Bei 8000 DS ergibt sich dann in der Zwischentabelle 6,4 Mio Datensätze. Ja, damit kann Access besser umgehen wie mit 800 Feldern.
Wie Du das nach Excel bekommst ist eine andere Frage, mit 3 Kreuztabellenabfragen könnte das gehen.
Aber hier ist auch die Frage erlaubt, warum überhaupt nach Excel, was gibt es in Excel das Access nicht kann?
Dann war der Ausruck Array von mir falsch gewählt. Entschuldigt bitte.
Es werden Datensätze ermittelt, die in der Regel nicht länger als 256 Zellen waren.
Wenn war das meist nur einmal der Fall und dann wurde was zu lang war, in einer neuen Tabelle senkrecht in eine Spalte eingetragen.
Doch das funktionierte auch nur bei einem langem Datensatz und war sehr unübersichtlich.
Da durch eine Veränderung des Versuchsaufbaus, nun aber mehrere solcher langen Verbindungen auftreten können.
Ist eine andere Lösung nötig.
Spreadsheet verfügt praktischerweise über ZZZ also 26^3 Spalten, also ausreichend Platz.
Nur lässt sich das nicht direkt vom Access aus mit Datenfüllen.
ZU Ui
Und warum ausgrechnet Excel, weil das Dokument auf jeden PC weiterverwendbar sein soll. Und das gewährleistet Access nicht. Eine Exceldatei kann jeder lesen und bearbeiten.
Es funktioniert, das ich die Daten in Blöcken aufgeteilt in einzelne Tabellen speichere und diese dann zusammenfüge:
Spreadsheet1.Range("A1:IV17650").Value = Tabelle1.Range("A1:IV17650").Value
Spreadsheet1.Range("IW1:SR17650").Value = Tabelle2.Range("A1:IV17650").Value
Spreadsheet1.Range("SS1:VF17650").Value = Tabelle3.Range("A1:IV17650").Value
Spreadsheet1.Range("VG1:AFB17650").Value = Tabelle4.Range("A1:IV17650").Value
Nur ist das keine elegante Lösung und überlastet den Speicher.
Anderseitz, wie könnte ich den gerade gesendeten Code so modifizieren,
dass nur die Zellen kopiert werden - in denen auch etwas steht?
Mit der Methode CopyFromRecordset kann man Datenblöcke aus Access auch nebeneinander in ein Excelsheet kopieren. Man bräuchte allerdings einen Plan, damit das auch aufgeht.
ZitatNur ist das keine elegante Lösung
Apropos elegant: 800 Felder nebeneinander - wer kann sich das ansehen? Ständiges Hin- und Herscrollen ist extrem bedienerunfreundlich und alles andere als elegant. Oder hat jeder auch einen Bildschirm, der rund um die vier Wände geht?
MfGA
ebs
Das blockweise übertragen der Daten in mehrere Excel Tabellenblätter funktioniert.
Genauso wie diese dann über VBA in einem Spreadsheet zu vereinigen.
Wäre zwar schön gewesen, sich den zwischen Schritt sparen zu können,
doch scheinbar kann ich vom Access aus, kein Streadsheet ("OWC11.Spreadsheet.11";"") mit Daten füllen.
Somit entseht folgende Handlung:
Access:
1. Tabelle mit Spreadsheet kopieren
2. Einzelne Tabellenblätter mit den gespliteten Daten füllen
3. Das den Excel VBA-Code ausführen zum vereinigen der Tabllen im Spreadsheet
(Kann man VBA-Code im Excel, vom Access aus starten?)
4. Einzelne Tabellen löschen
5.Excell speichern und beenden.
Es ist ales Protokoll gedacht, deswegen spielt es keine Rolle, das es für einen Monitor unpassend ist.
Denn die Auswertung der Daten erfolgt im Access mit einem Formular.
Mit Freundlichen Gruß
Amsé