[Gelöst]Excel Import

27. September 2010 12:38

Hallo ich habe eine Excel Datei, die möchte ich jetzt gerne Importieren.
Ich weiß das es mit diesen beiden funktionsaufrufen funktioniert.
Code:
ExcelBuffer.OpenBook('C:\Belegdruck\test2.xls', 'Artikelsta.');
ExcelBuffer.ReadSheet;


Das problem ist aber, das die Zeilen die ich Importieren möchte viel zu lang sind. Ich muss Sie also aufteilen.

Also z.B. Wenn das zeichen kommt "/" dann muss ich eine neue Zeile generieren.

Habt ihr vielleicht dafür ne lösung.
Zuletzt geändert von 3ug3n am 30. September 2010 10:20, insgesamt 1-mal geändert.

Re: Excel Import

27. September 2010 13:08

3ug3n hat geschrieben:Hallo ich habe eine Excel Datei, die möchte ich jetzt gerne Importieren.
Ich weiß das es mit diesen beiden funktionsaufrufen funktioniert.
Code:
ExcelBuffer.OpenBook('C:\Belegdruck\test2.xls', 'Artikelsta.');
ExcelBuffer.ReadSheet;


Das problem ist aber, das die Zeilen die ich Importieren möchte viel zu lang sind. Ich muss Sie also aufteilen.

Also z.B. Wenn das zeichen kommt "/" dann muss ich eine neue Zeile generieren.

Habt ihr vielleicht dafür ne lösung.


Ist es möglich den Text in ein Text-Array zu speichern? Also wenn "/" kommt, dann würde ich per Code anweisen, dass die nächste leere Zelle im Array zum Speichern verwendet wird.

Re: Excel Import

27. September 2010 14:18

Ich weiß ja nichtmal wie ich zeilenweise einen string auslesen kann.........

Re: Excel Import

27. September 2010 14:22

Wieso eigentlich Excel und nicht einfach CSV?

Re: Excel Import

27. September 2010 14:23

Und wie würde das gehen?
Sry Imports habe ich noch nie gemacht

Re: Excel Import

27. September 2010 14:51

Du nimmst dein Excel-Sheet und speicherst es im CSV-Format ab. Danach bastelst du dir einen Dataport welcher über die Dataport Fields die Werte einliest.

Re: Excel Import

27. September 2010 15:16

3ug3n hat geschrieben:Und wie würde das gehen?
Sry Imports habe ich noch nie gemacht



viewtopic.php?f=36&t=9945

Wichtig beim Speichern:
CSV MS-DOS,
Danach umstellen in Region und Spracheinstellungen von Windows => Trennzeichen |,
in den Dataports als Trennzeichen | ohne < > und als Feld-Delimiter Start " bzw End " benutzen (also Gänsefüßchen ohne Leerzeichen drumrum)

Re: Excel Import

27. September 2010 17:46

Ich muss das in Excel machen anders geht es nicht.
Gibt es programme mit den ich speziale formatierungen machen kann an Texten. Zb alles in eine zeiler schieben. Oder an ende einer zeile ein zeichen einfügen.

Re: Excel Import

27. September 2010 19:32

3ug3n hat geschrieben:Ich muss das in Excel machen anders geht es nicht.
Gibt es programme mit den ich speziale formatierungen machen kann an Texten. Zb alles in eine zeiler schieben. Oder an ende einer zeile ein zeichen einfügen.


Du kannst das in Excel machen, d.h. die Daten aufbereiten. Beim Speichern konvertierst du nur die aufbereiteten Daten in ein Dataport freundlicheres Format.
Weil NAV kann bei nem Textfeld max. 250 Länge, da kannst du mit Excel sonstwas formatieren, max. 250 Zeichen werden reingehen.
Ich würd dir raten, nach guten VBA + Excel Tutorien im Inet zu googeln und die Zeichenlänge mithilfe von VBA zu stützen. Dann das ganze als CSV-MS-DOS speichern und auf gehts durch den Dataport Import :)

Re: Excel Import

28. September 2010 09:04

ICh bin weiter gekommen nur ich kriege jtzt diese Fehlermeldung: "DIe Länge des Textstrings überschreitet die Größte des Zeichpuffers".....ich hab schon gegoogelt komme aber net weiter

Re: Excel Import

28. September 2010 09:14

Was du brauchst ist die Funktion:

Code:
NewString := COPYSTR(String, Position [, Length])


und ggf. die Funktion:

Code:
Position := STRPOS(String, SubString)


zum suchen des Zeilenumbruchs.

Re: Excel Import

28. September 2010 09:20

Ich verstehe dich ja bisher so, dass du den Import auf Grund des Formats der Datei nicht mit Dataports realisieren kannst.

Bei Konvertierungen von verschiedenen Formaten für automatisiere Importe verwenden wir jedenfalls auch hier und da noch die guten alten Batch-Dateien. :wink:

Batch-Dateien sind zwar Old-School aber IMO einfach zu ändern, flexibel anzupassen, recht stabil und einfach in Schedulern zeitgesteuert ausführbar.

Für die meisten Programmierer klingt das aber so wie Volksmusik für einen Heavy Metal Fan. 8-)

Für zeilenweise Änderungen von Quelldateien eignet sich LMOD ganz gut.
Damit kann man eine Quelldatei nach bestimmten Regeln zerlegen und schnell für seine eigenen Bedürfnsse aufbereiten.

type Import.cvs | LMOD /S; /L* [$1];280910;[$5];1;[$4]0;[$2];D[2,4 $1] > ImportNeu.cvs


In dem Beispiel würde das bedeuten:
vorher (Import.cvs) :
1;2;3;4;5;60000

nachher (ImportNeu.cvs):
1;280910;5;1;40;2;D0000

S; gibt den Seperator ; an
L* bedeutet er soll jede Line in der CSV durchgehen.
L1 würde bedeuten das die Regel nur in der ersten Zeile Anwendung finden soll.

Du kannst damit auch mit [+] einen automatischen Zeilenumbruch erzeugen.

Options:
/Ln[-m] line [range] to select (default: first non blank line)
/L[n]* all lines [starting n]
/E include empty input lines (default: no output)
/S.. delimiters for word extraction, instead of default (,;=)
/B.. as /S, but excluding blank space as delimiter
/Nn starting number (for token [#]), default: /N001

Insert from source line (expression in square brackets):
[p,l $n U|L Rn] default []: complete line
p,l from position p, length l (default rest of line)
$n word number n (! for last word), optional offset
$n:m for range n thru m
U|L convert to upper|lower case
Rn right aligned in output field of size n

Other tokens:
[+] insert CR+LF
[-] omit CR+LF at end of output
[#] line number (digits acc. to option, default:3)
[=n] tab to position n in output line
[~n] ASCII code n (decimal)
[".."] quoted char/string (e.g. for redirection symbols)


Horst Schaeffer's DOS Pages: http://home.mnet-online.de/horst.muc/divd.htm

mfg,
winfy

Re: Excel Import

28. September 2010 11:19

Horst Schaeffers Software kann ich nur empfehlen :)

Was ich wissen möchte: Warum soll CSV keine Möglichkeit sein? Man kann doch ganz einfach aus Excel eine CSV-Datei generieren. Ich glaube kaum, dass du in deinem Import Informationen brauchst, ob die Zelle fett oder kursiv dargestellt wird, oder?

Re: Excel Import

28. September 2010 11:37

Also danke für die anworten :)
Ich habe den Import geschaft :). Ich habe einfach mit einem Txt Editor immer Zeilenumbruche gemacht, mit suchen und ersetzen. Und habs dann einfach ins NAv gelsen.
Aber da ist noch ein problem.^^

Wie kann man eine Zeile mit mehrern zeilen verknüften.

Beispiel Früher sah die Excel datei so aus
Code:
Artikel Nr    Beschreibung
124157       asdasdas asdasdas gasdas (Mehr als 250 zeichen)

Jetzt sieht SIe so Aus

Code:
Beschreibung
asdasdas                 
asdasdas       
gasdas       


Wie kann ich die beiden jetzt vernüpfen.....damit Sie so aussieht. Das problem ist die Texte fangen immer unterschiedliche an und enden auch unterschiedlich...
Ich kann also net abfragen wann eine andere beschreibung kommt.

Code:
Artikel Nr                  Beschreibung
12121                       asdasdas   
12121                       asdasdas
12121                        gasdas 

Re: Excel Import

28. September 2010 11:59

3ug3n hat geschrieben:Also danke für die anworten :)
Ich habe den Import geschaft :). Ich habe einfach mit einem Txt Editor immer Zeilenumbruche gemacht, mit suchen und ersetzen. Und habs dann einfach ins NAv gelsen.
Aber da ist noch ein problem.^^

Wie kann man eine Zeile mit mehrern zeilen verknüften.

Beispiel Früher sah die Excel datei so aus
Code:
Artikel Nr    Beschreibung
124157       asdasdas asdasdas gasdas (Mehr als 250 zeichen)

Jetzt sieht SIe so Aus

Code:
Beschreibung
asdasdas                 
asdasdas       
gasdas       


Wie kann ich die beiden jetzt vernüpfen.....damit Sie so aussieht. Das problem ist die Texte fangen immer unterschiedliche an und enden auch unterschiedlich...
Ich kann also net abfragen wann eine andere beschreibung kommt.

Code:
Artikel Nr                  Beschreibung
12121                       asdasdas   
12121                       asdasdas
12121                        gasdas 


Also fassen wir mal zusammen:

Description + Description 2 in der Tabelle Item sind theoretisch max. 250 Zeichen lang.
D.h. du versuchst eigentlich deine mehrzeiligen Bemerkungen in die Tabelle Comment Line reinzukloppen.

Ich hätte es so gemacht: Excel Tabelle aufbereitet, in MS-DOS CSV gespeichert, DataPort Import laufen lassen in eine neu erstellte Tabelle id >= 50.000 mit "Line No.", "Item No." und Description als Felder.
Die hätte so ausgeschaut:

Line No. Item No. Description
10000 4711 Erste Bem. Zeile
20000 4711 Zweite Bem. Zeile
....
90000 4712 Erste Bem. Zeile

Dann hätte ich auf T97 in RESET, SETCURRENTKEY, SETRANGE, INIT und INSERT gemacht in Verbindung mit REPEAT UNTIL auf deiner T50.000.

Du hast anscheinend eine andere Denkweise. Mir ist schleierhaft, was du eigentlich zu erreichen versuchst?
Ein Befehl um eine neue Zeile zu machen nachm Motto wenn ein String 4711 in der ersten Bemerkung (Feld Description) auftaucht, dann fange einen neuen Datensatz an, gibt es NICHT. Du wirst das ganze per Algorithmus händisch aufdröseln müssen.

Falls dir der Schritt Excel -> Speicherung MS-DOS CSV zu manuell erscheint, VBA bietet die Möglichkeit automatisiert abzuspeichern. D.h. wenn dir der Fachbereich ständig XLS-Sheets rübermailt, kannst du deren Konvertierung schon automatisieren und mußt nicht jedes mal das Sheet aufmachen und Speichern unter CSV MS-DOS auswählen.

Re: Excel Import

28. September 2010 12:18

Also nochmal
Ich habe ein Ecxel Datei dort ist die Artikel Nummer und die Beschreibung drin.
Die Beschreibung ist übelst lang. Aber alles in einer Zeile.
Code:
A12151    HALLO ASJDAKSMDKASMDKMASKDMAKSMMAKMA
A1251     HAJNSDKLASMDKMASKLDMASMASD

Nav kann ja aber nur 250zeichen.
Ich habe jetzt folgendes gemacht. Die beschreibung so formatiert. Das es pro Artikel nicht einmal drin steht sondern mehrs mals also damit es in das beschreibungsfeld reinpasst.
Code:
Beschreibung
HALLO
ASDASH
ADSJDH
AJADHS


Jetzt habe ich zwei Excel datein.
In einer ist nur die Artikel Nr. In der anderen die Beschreibung.
Da die Beschreibung aber jetzt über mehrer Zeilen geht kann ich ja nicht einfach alles zusammen kopieren um den zusammenhang wieder zu erstellen.
Diese würde ja jetzt sousehen
Code:
Artikel NR    Beschreibung
A12121        HALLO     //
A44181        ASDAS     //gehören alle zu dem Artikel A12121
A12151        AASDA   //   



Vielleicht gibt es ja auch einen anderen Weg...aber immen finde ich keinen...

Die datei hat mehr als 50000 zeilen mann kann nicht mal eben die Leeren Felder mit der Artikel Nr füllen

Re: Excel Import

28. September 2010 12:47

Wie lange sind die Beschreibungen denn? Falls unter 1024 Zeichen, kannst du sie per Variable einlesen und dann im OnAfterImport bearbeiten.

Re: Excel Import

28. September 2010 12:50

Ne sind la länger als 1000 zeichen Der puffer läuft ja auch voll. Habs ja auch so schon probiert.

Re: Excel Import

28. September 2010 13:22

Kannst Du den Text in der Exceldatei nicht auf mehrere Spalten aufteilen? Diese kann man dann so einstellen, das die maximale Länge in Nav nicht überschritten wird, ist nur ein bißchen Arbeit.

In welche Tabelle willst Du diese irren Texte denn importieren?

Re: Excel Import

28. September 2010 13:44

3ug3n hat geschrieben:Also nochmal
Ich habe ein Ecxel Datei dort ist die Artikel Nummer und die Beschreibung drin.
Die Beschreibung ist übelst lang. Aber alles in einer Zeile.
Code:
A12151    HALLO ASJDAKSMDKASMDKMASKDMAKSMMAKMA
A1251     HAJNSDKLASMDKMASKLDMASMASD

Nav kann ja aber nur 250zeichen.
Ich habe jetzt folgendes gemacht. Die beschreibung so formatiert. Das es pro Artikel nicht einmal drin steht sondern mehrs mals also damit es in das beschreibungsfeld reinpasst.
Code:
Beschreibung
HALLO
ASDASH
ADSJDH
AJADHS


Jetzt habe ich zwei Excel datein.
In einer ist nur die Artikel Nr. In der anderen die Beschreibung.
Da die Beschreibung aber jetzt über mehrer Zeilen geht kann ich ja nicht einfach alles zusammen kopieren um den zusammenhang wieder zu erstellen.
Diese würde ja jetzt sousehen
Code:
Artikel NR    Beschreibung
A12121        HALLO     //
A44181        ASDAS     //gehören alle zu dem Artikel A12121
A12151        AASDA   //   



Vielleicht gibt es ja auch einen anderen Weg...aber immen finde ich keinen...

Die datei hat mehr als 50000 zeilen mann kann nicht mal eben die Leeren Felder mit der Artikel Nr füllen


Hmm, also ich will niemandem zu nahe treten, aber ich nehme mir in aller Bescheidenheit das Recht heraus, die Grundlagen eines RDBMS zu erklären.
Excel ist übrigens kein RDBMS sondern eine stupide Datenhalde mit ein paar DV-funktionalitäten.

Eine relationale Datenbank hat viele Tabellen und Tabellenrelationen (1:1, 1:n, n:m).
Jede Tabelle muss einen Primary Key haben, um damit sinnvoll gearbeitet werden kann (Datensätze lesen, schreiben, modifizieren).
Der PK ist eine Spalte (Feld) oder eine Kombination aus mehreren Spalten (Feldern) um die Datensätze (Zeilen) voneinander eindeutig unterscheiden zu können.

Wir gehen nun gemeinsam in den Objektdesigner auf T27, drücken Alt+D, dann Alt+A+K und sehen, dass dort "No." der Primary Key ist.
Damit ist es unmöglich auf der Artikelkarte F3 zu drücken, den Code ART-4711 einzutippen, dann Return, dann nochmals F3, nochmals ART-4711 und nochmals Return => ERROR ("Der Datensatz existiert bereits").

Wenn du in Excel folgende Struktur hast: "No." = ART-4711, Description = 100.000 Characters und splittest das ganze in Excel auf in
ART-4711, Character 0..250
ART-4711, Character 251..500
....
ART-4711, Character 99.251..100.000
dann ist das sicherlich für jeden Controller und Buchhalter eine schöne Übersicht, aber das wirst du bis zum St. Nimmerleinstag in kein RDBMS der Welt so reinbekommen, es sei denn der Primary Key wäre zusammengesetzt aus "No." und Description.

Du wolltest alternativ nun versuchen das ganze aufzusplitten in:

ART-4711, 0..250
ART-0815, 251..500
....
ART-XYZ, 99.251..100.000

=> ja, das ist möglich, allerdings wird das RDBMS nicht autmatisch wissen, dass das alles zu einem Artikel gehört. Für das RDBMS sind das 400 verschieden Artikel.

Was du eigentlich brauchst ist eine 1:n Beziehung. Das heißt du willst pro Artikel mehrere Beschreibungszeilen anlegen.
Diese 1:n Beziehung erreichst du nicht, indem du versuchst 100.000 Zeichen aufzusplitten auf 400 Teilbereiche und in T27 reinzukloppen. Das ist technisch nicht möglich.
Technisch möglich ist, dass der Primary Key von T27 als Foreign Key einer anderen Tabelle z.B. T97 fungiert und du damit deine 1:n Beziehung herstellst.
EDIT: in T97 ist das Feld "No." allein sehr wohl FK, obwohl die Kombi Table Name,No.,Line No. der PK ist.

Daher lautet die erschte Frage: existieren schon die Artikelnummern in NAV, die du in deinem Excel-Sheet hast?
Wenn ja, dann direkter Import der Beschreibungen in die T97. Wenn nein, dann zuerst die Artikelnummern neu anlegen in T27 (INIT, INSERT) und danach im zweiten Durchlauf die Beschreibungen in T97 (SETRANGE, INIT, INSERT).

Ist das ganze nun verständlicher geworden?
Zuletzt geändert von Freestyler am 4. Oktober 2010 11:26, insgesamt 1-mal geändert.

Re: Excel Import

30. September 2010 10:20

Danke nochmal für eure antworten.
Ich habe es alles gelöst.
Ich schreibe später alles zusammen wie ich das gemacht habe, wenn es jemand interessiert.

Re: Excel Import

11. November 2010 20:36

3ug3n hat geschrieben:Danke nochmal für eure antworten.
Ich habe es alles gelöst.
Ich schreibe später alles zusammen wie ich das gemacht habe, wenn es jemand interessiert.

Mich interessiert es.