Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Javescript

Javescript
24.06.2020 20:49:45
Epping
Hallo erstmal ein herzliches Danke für dieses Forum das ich schon lange nutze
zudem ich aber bisher noch nix Betragen konnte. Sorry
Jetzt hatte ich aber das Problem das ich viel Excel daten in ein Javascript "Array" eintragen musste.
Also hab ich dieses klenes Tool gebastelt
Im Prinzp ist auch Alles darin von Hier geklaut (Danke dafür)
Ich hoffe das es auch andere gebrauchen können
Vieleit hat ja noch jemand eine bessere Idee ?
mfg
Gerd

Sub ExcelZuJavescriptArray()
Cells.Copy
Sheets.Add After:=ActiveSheet
Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
letztespalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For spalte = letztespalte To 1 Step -1
Columns(spalte).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
For zeile = 1 To letztezeile
Cells(zeile, spalte).Value = ""","""
Next zeile
Next spalte
letztespalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column + 1
For zeile = 1 To letztezeile
Cells(zeile, letztespalte).Value = """);"
Next zeile
For zeile = 1 To letztezeile
Cells(zeile, 1).Value = "ExcelArray[" & (zeile - 1) & "] = new Array("""
Next zeile
letztespalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For zeile = 1 To letztezeile
For spalte = 1 To letztespalte
Cells(zeile, letztespalte + 1).Value = Cells(zeile, letztespalte + 1).Value & Cells(zeile,  _
spalte).Value
Next spalte
Next zeile
letztespalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column - 1
Cells(letztezeile, letztespalte).Select
letzteCelle = Selection.Address
Range("A1:" & letzteCelle).Select
Selection.Delete Shift:=xlToLeft
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ja, JavaScript-Arrays, bessere Idee!
25.06.2020 23:21:50
Luc:?
Aber zuerst mal etwas allgemeiner, Gerd;
schön, dass du dich mit so etwas befasst, denn das dokumentiert sehr schön, dass Arrays in anderen Sprachen normalerweise aus 1dimensionalen Tensoren gebildet wdn. Demggüber ist ein n-dimensionales VBA-Array in 1.Linie der MatrixStruktur von Xl geschuldet. Aber auch VBA kennt diesen Array-Typ (nach dem gleichen Prinzip indizierbar), wenn auch nicht als Objekt. Außerdem sind in VBA Mischformen beider möglich. Wenn du also wie hier einen ganzen BlattInhalt in ein Java- bzw JScript-Array schreibst, muss das zeilenweise [Kovektoren, Tensoren(0,1)] in ein leeres Array geschehen, dessen Elemente dann ebenfalls aus Arrays bestehen. Das macht aus dem Haupt-Array einen Vektor [Tensor(1,0)]. Alles zusammen bildet dann einen 2stufigen (r+s=1+1) Tensor des Typs (1,1), der von Xl in einer ZellFml als (2dimensionale) Matrix interpretiert wird.
Aber nun zu den Einzelheiten deiner Arbeit:
A. Beim Einfügen des fertigen Pgms in einen HTML-Code könntest du Interpretationsprobleme bekommen, wenn du nicht den richtigen Namen der PgmmierSprache angibst (Jave ist es definitiv nicht!).
B. Ich habe dein Pgm mit diversen Daten getestet. Dabei fiel mir Folgendes auf:
1. Das Pgm benötigt recht lange - das kann schneller gehen!
2. Es berücksichtigt nicht die unterschiedlichen Datentypen, wobei auch DezimalTrenner, Zahlen generell und Wahrheitswerte, inkl der Case-Sensitivität von JS (diese Sprache nimmt es nicht nur dabei sehr genau!), nicht nur Texte, zu beachten sind.
3. Es wird stets der ganze UsedRange eines Blattes verwendet; besser wäre es, Bereiche angeben zu können, ggf sogar diskontinuierliche. Das wäre mit einer UDF einfach zu bewerkstelligen.
Das alles berücksichtigend, habe ich 2 singulare MatrixFmln zusammengestellt, die das schnell und gründlich erreichen. Wenn du das mit dem Ergebnis deiner SubProz vergleichst (bei gleicher QuellDatenLage!), wird dir sicher der Unterschied auffallen. (Die Fmln wdn hier über 10 Zeilen 1er Spalte gezogen.)
• Für kontinuierliche Bereiche:
A37[:A46]:="xlRgArrOb["&ZEILE()-37&"] = new Array("&
WECHSELN(WECHSELN(WECHSELN(VJoin(WENN(ISTTEXT(A13:I13);""""&A13:I13&"""";A13:I13);",";-2);
"Falsch";"false");"Wahr";"true");"""""";"")&");"
• Für diskontinuierliche Bereiche:
A25[:A34]: {="xlRgArrOb["&ZEILE()-25&"] = new Array("&
WECHSELN(WECHSELN(VJoin(WENN(ISTTEXT(DataSet(A1:H1;M1;2;;1));""""&DataSet(A1:H1;M1;2;;1)&"""";
WENN(ISTLEER(DataSet(A1:H1;M1;2;;1));"";DataSet(A1:H1;M1;2;;1)));",";-2);"Falsch";"false");
"Wahr";"true")&");"}
UDF-Links:
DataSet (Vs1.3) https://www.herber.de/forum/archiv/1504to1508/1507939_InteressentenInfo_zum_WE.html#1508954
VJoin (Vs1.4) https://www.herber.de/bbs/user/99024.xlsm (DownLoad BspDatei)
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige