romero: Weiter Spalte anhängen

Hallo liebe Gemeinde,

habe da ein Problem. Ich möchte gern, das eine weitere Spalte aus einer Exceltabelle mit an einer bestimmten Stückliste angehangen wird.

Es soll da wie folgt funktionieren:

Eine Javascriptdatei greift auf eine Exceldatei zu und liest ein entsprechendes Tabellenblatt aus (der Zeilenanfang und die spalten sind vorgegeben).
Der unten aufgeführte Script, dient zum besseren Verständnis (habe ich von einem bekannten bekommen, welcher z. Z. aber im urlaub ist). Habe ihn noch ein wenig umgebaut, so dass er passt.

Dieser Script liest wie gesagt eine Exceltabelle aus und sucht dann in einem großen Ordner, diverse Dateien und speichert sie in eine *.txt - Datei ab.
Zu jeder Datei in der Exceltabelle, befindet sich auch eine Stückanzahl. Diese soll nun an die gesamte Stückliste angehangen werden.
Nun kann es aber vorkommen, dass aber eine in der Exceltabelle stehende Datei im großen Ordner aus mehr als einer Datei besteht.

Bsp.:
Exceltabelle: A123_45678_000

Datei im Ordner: A123_45678_000A_10a / A123_45678_000A_10b / A123_45678_000A_10c / …

Wenn ich aber nun den Array der Anzahl dahinter hänge, dann (z.B. Anzahlen sind wie folgt (selbe Zeile wie die Datei): 1, 2, 3, 4, …) sieht es wie folgt aus:

A123_45678_000A_10a_1
A123_45678_000A_10b_2
A123_45678_000A_10c_3

Richtig aber müsste es lauten:

A123_45678_000A_10a_1
A123_45678_000A_10b_1
A123_45678_000A_10c_1

Weil der Hauptname so lautet: A123_45678_000.

Ich weiß nun nicht, wie ich diese Anzahl an die Liste dranhänge, so dass die richtige Anzahl an der/die Matte/n hängt.

Könnt ihr mir da helfen?

Vielen Dank
Romero

  1. 		//-----------------------------
    		function getCommandline()
    		{
    			var cmln = RolandRaue.commandLine.replace(/ /g,"").split("-");
    			if( cmln.length == 4 )
    			{
    				locations.infile      = cmln[1].replace(/\\/g,"/");
    				locations.startSheet  = cmln[2];
    				locations.outfile1    = cmln[3].replace(/\\/g,"/");
    			}
                    };
    
    		//------------------------------------------------------
    		//-- leere Elemente löschen
    		//------------------------------------------------------
    		function deleteEmpty( infile )
    		{
    			var i = 0;
    			var out = [];
    			for( i = 0; i < infile.length; i++ )
    			{
    				if( infile[ i ] ) { out.push( infile[i] ); }
    			}
    
    			out.pop();
    
    			return out;
    		};
    
    		function deleteEmpty( anzahl )
    		{
    			var i = 0;
    			var out_anz = [];
    			for( i = 0; i < anzahl.length; i++ )
    			{
    				if( anzahl[ i ] ) { out_anz.push( anzahl[i] ); }
    			}
    
    			out_anz.pop();
    
    			return out_anz;
    		};
    
    		//-----------------------------
    		function init()
    		{
    			var infile, list, out, anzahl;
    			getCommandline();
    
    			msg( "<br>--- Excel Datei laden: ---<br>" );
    			infile = loadExcelFile( locations.infile, locations.startSheet );
    			infile = deleteEmpty( infile );
    			infile = convertInfile( infile );
    
    			anzahl = loadExcelFile( locations.infile, locations.startSheet );
    			anzahl = deleteEmpty( anzahl );
    			anzahl = convertAnzahl( anzahl );
    
    			msg( "<br>--- Dateien finden: ---<br>" );
    			list   = getSortedList( [ locations.posA, locations.posB, locations.posC ] );
    			list   = findLast( list );
    
    			out = checkIfInFileList( list, infile, anzahl );
    
    			if( Eingabewerte.STL_vorhanden == "Ja" || Eingabewerte.STL_Tür_Links_vorhanden == "Ja" || Eingabewerte.STL_Tür_Rechts_vorhanden == "Ja" || Eingabewerte.STL_Tür_LinksRechts_vorhanden == "Ja" )
    			{
    				document.getElementById( "STL_Meldungen_Überschreiben" ).style.display = "inline";
    				document.getElementById( "STL_Meldungen_Alt_Text" ).style.display = "inline";
    				document.getElementById( "STL_Meldungen_Alt_Text" ).disabled = true;
    				document.getElementById( "Überschreiben_Alt_Text" ).disabled = true;
    				document.getElementById( "Alt_Text" ).disabled = true;
    			}
    
    			save( out );
    
    			return;
    		}
    
    		//------------------------------------------
    		function convertInfile( infile )
    		{
    			var i = 0; var last = ""; zaehler = 1;
    			for( i = 0; i < infile.length; i++ )
    			{
    				if( infile[ i ] )
    				{
    					if( last == infile[ i ] ) zaehler++; else zaehler = 1;
    					last = infile[ i ].substr( 0, 14 );
    
    					infile[ i ] = convertFileNameToObject( infile[ i ] );
    
    					infile[ i ].zaehler = zaehler;
    					msg( "infile: " + last + " / " + i + " " + infile[ i ] + "<br>" )
    				}
    			}
    
    			return infile;
    		};
    
    		function convertFileNameToObject( fn )
    		{
    			fn = fn.replace( /-/g, "_" );
    			fn = fn.substr( 0, 14 );
    
    			out = fn;
    			return out;
    		}
    
    		//------------------------------------------
    		function convertAnzahl( anzahl )
    		{
    			var i = 0; var last = "";
    			for( i = 0; i < anzahl.length; i++ )
    			{
    				if( anzahl[ i ] )
    				{
    					last = anzahl[ i ].substr( 0, 14 );
    
    					anzahl[ i ] = convertAnzahlToObject( anzahl[ i ] );
    
    					if( anzahl[ i ] == 1 ) { anzahl[ i ] = "" };
    
    					msg( "Anzahl: " + last + " ( " + anzahl[ i ] + " )<br>" )
    				}
    			}
    
    			return anzahl;
    		};
    
    		function convertAnzahlToObject( anz )
    		{
    			anz = anz.substr( 17, 3 );
    
    			out_anz = anz;
    			return out_anz;
    		};
    
    		//------------------------------------------
    		//-- Exceldatei laden, Array zurückliefern
    		//------------------------------------------
    		function loadExcelFile( fileName, sheetName )
    		{
    			var x, y;
    			var currentRange;
    			var currentSheet;
    			var excelApp = new ActiveXObject("Excel.Application");
    			var wbin;
    			var out      = new Array();
    			
    			try { wbin     = excelApp.Workbooks.Open( fileName ); }
    			catch(e)
    			{
    				STL_Meldungen_Fehler( "(!) konnte folgende Datei nicht öffnen: '" + fileName + "' (!)" );
    				return [];
    			}
    			
    			currentSheet = get_sheet_by_name( wbin, sheetName );
    			if( currentSheet )
    			{
    				currentRange = currentSheet.UsedRange;
    				for ( y = locations.startRow; y < currentRange.Rows.Count; y++ )
    				{
    					out.push( currentRange.Cells( y + 1, locations.startCol1 ).Text + currentRange.Cells( y + 1, locations.startCol1_1 ).Text );
    				}
    
    				for ( y = locations.startRow; y < currentRange.Rows.Count; y++ )
    				{
    					out.push( currentRange.Cells( y + 1, locations.startCol2 ).Text + currentRange.Cells( y + 1, locations.startCol2_2 ).Text );
    				}
    			}
    			wbin.Close();
    			excelApp.Quit();
    			return out;
    
    			function get_sheet_by_name( wb, name )
    			{
    				var i;
    				for( i = 1; i < wb.Sheets.Count + 1; i++ )
    				{
    					if( wb.Sheets( i ).name == name )
    					{
    						return wb.Sheets( i );
    					}
    				}
    				STL_Meldungen_Fehler( "(!) Tabelle '" + name + "' nicht gefunden (!)" );
    				return false;
    			}
    		}
    
    		//-----------------------------
    		function checkIfInFileList( list, infile, anzahl )
    		{
    			var i,temp;
    			var out = [];
    			for( i = 0; i < infile.length && anzahl.length; i++ ) { out = out.concat( findInList( infile[i] ) ); }
    			return out;
    
    			function findInList( s )
    			{
    				var i = 0;
    				var out = [];
    				for( i = 0; i < list.length; i++ )
    				{
    					if( s == list[i].n.join("_").substr( 0, 14 ) ) out.push( list[i] );
    				}
    				if( out.length == 0 ) return [s];
    				return out;
                            }
                    };
    
    		//-----------------------------
    		function save( list )
    		{
    			var out = [];
    			for( var i = 0; i < list.length; i++ )
    			{
    				if( list[i].n )
    				{
    					out.push( list[i].n.join("") + ".nc" );
    					msg( i + " " + list[i].n + " - " + list[i].p + "<br>" );
    				}
    				else
    				{
    					out.push( "! datei nicht gefunden: '" + list[i] + "'" );
    					msg( i + " " + "! datei nicht gefunden '" + list[i] + "' !<br>" );
                            	}
    			}
    
    			document.getElementById( "STL_Meldungen_Überschreiben" ).innerHTML = '<p class="STL_Meldungen_Überschreiben">Wollen Sie die Stückliste Überschreiben? <input type="button" value="Bestätigen" class="STL_Meldungen_Button" onclick="saveFile( locations.workFolder1 + locations.outfile1, out.join("") );"></input> <input type="button" value="Abbrechen" class="STL_Meldungen_Button" onclick="Überschreiben_Abbrechen()"></input>';
    
    			//saveFile( locations.workFolder1 + locations.outfile1, out.join("\r\n") );
    		};
    
    
    		//-----------------------------
    		function getSortedList( locs )
    		{
    			var out = new Array();
    			var temp, i, k;
    			for( i = 0; i < locs.length; i++ )
    			{
    				temp = getFiles( locs[i], 5 )[1];
    				for( k = 0; k < temp.length; k++ )
    				{
    					temp[k] = { p:temp[k].path, n:temp[k].name };
    					temp[k].p = temp[k].p.replace(/\\/g,"/");
    					temp[k].p = temp[k].p.substr( 0, temp[k].p.lastIndexOf("/") );
    					temp[k].n = temp[k].n.split(".")[0];
    					temp[k].n = [ temp[k].n.substr( 0, 14 ), temp[k].n.substr( 14 ) ];
    					out.push( temp[k] );
    				}
    			}
    			out.sort( sort );
    			out = findLast( out );
    			return out;
    
    			//__
    			function sort( a, b )
    			{
    				var i;
    				a = a.n;
    				b = b.n;
    				for( i = 0; i < a.length; i++ )
    				{
    					if( !b[i] ) return 1;
    					if( a[i].length > b[i].length ) return 1;
    					if( a[i].length < b[i].length ) return -1;
    					if( a[i] > b[i] ) return 1;
    					if( a[i] < b[i] ) return -1;
    	                        }
    				return 0;
    	                };
    		};
    			//__
    			function findLast( arr )
    			{
    				var i   = 0;
    				var out = new Array();
    				var temp = [];
    				var current000, last000;
    				var currentX, lastX;
    				var current00x, last00x;
    
    				for( i = 0; i < arr.length; i++ )
    				{
    					current000   = arr[i].n[0];
    					current00x   = arr[i].n[1].split("_")[1];
    					currentX     = arr[i].n[1].split("_")[0];
    					if( last000 != current000 )
    					{
    						out = out.concat( temp );
    						temp = [];
    					}
    					if( i > 0 && lastX != currentX ) { temp = []; }
    					temp.push( arr[ i ] );
    					last000 = current000;
    					lastX   = currentX;
    					last00x = current00x;
    				}
    				return out;
    	                };
    
    		//-----------------------------------------------------------------------
    		function saveFile(FileName,str)
    		{
    			var fso, folder, file, foldername;
    
    			//____
    			function getfoldername(s) { s = s.replace(/\\/g,"/"); s = s.substr( 0, s.lastIndexOf("/") ); return s; }
    
    			fso = new ActiveXObject("Scripting.Filesystemobject");
    			foldername = getfoldername(FileName);
    			if(fso.FolderExists(foldername))
    			{
    				folder = fso.Getfolder(foldername);
    				if(folder.attributes!=16&&folder.attributes!=48)
    				{
    					STL_Meldungen_Fehler("[savefile] kann auf Verzeichnis nicht zugreifen ---><b>" + foldername + "</b> (att:" + folder.attributes + ")");
    					return false;
    				}
    				if(fso.FileExists(FileName))
    				{
    					file = fso.GetFile(FileName);
    					if(file.attributes!=0&&file.attributes!=32)
    					{
    						STL_Meldungen_Fehler("[savefile] kann auf Datei nicht zugreifen ---><b>" + FileName + "</b> (att:" + file.attributes + ")");
    						return false;
    					}
    				}
    				file = fso.OpenTextFile(FileName, 2, true);
    				file.write(str);
    				file.close();
    			}
    			else
    			{
    				STL_Meldungen_Fehler("Verzeichnis nicht gefunden! ---><b>" + foldername + "</b>");
    			}
    		}
    
    		//-----------------------------------------------------------------------------------
    		//-- returns an array: [ array of folder objects, array of file objects ]
    		//-- filter:
    		//-- n = 0000 (0): all folders and subfolders and all files
    		//-- n = 0001 (1): no folders
    		//-- n = 0010 (2): no files
    		//-- n = 0100 (4): no subfolders
    		//-- ext = extension as STRING
    		//-- part = member as STRING, eg. "name"
    		//-----------------------------------------------------------------------------------
    		function getFiles( startfolder, n , ext, part )
    		{
    			if( !n ) n = 0;
    			var fso     = new ActiveXObject("Scripting.FileSystemObject");
    			var folders = new Array();
    			var files   = new Array();
    			if( !fso.FolderExists( startfolder ) )
    			{
    				STL_Meldungen_Fehler("(!) Folder " + startfolder + " not found!", true );
    				return [ [],[] ];
    			}
    			getNext( startfolder );
    			return [ folders, files ];
    
    			function getNext( fld )
    			{
    				var folderObj = fso.getFolder( fld );
    				var filesEn, foldersEn;
    				var tmp = "";
    				if( (n & 2) == 0 )
    				{
    					filesEn   = new Enumerator( folderObj.Files );
    					for (; !filesEn.atEnd(); filesEn.moveNext())
    					{
    						tmp = filesEn.item().name;
    						if( typeof(ext) == 'undefined' || tmp.substr( tmp.length - ext.length, ext.length ).toLowerCase() == ext.toLowerCase() )
    						{
    							if( typeof(part) != 'undefined' && filesEn.item()[part] != 'undefined' )
    								files.push( filesEn.item()[part] )
    							else
    								files.push( filesEn.item() );
    						}
    					}
    				}
    				if( (n & 1) == 0 )
    				{
    					folders.push( folderObj );
    					foldersEn = new Enumerator( folderObj.SubFolders );
    					if( (n & 4) == 0 )
    					{
    						for (; !foldersEn.atEnd(); foldersEn.moveNext()) getNext( foldersEn.item().path );
    					}
    				}
    			}
    		}
    		//-----------------------------
    		function msg( s ) { document.getElementById("msgs").innerHTML += s; };
    
    		function STL_Meldungen_Fehler( Fehler )
    		{
    			document.getElementById("STL_Meldungen_Fehlerausgabe").style.display = "inline";
    			document.getElementById("STL_Meldungen_Fehler").innerHTML += Fehler + '<br>';
    		};
    
    1. warum antwortet mir denn keiner?

      1. warum antwortet mir denn keiner?

        Ich persönlich lese "Excell" und denk' mir: "Habsch keine Ahnung von, tschüss", aber weil du so nett jammerst, habe ich's doch mal angeschaut und hatte wohl recht: Habsch keine Ahnung von.
        Ich _vermute_ dass es in loadExcelFile() hängt, sieht jedenfalls irgendwie so aus. Ist aber wirklich fast blind geraten.

        Du hast bereits diese msg()-Funktion (?) für Ausgaben. Daher schlage ich dir vor: Mach doch einfach mehr kontrollausgaben, vor jedem Mal wo der Dateiname (ob als Array oder als String ist ja Wurst) returnt wird schmeißt du den Inhalt (oder einen Beispielinhalt) in die Kontrollausgabe und dann wirst du doch sehen in welcher Funktion es sich tut und wenn du das hast kannst du dort weiter einkreisen bzw. genauer hinsehen.
        Dann gibt es eine Konrollausgabe am Anfang und am Ende einer Funktion und irgendwo mittendrin... irgendwann muss diese Ziffer ja auftauchen :)

        Wenn ich solche Probleme habe zerpflücke ich auch gerne mal Verkettungen oder andere Operatoren in mehr Schritte.
        1. Kann ich dann besagte Kontrollausgaben dazwischen hängen
        2. Kann mit die Fehlerkonsole den Fehler genauer Ansagen (nämlich immer zeilengenau und was vorher eine Zeile war sind nun fünf).

        Aber wie gesagt: Mir fehlt der Skill was JS+Excell angeht.

        --
        sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
        1. warum antwortet mir denn keiner?
          Ich persönlich lese "Excell" und denk' mir: "Habsch keine Ahnung von, tschüss", aber weil du so nett jammerst, habe ich's doch mal angeschaut und hatte wohl recht: Habsch keine Ahnung von.
          Ich _vermute_ dass es in loadExcelFile() hängt, sieht jedenfalls irgendwie so aus. Ist aber wirklich fast blind geraten.

          Hallöchen. Naja ich habe meine Posts mehrmals durchgelesen aber nix von "Excell" gelesen. Kann das nicht ganz nachvollziehen. Es ist kein jammern von mir. Ich habe hier ein Problem. Denn ich habe schon viel nachgeschaut (in meinem Script) und versucht, wo ich denke, dass er da die einzelnen Teile aus dem „großen Topf“ holt und da die „Anzahl“ dran gehangen. Aber er bringt mir da nur als Ausgabe [object],[Object]. Wenn ich da die Anzahl wieder rausnehme, dann findet er diese auch wieder.
          Glaube nicht dass es an der loadExcelFile() liegt, denn da liest er ja nur die Tabelle aus, wo er 2 Array’s schreibt, einmal das Gesamtteil und zum anderen die Anzahl des Gesamtteiles. Ich vermute mal es liegt an der Stelle, wo er die infile’s sozusagen in dem „großen Topf“ nach allen Einzelteilen sucht. Nur die Frage ist jetzt, wo macht er es genau? Ist es function getFiles() oder function getSortedList() oder function findLast() oder,… Ich weiß es nicht, deshalb hab ich mich an euch gewandt, um Hilfe zu erlangen, oder Tipps. Ich denk mal es liegt an der function checkIfInFileList(). Hier der angepasste Code:

          		//-----------------------------  
          		function checkIfInFileList( list, infile, anzahl )  
          		{  
          			var i,temp;  
          			var out = [];  
          			for( i = 0; i < infile.length && anzahl.length; i++ ) { out = out.concat( findInList( infile[i], anzahl[i] ) ); }  
          			return out;  
            
          			function findInList( s, anzahl )  
          			{  
          				var i = 0;  
          				var out = [];  
          				for( i = 0; i < list.length && anzahl.length; i++ )  
          				{  
          					if( s == list[i].n.join("_").substr( 0, 14 ) ) out.push( list[i] + "_" + anzahl );  
          				}  
          				if( out.length == 0 ) return [s];  
          				return out;  
                                  }  
                          };
          

          Aber in der Ausgabe bringt er nur die, wo die Anzahl 1 ist (weil dann ist die Stelle „“, also 0) als korrekt. Alle die, wo die Anzahl höher als 1 ist bringt er folgenden Ausdruck:
          ! datei nicht gefunden 'E258_70400_052' !
          1 ! datei nicht gefunden 'E258_70401_000' !
          2 ! datei nicht gefunden 'E258_70402_050' !
          3 ! datei nicht gefunden 'E258_70403_000' !
          4 ! datei nicht gefunden 'E258_70404_000' !
          5 ! datei nicht gefunden '[object Object]_55' !
          6 ! datei nicht gefunden '[object Object]_55' !
          7 ! datei nicht gefunden '[object Object]_55' !
          8 ! datei nicht gefunden '[object Object]_55' !
          9 ! datei nicht gefunden 'E258_70406_000' !
          10 ! datei nicht gefunden 'E258_70407_000' !

          Wo also liegt nun mein Fehler? Und warum findet er allgemein keine Daten dazu? Denn wenn ich die anzahl rausnehme, also komplett, dann findet es es.

          Du hast bereits diese msg()-Funktion (?) für Ausgaben. Daher schlage ich dir vor: Mach doch einfach mehr kontrollausgaben, vor jedem Mal wo der Dateiname (ob als Array oder als String ist ja Wurst) returnt wird schmeißt du den Inhalt (oder einen Beispielinhalt) in die Kontrollausgabe und dann wirst du doch sehen in welcher Funktion es sich tut und wenn du das hast kannst du dort weiter einkreisen bzw. genauer hinsehen.
          Dann gibt es eine Konrollausgabe am Anfang und am Ende einer Funktion und irgendwo mittendrin... irgendwann muss diese Ziffer ja auftauchen :)

          Sorry aber soweit war ich auch schon, trotzdem Danke für den Hinweiß.

          Wenn ich solche Probleme habe zerpflücke ich auch gerne mal Verkettungen oder andere Operatoren in mehr Schritte.

          1. Kann ich dann besagte Kontrollausgaben dazwischen hängen
          2. Kann mit die Fehlerkonsole den Fehler genauer Ansagen (nämlich immer zeilengenau und was vorher eine Zeile war sind nun fünf).

          Aber wie gesagt: Mir fehlt der Skill was JS+Excell angeht.

          1. Hallöchen. Naja ich habe meine Posts mehrmals durchgelesen aber nix von "Excell" gelesen.

            Also entweder willst du mich verarschen, in deinem OP schreibst du doch

            Ich möchte gern, das eine weitere Spalte aus einer Exceltabelle (...)
            Eine Javascriptdatei greift auf eine Exceldatei zu

            Oder du hängst dich an meinem Schreibfehler auf, den ich seit geraumer Zeit mache, weil in meinen wirren Gedanken "Tabellenkalkulation" was mit "Zellen" zu tun hat. Ich krieg das auch irgendwie nicht weg.

            Wie auch immer, denn obwohl ich nichts von Excel verstehe habe ich nochmal versucht kein Script nachzuvollziehen. Dabei fiel mir auf, dass nichts außerhalb einer Funktion zu stehen sei.
            Ich wollte aber eigentlich mal händisch durch das Programm schreiten um es zu verstehen und das scheitert leider ganz ganz früh. Ich weiß nicht ob du was dafür kannst, aber es ist wohl eine gute Erklärung, warum dir keine Antwortet.

            Ein Javascript wird ausgeführt und dann wie gesagt nochmalerweise (wie bei den meisten Sprachen) der Teil, der nicht in Funktionen gekapselt ist ^^
            Den gibt es aber nicht, also rate ich einfach mal dass init() die Initialisierung ist also der Einstiegspunkt, der von Excel aufgerufen wird (und leider mitten drin und nicht ganz oben oder ganz unten steht).
            Init() verweist mich als erstes mal an getCommandline(); und da geht's dann los:
            var cmln = RolandRaue.commandLine.replace(/ /g,"").split("-");
            Was ist RolandRaue für ein Objekt und wo wurde es deklariert/initiiert und was ist commandLine dann wieder für ein Objekt?
            Danach werden Eigenschaften gesetzt, von denen ich bisher nicht wusste dass das location-Objekt diese hat.

            Ich vermute dass das eben irgendwelche Sachen sind, die bei Excel normal sind und wie ich eingangs schrieb: Davon habe ich keinen Schimmer (ich benutze eben StarOffice und das nicht mit JS).
            Diesen Schimmer braucht man aber scheinbar um dir bei deinem Problem behilflich sein zu können.

            Du kannst also vermutlich nicht viel dafür, außer du erklärst nochmal schnell das Excel-DOM ^^ aber ich glaube das ist einfach der Grund für den Antwort-Mangel, die wenigsten haben eben Ahnung von der Materie und wie du siehst scheitert man sehr früh wenn man keine Ahnung hat.

            Es ist kein jammern von mir. Ich habe hier ein Problem.

            Da hab ich mich schlecht ausgedrückt, ich meinte das positiv: Du bemühst dich Antworten zu erhalten, indem du "jammerst" dass du keine erhalten hast. Das finde ich gut (mögen andere anders sehen).
            Und weil du dich eben bemüht hast wollte ich - wenn ich schon keine Ahnung habe - wenigstens Hilfestellung geben, wie man ggf. dem Fehler auf die Spur kommen kann. Schade dass das nicht hilfreich war, aber ich versuch's gleich nochmal:

            Aber er bringt mir da nur als Ausgabe [object],[Object]

            Vielleicht kannst du - nach einer TypeOf-Prüfung - das Objekt mit "for in" einfach durchliterieren, damit du überhaupt in Erfahrung bringst, was das für ein Objekt ist.

            --
            sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
            1. Ich habe beide Posts (Script und Anfrage) durchsuchen lassen, nix von Excell gefunden. Ist ja auch egal.

              Ich muss wieder betonen, dass ich dieses Script von einem Bekannten hab bekommen. Ich weiß nicht warum er was gemacht hat. Jedenfalls funktioniert es. Nun war aber meine Frage halt, wie ich in dem (nun ausgebesserten) Script diese Anzahl an die richtige Zeile dranhänge.

              Ich versteh vielleicht nur die Anfänge von Javascript, auch bissl HTML und bisschen Englisch kann ich auch, bin aber kein Profi, wie du oder andere hier. Deshalb habe ich nach euren Tipps und Räten gefragt. Ich weiß, dass ihr dann auch helft, aber ich dachte, wenn ich den kompletten Script poste, reicht das aus. Scheint doch nicht so.

              Zu diesem init(). Also dieser Script ist eine Include-Datei. Sie wird von einer Startseite aufgerufen, wo man verschiedene Flugzeugtypen, Sektionen, Bereiche und Bereichsnummern eingeben kann. Danach werden diese "locations.irgendwas" an das init() übermittelt und dieser Include-Script führt es aus. D.h. es liest als 1. ein Tabellenblatt aus einer Exceltabelle aus (nach den oben genannten Vorgaben). Danach wird diese "infile" dementsprechend konvertiert, so dass man damit Dateien aus einem bestimmten Ordner heraus in eine separate *.txt-Datei speichern kann. Dabei ist es wichtig, dass je nach Aktualität (ISSUE => Kennbuchstabe), die jüngste Datei (oder auch Matte) genommen wird. Dabei kann es passieren, dass eine Matte aus mehr als einem Bauteil besteht. Diese sollen ebenfalls mit übernommen werden.

              Das ist alles.

              Hier nochmal mit Bsp.:

              Exceltabelle:

              F258-70100-000-00
              F258-70101-002-00
              F258-70102-006-00
              F258-70103-004-00
              ...

              Umgewandelte Infile:

              F258_70100_000
              F258_70101_002
              F258_70102_006
              F258_70103_004
              ...

              Dateien in einem bestimmten Ordner:

              F258_70100_000A_20b.nc
              F258_70100_000B_20b.nc
              F258_70100_000D_20b.nc

              F258_70101_002A_11b.nc
              F258_70101_002A_22b.nc

              F258_70102_006E_10s.nc
              F258_70102_006E_11k.nc
              F258_70102_006E_12k.nc
              F258_70102_006E_11b.nc
              F258_70102_006E_22b.nc
              F258_70102_006F_10s.nc
              F258_70102_006F_11k.nc
              F258_70102_006F_12k.nc
              F258_70102_006F_10l.nc
              F258_70102_006F_20b.nc

              F258_70103_004D_20b.nc
              ...

              --> Erklärung:
              F258 -> Flugzeugtyp
              70100 -> Mattenname
              000 -> Variante
              D -> ISSUE (Aktualität)
              20 -> Lagigkeit
              b -> Material

              Gebrauchte Dateien:

              F258_70100_000D_20b.nc

              F258_70101_002A_11b.nc
              F258_70101_002A_22b.nc

              F258_70102_006F_10s.nc
              F258_70102_006F_11k.nc
              F258_70102_006F_12k.nc
              F258_70102_006F_10l.nc
              F258_70102_006F_20b.nc

              F258_70103_004D_20b.nc
              ...

              Nun soll aber da noch die Anzahl dahinter. Wenn es 1-mal vorkommt, dann bleibt zwischen dem Material "b" und dem ".nc" frei. Sollte aber mehr als 1 die Anzahl sein, dann müsste die Matte in der Stückliste so heißen:

              F258_70103_004D_20b_5.nc

              Ich hoffe nun wisst ihr was das für ein Script ist und worum es geht.
              Und hoffe das ihr es nun verstehen könnt.

              LG Romero

              1. Mahlzeit Romero,

                Ich habe beide Posts (Script und Anfrage) durchsuchen lassen, nix von Excell gefunden. Ist ja auch egal.

                Den Hinweis, dass Du Dich bitte nicht an Deus' Schreibfehler aufhängen mögest, hast Du bewusst überlesen?

                Ich muss wieder betonen, dass ich dieses Script von einem Bekannten hab bekommen.

                Warum fragst Du dann nicht diesen Bekannten?

                Ich weiß nicht warum er was gemacht hat.

                Das weiß hier auch niemand.

                Insgesamt scheint mir Dein Problem von einer derartigen Komplexität zu sein, dass es sich schlecht in einem öffentlichen Forum mit einigen Fragen, Rückfragen und kurzen Antworten erklären lässt ... schlicht und ergreifend weil es auf Deiner Seite programmierfachlich hapert und weil auf Seiten der anderen Forumsteilnehmer inhaltlich-fachliches Hintergrundwissen fehlt.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Hallo,

        warum antwortet mir denn keiner?

        a) Excel-Automation über JScript (nicht Javascript) ist hier nicht so oft
           das Thema.

        b) eine Codewüste, nahezu ohne Kommentare.
           Eine einzige Funktion, die über einen einigermaßen anständigen Header
           verfügt: getFiles()
           Diese Codewüste soll nun der potentielle Helfer durchforsten, den Ablauf
           nachvollziehen, um herauszufinden, wo was schiefgeht.

        Das sind sehr schlechte Voraussetzungen, Hilfe zu finden.

        a) Debug-Strategien, wie von Deus Figendi vorgeschlagen, anwenden, um das
           Problem einzugrenzen

        b) Code kommentieren. Nein, das ist *kein* selbsterklärender Code.

        c) Code vereinfachen, ein Beispiel:

                function convertAnzahlToObject( anz )  
                {  
                    anz = anz.substr( 17, 3 );  
                    // in anz steht nun der gewünschte Teilstring  
          
                    out_anz = anz;  
                    // dieser wurde in die Variable out_anz umkopiert, ...  
          
                    return out_anz;  
                    // nur damit der Inhalt dieser Variablen zurückgegeben werden kann  
          
                };
        

        1. Vereinfachung:
           Umkopieren in eine Variable, die sonst nicht genutzt wird, weglassen:

                function convertAnzahlToObject( anz )  
                {  
                    anz = anz.substr( 17, 3 );  
                    // in anz steht nun der gewünschte Teilstring  
          
                    return anz;  
                    // Gib diesen zurück  
          
                };
        

        2. Schritt:
           Überschreiben des Übergabeparameters weglassen, gleich gewünschten
           Teilstring zurückgeben:

                function convertAnzahlToObject( anz )  
                {  
                    return anz.substr( 17, 3 );  
                };
        

        Aber:
        Was ist "anz"?
        Warum ist dies ein Objekt (siehe Funktionsname)?
        Woher kommen die magischen Zahlen 17 und 3?

        Alles in allem eine Funktion, deren Sinn der Leser ohne Hintergrundwissen nicht versteht. Vermittle in Kommentaren (hier im Headerkommentar) dieses Wissen. Reduziere unnötige Komplexität durch Entfernen überflüssigen Codes (hier zwei von drei Codezeilen).

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          warum antwortet mir denn keiner?

          a) Excel-Automation über JScript (nicht Javascript) ist hier nicht so oft
             das Thema.

          b) eine Codewüste, nahezu ohne Kommentare.
             Eine einzige Funktion, die über einen einigermaßen anständigen Header
             verfügt: getFiles()
             Diese Codewüste soll nun der potentielle Helfer durchforsten, den Ablauf
             nachvollziehen, um herauszufinden, wo was schiefgeht.

          Das sind sehr schlechte Voraussetzungen, Hilfe zu finden.

          a) Debug-Strategien, wie von Deus Figendi vorgeschlagen, anwenden, um das
             Problem einzugrenzen

          b) Code kommentieren. Nein, das ist *kein* selbsterklärender Code.

          c) Code vereinfachen, ein Beispiel:

          function convertAnzahlToObject( anz )

          {
                      anz = anz.substr( 17, 3 );
                      // in anz steht nun der gewünschte Teilstring

          out_anz = anz;
                      // dieser wurde in die Variable out_anz umkopiert, ...

          return out_anz;
                      // nur damit der Inhalt dieser Variablen zurückgegeben werden kann

          };

          
          >   
          > 1. Vereinfachung:  
          >    Umkopieren in eine Variable, die sonst nicht genutzt wird, weglassen:  
          >   
          > ~~~javascript
          
                  function convertAnzahlToObject( anz )  
          
          >         {  
          >             anz = anz.substr( 17, 3 );  
          >             // in anz steht nun der gewünschte Teilstring  
          >   
          >             return anz;  
          >             // Gib diesen zurück  
          >   
          >         };
          
          
          1. Schritt:
               Überschreiben des Übergabeparameters weglassen, gleich gewünschten
               Teilstring zurückgeben:

          function convertAnzahlToObject( anz )

          {
                      return anz.substr( 17, 3 );
                  };

          
          >   
            
          Ok hast recht, könnte man vereinfachter schreiben. Aber ich selbst muss es nachvollziehen können. Aber werde es berücksichtigen. Danke.  
          
          > Aber:  
          > Was ist "anz"?  
          > Warum ist dies ein Objekt (siehe Funktionsname)?  
          > Woher kommen die magischen Zahlen 17 und 3?  
          >   
            
          Die „magischen Zahlen“ sind folgende. Die Stellen 1 – 14 sind der eigentliche Hauptteil des Gesamtteiles. Ich habe durch das Auslesen der Exceltabelle die Anzahl an das Gesamtteil drangehangen. Und das Gesamtteil in der Excelliste sieht so aus: A123-45678-000-00 -> insgesamt also 17 Stellen. Also muss ich aber der 17. Stelle (da wo die Anzahl drangehangen wurde) die Anzahl auslesen oder? Und da es max. 3 Stellen geben kann (Anzahl max. 999) habe ich ab der 17. Stelle die 3 nachfolgenden Stellen genommen. Oder was ist daran falsch?  
            
          
          > Alles in allem eine Funktion, deren Sinn der Leser ohne Hintergrundwissen nicht versteht. Vermittle in Kommentaren (hier im Headerkommentar) dieses Wissen. Reduziere unnötige Komplexität durch Entfernen überflüssigen Codes (hier zwei von drei Codezeilen).  
          >   
            
          Ok werde versuchen, mal den Code zu kommentieren.  
          
          >   
          > Freundliche Grüße  
          >   
          > Vinzenz
          
          1. Hallo,

            function convertAnzahlToObject( anz )

            {
                        return anz.substr( 17, 3 );
                    };

              
            
            > Ok hast recht, könnte man vereinfachter schreiben. Aber ich selbst muss es nachvollziehen können.  
              
            Das ist klar. Aber warum das Umkopieren? Wenn Du schon die Rückgabe in einer eigenen Zeile machen willst, warum schreibst Du den Wert nicht gleich in die Variable, die Du zurückgeben willst?  
              
            ~~~javascript
            »         function convertAnzahlToObject( anz )  
            
            >         {  
            >             anz = anz.substr( 17, 3 );  
            >             // in anz steht nun der gewünschte Teilstring  
            
            »  
            
            >             out_anz = anz;  
            >             // dieser wurde in die Variable out_anz umkopiert, ...  
            
            »  
            
            >             return out_anz;  
            >             // nur damit der Inhalt dieser Variablen zurückgegeben werden kann  
            >         };  
            
            

            Alternative:

            function convertAnzahlToObject( anz )  
            {  
                // Halte [ref:self812;javascript/sprache/variablen.htm@title=Variablen so lokal] wie möglich.  
                var out_anz = anz.substr( 17, 3 );  
                return out_anz;  
            }  
            
            

            Was ist "anz"?
            Warum ist dies ein Objekt (siehe Funktionsname)?
            Woher kommen die magischen Zahlen 17 und 3?

            Die „magischen Zahlen“ sind folgende. Die Stellen 1 – 14 sind der eigentliche Hauptteil des Gesamtteiles. Ich habe durch das Auslesen der Exceltabelle die Anzahl an das Gesamtteil drangehangen. Und das Gesamtteil in der Excelliste sieht so aus: A123-45678-000-00 -> insgesamt also 17 Stellen.

            a) "Gesamtteil" sagt mir nichts. Welche Bedeutung hat
               A123-45678-000-00xyz
            b) Die Variable anz enthält also keine "Anzahl", sondern etwas anderes.
               Benenne den Funktionsparameter entsprechend.

            Also muss ich aber der 17. Stelle (da wo die Anzahl drangehangen wurde) die Anzahl auslesen oder? Und da es max. 3 Stellen geben kann (Anzahl max. 999) habe ich ab der 17. Stelle die 3 nachfolgenden Stellen genommen.

            c) Die Funktion wandelt *nicht* eine Anzahl in ein Objekt um, sondern
               ermittelt eher eine Anzahl aus einem Ausgangswert.
               Benenne daher die Funktion entsprechend.

            Freundliche Grüße

            Vinzenz

            1. Hallo,

              Das ist klar. Aber warum das Umkopieren? Wenn Du schon die Rückgabe in einer eigenen Zeile machen willst, warum schreibst Du den Wert nicht gleich in die Variable, die Du zurückgeben willst?

              Ich muss zugeben, dass ich nicht der Profi hier bin. Beschäftige mich erst seit einiger Zeit mit Javacript. Deshalb müsst ihr es entschuldigen.

              Die „magischen Zahlen“ sind folgende. Die Stellen 1 – 14 sind der eigentliche Hauptteil des Gesamtteiles. Ich habe durch das Auslesen der Exceltabelle die Anzahl an das Gesamtteil drangehangen. Und das Gesamtteil in der Excelliste sieht so aus: A123-45678-000-00 -> insgesamt also 17 Stellen.

              a) "Gesamtteil" sagt mir nichts. Welche Bedeutung hat
                 A123-45678-000-00xyz
              b) Die Variable anz enthält also keine "Anzahl", sondern etwas anderes.
                 Benenne den Funktionsparameter entsprechend.

              Also könnte ich ja theoretisch auch folgendes in function ConvertAnzahl( anzahl ) schreiben?


              anzahl[ i ] = anzahl[ i ].substr( 17 , 3 ); //statt: anzahl[ i ] = ConvertAnzahlToObject( anzahl[ i ] );

              Die Bedeutung liegt darin, dass dieses A123-45678-000-00xyz ein Name für eine Isoliermatte ist. Ich brauche aber für weitere Anwendungen nur die ersten 14 Stellen und für die Anzahl ab der 17. Stelle die 3 nachfolgenden.

              Also muss ich aber der 17. Stelle (da wo die Anzahl drangehangen wurde) die Anzahl auslesen oder? Und da es max. 3 Stellen geben kann (Anzahl max. 999) habe ich ab der 17. Stelle die 3 nachfolgenden Stellen genommen.

              c) Die Funktion wandelt *nicht* eine Anzahl in ein Objekt um, sondern
                 ermittelt eher eine Anzahl aus einem Ausgangswert.
                 Benenne daher die Funktion entsprechend.

              Freundliche Grüße

              Vinzenz

    2. Der überarbeitete Code. Hoffe ihr könnt nun nachvollziehen, was gemeint ist.

      		//-----------------------------
      		function getCommandline()
      		{
      			var cmln = RolandRaue.commandLine.replace(/ /g,"").split("-");
      			if( cmln.length == 4 )
      			{
      				locations.infile      = cmln[1].replace(/\\/g,"/");
      				locations.startSheet  = cmln[2];
      				locations.outfile1    = cmln[3].replace(/\\/g,"/");
      			}
                      };
      
      		//------------------------------------------------------
      		//-- leere Elemente der Infile löschen
      		//------------------------------------------------------
      		function deleteEmpty( infile )
      		{
      			var i = 0;
      			var out = [];
      			for( i = 0; i < infile.length; i++ )
      			{
      				if( infile[ i ] ) { out.push( infile[i] ); }
      			}
      
      			//--> alle leeren Eintragungen werden gelöscht
      
      			out.pop();
      
      			//--> der letzte Eintrag wird gelöscht
      
      			return out;
      		};
      
      		//------------------------------------------------------
      		//-- leere Elemente der Anzahl löschen
      		//------------------------------------------------------
      		function deleteEmpty( anzahl )
      		{
      			var i = 0;
      			var out_anz = [];
      			for( i = 0; i < anzahl.length; i++ )
      			{
      				if( anzahl[ i ] ) { out_anz.push( anzahl[i] ); }
      			}
      
      			//--> alle leeren Eintragungen werden gelöscht
      
      			out_anz.pop();
      
      			//--> der letzte Eintrag wird gelöscht
      
      			return out_anz;
      		};
      
      		//-----------------------------
      		//-- Initialisierung
      		//-----------------------------
      		function init()
      		{
      			var infile, list, out, anzahl;
      			getCommandline();
      
      			//--> Kommandozeilen parameter auslesen
      
      			msg( "<br>--- Excel Datei laden: ---<br>" );
      			infile = loadExcelFile( locations.infile, locations.startSheet );
      			infile = deleteEmpty( infile );
      			infile = convertInfile( infile );
      
      			//--> Excelliste auslesen, leeren Inhalt löschen, Infile (ausgelesene Excelliste) für das Auslesen vorbereiten
      
      			anzahl = loadExcelFile( locations.infile, locations.startSheet );
      			anzahl = deleteEmpty( anzahl );
      			anzahl = convertAnzahl( anzahl );
      
      			//--> Excelliste auslesen, leeren Inhalt löschen, Anzahl (ausgelesene Excelliste) für das Auslesen vorbereiten
      
      			msg( "<br>--- Dateien finden: ---<br>" );
      			list   = getSortedList( [ locations.posA, locations.posB, locations.posC ] );
      			list   = findLast( list );
      
      			//--> Dateien finden, Liste sortieren. Liste ist ein Array von Objekten: { p = Pfad, n = c_infileSet() objekt }
      			//--> jeweils letzte Datei finden, und alle anderen Einträge löschen
      
      			out = checkIfInFileList( list, infile, anzahl );
      
      			//--> Dateien und Infile vergleichen
      
      			save( out );
      
      			return;
      		}
      
      		//---------------------------------------------
      		//-- Infile konvertieren, Ausgabe zur kontrolle
      		//---------------------------------------------
      		function convertInfile( infile )
      		{
      			var i = 0; var last = ""; zaehler = 1;
      			for( i = 0; i < infile.length; i++ )
      			{
      				if( infile[ i ] )
      				{
      					if( last == infile[ i ] ) zaehler++; else zaehler = 1;
      					last = infile[ i ].substr( 0, 14 );
      
      					infile[ i ] = convertFileNameToObject( infile[ i ] );
      
      					infile[ i ].zaehler = zaehler;
      					msg( "infile: " + last + " / " + i + " " + infile[ i ] + "<br>" )
      				}
      			}
      
      			return infile;
      		};
      
      		function convertFileNameToObject( fn )
      		{
      			fn = fn.replace( /-/g, "_" );
      			fn = fn.substr( 0, 14 );
      
      			out = fn;
      			return out;
      		}
      
      		//---------------------------------------------
      		//-- Anzahl konvertieren, Ausgabe zur kontrolle
      		//---------------------------------------------
      		function convertAnzahl( anzahl )
      		{
      			var i = 0; var last = "";
      			for( i = 0; i < anzahl.length; i++ )
      			{
      				if( anzahl[ i ] )
      				{
      					last = anzahl[ i ].substr( 0, 14 );
      
      					anzahl[ i ] = convertAnzahlToObject( anzahl[ i ] );
      
      					if( anzahl[ i ] == 1 ) { anzahl[ i ] = "" };
      
      					msg( "Anzahl: " + last + " ( " + anzahl[ i ] + " )<br>" )
      				}
      			}
      
      			return anzahl;
      		};
      
      		function convertAnzahlToObject( anz )
      		{
      			return anz = anz.substr( 17, 3 );
      		};
      
      		//------------------------------------------
      		//-- Exceldatei laden, Array zurückliefern
      		//------------------------------------------
      		function loadExcelFile( fileName, sheetName )
      		{
      			var x, y;
      			var currentRange;
      			var currentSheet;
      			var excelApp = new ActiveXObject("Excel.Application");
      			var wbin;
      			var out      = new Array();
      			
      			try { wbin     = excelApp.Workbooks.Open( fileName ); }
      			catch(e)
      			{
      				STL_Meldungen_Fehler( "(!) konnte folgende Datei nicht öffnen: '" + fileName + "' (!)" );
      				return [];
      			}
      			
      			currentSheet = get_sheet_by_name( wbin, sheetName );
      			if( currentSheet )
      			{
      				currentRange = currentSheet.UsedRange;
      				for ( y = locations.startRow; y < currentRange.Rows.Count; y++ )
      				{
      					out.push( currentRange.Cells( y + 1, locations.startCol1 ).Text + currentRange.Cells( y + 1, locations.startCol1_1 ).Text );
      				}
      
      				for ( y = locations.startRow; y < currentRange.Rows.Count; y++ )
      				{
      					out.push( currentRange.Cells( y + 1, locations.startCol2 ).Text + currentRange.Cells( y + 1, locations.startCol2_2 ).Text );
      				}
      			}
      
      			//--> Matten-Spalte auslesen und Anzahl-Spalte an die Stückliste zeilenweise anhängen
      
      			wbin.Close();
      			excelApp.Quit();
      			return out;
      
      			function get_sheet_by_name( wb, name )
      			{
      				var i;
      				for( i = 1; i < wb.Sheets.Count + 1; i++ )
      				{
      					if( wb.Sheets( i ).name == name )
      					{
      						return wb.Sheets( i );
      					}
      				}
      				STL_Meldungen_Fehler( "(!) Tabelle '" + name + "' nicht gefunden (!)" );
      				return false;
      			}
      		}
      
      		//-----------------------------
      		function checkIfInFileList( list, infile, anzahl )
      		{
      			var i,temp;
      			var out = [];
      			for( i = 0; i < infile.length && anzahl.length; i++ ) { out = out.concat( findInList( infile[i], anzahl[i] ) ); }
      			return out;
      
      			function findInList( s, anzahl )
      			{
      				var i = 0;
      				var out = [];
      				for( i = 0; i < list.length && anzahl.length; i++ )
      				{
      					if( s == list[i].n.join("_").substr( 0, 14 ) ) out.push( list[i] + "_" + anzahl );
      				}
      				if( out.length == 0 ) return [s];
      				return out;
                              }
                      };
      
      		//----------------------------------------------------------------------------
      		//-- gefundene Materialien in einer Liste speichern und zur Kontrolle ausgeben
      		//----------------------------------------------------------------------------
      		function save( list )
      		{
      			var out = [];
      			for( var i = 0; i < list.length; i++ )
      			{
      				if( list[i].n )
      				{
      					out.push( list[i].n.join("") + ".nc" );
      					msg( i + " " + list[i].n + " - " + list[i].p + "<br>" );
      				}
      				else
      				{
      					out.push( "! datei nicht gefunden: '" + list[i] + "'" );
      					msg( i + " " + "! datei nicht gefunden '" + list[i] + "' !<br>" );
                              	}
      			}
      			saveFile( locations.workFolder1 + locations.outfile1, out.join("\r\n") );
      		};
      
      
      		//---------------------------------------------------------
      		//-- Liste in vorgegebenen Ordner durchsuchen und speichern
      		//---------------------------------------------------------
      		function getSortedList( locs )
      		{
      			var out = new Array();
      			var temp, i, k;
      			for( i = 0; i < locs.length; i++ )
      			{
      				temp = getFiles( locs[i], 5 )[1];
      				for( k = 0; k < temp.length; k++ )
      				{
      					temp[k] = { p:temp[k].path, n:temp[k].name };
      					temp[k].p = temp[k].p.replace(/\\/g,"/");
      					temp[k].p = temp[k].p.substr( 0, temp[k].p.lastIndexOf("/") );
      					temp[k].n = temp[k].n.split(".")[0];
      					temp[k].n = [ temp[k].n.substr( 0, 14 ), temp[k].n.substr( 14 ) ];
      					out.push( temp[k] );
      				}
      			}
      
      			//--> Dateien finden
      
      			out.sort( sort );
      			out = findLast( out );
      			return out;
      
      			function sort( a, b )
      			{
      				var i;
      				a = a.n;
      				b = b.n;
      				for( i = 0; i < a.length; i++ )
      				{
      					if( !b[i] ) return 1;
      					if( a[i].length > b[i].length ) return 1;
      					if( a[i].length < b[i].length ) return -1;
      					if( a[i] > b[i] ) return 1;
      					if( a[i] < b[i] ) return -1;
      	                        }
      				return 0;
      
      			//--> Liste sortieren
      
      	                };
      		};
      
      		function findLast( arr )
      		{
      			var i   = 0;
      			var out = new Array();
      			var temp = [];
      			var current000, last000;
      			var currentX, lastX;
      			var current00x, last00x;
      
      			for( i = 0; i < arr.length; i++ )
      			{
      				current000   = arr[i].n[0];
      				current00x   = arr[i].n[1].split("_")[1];
      				currentX     = arr[i].n[1].split("_")[0];
      				if( last000 != current000 )
      				{
      					out = out.concat( temp );
      					temp = [];
      				}
      				if( i > 0 && lastX != currentX ) { temp = []; }
      				temp.push( arr[ i ] );
      				last000 = current000;
      				lastX   = currentX;
      				last00x = current00x;
      			}
      			return out;
      
      		//--> Letzten Eintrag finden, sprich höchste Aktualität (ISSUE)
      
                      };
      
      		//------------------------------------------
      		//--Liste im entsprechendem Ordner speichern
      		//------------------------------------------
      		function saveFile(FileName,str)
      		{
      			var fso, folder, file, foldername;
      
      			//____
      			function getfoldername(s) { s = s.replace(/\\/g,"/"); s = s.substr( 0, s.lastIndexOf("/") ); return s; }
      
      			fso = new ActiveXObject("Scripting.Filesystemobject");
      			foldername = getfoldername(FileName);
      			if(fso.FolderExists(foldername))
      			{
      				folder = fso.Getfolder(foldername);
      				if(folder.attributes!=16&&folder.attributes!=48)
      				{
      					STL_Meldungen_Fehler("[savefile] kann auf Verzeichnis nicht zugreifen ---><b>" + foldername + "</b> (att:" + folder.attributes + ")");
      					return false;
      				}
      				if(fso.FileExists(FileName))
      				{
      					file = fso.GetFile(FileName);
      					if(file.attributes!=0&&file.attributes!=32)
      					{
      						STL_Meldungen_Fehler("[savefile] kann auf Datei nicht zugreifen ---><b>" + FileName + "</b> (att:" + file.attributes + ")");
      						return false;
      					}
      				}
      				file = fso.OpenTextFile(FileName, 2, true);
      				file.write(str);
      				file.close();
      			}
      			else
      			{
      				STL_Meldungen_Fehler("Verzeichnis nicht gefunden! ---><b>" + foldername + "</b>");
      			}
      		}
      
      		//-----------------------------------------------------------------------------------
      		//-- returns an array: [ array of folder objects, array of file objects ]
      		//-- filter:
      		//-- n = 0000 (0): all folders and subfolders and all files
      		//-- n = 0001 (1): no folders
      		//-- n = 0010 (2): no files
      		//-- n = 0100 (4): no subfolders
      		//-- ext = extension as STRING
      		//-- part = member as STRING, eg. "name"
      		//-----------------------------------------------------------------------------------
      		function getFiles( startfolder, n , ext, part )
      		{
      			if( !n ) n = 0;
      			var fso     = new ActiveXObject("Scripting.FileSystemObject");
      			var folders = new Array();
      			var files   = new Array();
      			if( !fso.FolderExists( startfolder ) )
      			{
      				STL_Meldungen_Fehler("(!) Folder " + startfolder + " not found!", true );
      				return [ [],[] ];
      			}
      			getNext( startfolder );
      			return [ folders, files ];
      
      			function getNext( fld )
      			{
      				var folderObj = fso.getFolder( fld );
      				var filesEn, foldersEn;
      				var tmp = "";
      				if( (n & 2) == 0 )
      				{
      					filesEn   = new Enumerator( folderObj.Files );
      					for (; !filesEn.atEnd(); filesEn.moveNext())
      					{
      						tmp = filesEn.item().name;
      						if( typeof(ext) == 'undefined' || tmp.substr( tmp.length - ext.length, ext.length ).toLowerCase() == ext.toLowerCase() )
      						{
      							if( typeof(part) != 'undefined' && filesEn.item()[part] != 'undefined' )
      								files.push( filesEn.item()[part] )
      							else
      								files.push( filesEn.item() );
      						}
      					}
      				}
      				if( (n & 1) == 0 )
      				{
      					folders.push( folderObj );
      					foldersEn = new Enumerator( folderObj.SubFolders );
      					if( (n & 4) == 0 )
      					{
      						for (; !foldersEn.atEnd(); foldersEn.moveNext()) getNext( foldersEn.item().path );
      					}
      				}
      			}
      		}
      
  2. Ich muss euch noch mal fragen.

    Ich weiß jetzt wenigstens, an welcher Stelle ich die Anzahl anbringen muss.
    Aber da macht er halt was anderes, als erwünscht. Nun wollt ich euch fragen, wo nun mein Fehler liegt?

    Das ist der Script dazu:

    		function init()  
    		{  
    		…  
    			out = checkIfInFileList( list, infile, anzahl );  
      
    			//--> Dateien und Infile vergleichen, sowie deren Anzahl anhängen  
      
    			save( out );};  
      
    		//-----------------------------  
    		function checkIfInFileList( list, infile, anzahl )  
    		{  
    			var i,temp;  
    			var out = [];  
      
    			for( i = 0; i < infile.length; i++ ) { out = out.concat( findInList( infile[i] ) ); }  
      
    			return out;  
      
    			function findInList( s )  
    			{  
    				var i = 0;  
    				var out = [];  
    				for( i = 0; i < list.length && anzahl.length; i++ )  
    				{  
    					if( s == list[i].n.join("_").substr( 0, 14 ) )  
    					{  
    						list[i].anzahl = list[i].n.join("") + "_" + anzahl;  
      
    						out.push( list[i] );  
    					}  
    				}  
      
    				if( out.length == 0 ) return [s];  
    				return out;  
                            }  
                    };  
      
    		//----------------------------------------------------------------------------  
    		//-- gefundene Materialien in einer Liste speichern und zur Kontrolle ausgeben  
    		//----------------------------------------------------------------------------  
    		function save( list )  
    		{  
    			var out = [];  
      
    			for( var i = 0; i < list.length; i++ )  
    			{  
    				if( list[i].n )  
    				{  
    					out.push( list[i].n.join("") + ".nc" );  
    					msg( i + " " + list[i].n + " // " + list[i].anzahl + " - " + list[i].p + "<br>" );  
    				}  
    				else  
    				{  
    					out.push( "! datei nicht gefunden: '" + list[i] + "'" );  
    					msg( i + " " + "! datei nicht gefunden '" + list[i] + "' !<br>" );  
                            	}  
    			}  
      
    			//document.getElementById( "STL_Meldungen_Überschreiben" ).innerHTML = '<p class="STL_Meldungen_Überschreiben">Wollen Sie die Stückliste Überschreiben? <input type="button" value="Bestätigen" class="STL_Meldungen_Button" onclick="saveFile( locations.workFolder1 + locations.outfile1, out.join("") );"></input> <input type="button" value="Abbrechen" class="STL_Meldungen_Button" onclick="Überschreiben_Abbrechen()"></input>';  
      
    			var infile_vorhanden = loadFile( locations.workFolder_STL + locations.outfile1 ).replace(/\r\n/g,"\n").split("\n");  
      
    			vergleich( out , infile_vorhanden )  
      
    			//-------------------------------------------------------------------------------  
    			//-- Ausgabedatei und vorhandene Stückliste vergleichen und Unterschiede ausgeben  
    			//-------------------------------------------------------------------------------  
    			function vergleich( infile_neu , infile_vorhanden )  
    			{  
    				for( var i = 0; i < infile_neu.length && infile_vorhanden.length; i++ )  
    				{  
    					infile_neu[i] = infile_neu[i].substr( 0 , 15 );  
    					infile_vorhanden[i] = infile_vorhanden[i].substr( 0 , 15 );  
    				}  
      
    				infile_neu.sort();  
    				infile_vorhanden.sort();  
      
    				if( infile_neu.length == infile_vorhanden.length )  
    				{  
    					msg( "<br><b>Keine Unterschiede gefunden." );  
    				}  
    				else  
    				{  
    					for( var i = 0; i < infile_neu.length && infile_vorhanden.length; i++ )  
    					{  
    						if( infile_neu[i] != infile_vorhanden[i] )  
    						{  
    							msg( "<br>Unterschiede: " + infile_vorhanden[i] + " --> " + infile_neu[i] );  
    						}  
    					}  
    				}  
      
    				return;  
      
    			};  
      
    			//saveFile( locations.workFolder1 + locations.outfile1, out.join("\r\n") );  
    		};
    

    Infile ist das, was der Script aus der Excelliste ausliest. List ist das, was er in einem bestimmten Ordner findet (und da den aktuellsten Wert). Anzahl ist die Anzahl passend zur Infile.

    Bei function checkIfInFileList( list, infile, anzahl ) wird also die infile mit der list verglichen und dann in out gespeichert. Nun wollt ich die anzahl direkt dahinter schreiben (siehe oben). Wenn ich die Variante wie oben nehme, dann gibt er function save( list ) folgendes aus:

    0 E258_70600_000,C_20b // E258_70600_000C_20b_55,88,,,,,,,,,,,,,,,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,, - O:/SCHNITT_IGES_2003_02_25/A320/F
    1 E258_70601_000,D_20b // E258_70601_000D_20b_55,88,,,,,,,,,,,,,,,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,, - O:/SCHNITT_IGES_2003_02_25/A320/F
    2 E258_70602_000,C_20b // E258_70602_000C_20b_55,88,,,,,,,,,,,,,,,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,, - O:/SCHNITT_IGES_2003_02_25/A320/F

    Wenn ich aber die

    function checkIfInFileList( list, infile, anzahl )  
    		{for( i = 0; i < list.length && anzahl.length; i++ )  
    				{  
    					if( s == list[i].n.join("_").substr( 0, 14 ) )  
    					{  
    						list[i].anzahl = list[i].n.join("") + "_" + anzahl[i]; // der geänderte Ausdruck  
      
    						out.push( list[i] );  
    					}  
    				}}
    

    abändere, dann bringt die function save( list ) folgendes:

    0 E258_70600_000,C_20b // E258_70600_000C_20b_undefined - O:/SCHNITT_IGES_2003_02_25/A320/F
    1 E258_70601_000,D_20b // E258_70601_000D_20b_undefined - O:/SCHNITT_IGES_2003_02_25/A320/F
    2 E258_70602_000,C_20b // E258_70602_000C_20b_undefined - O:/SCHNITT_IGES_2003_02_25/A320/F

    Was mache ich da falsch? Zumal anzahl ich wunderbar mittels einer Schleife auslesen kann und das Script mir auch für jede Zeile einen entsprechenden Wert zurück gibt.

    LG Romero

    1. Brauche dazu bitte Hilfe.

      kann mir grad nicht erklären, wo für mich der Fehler liegt.

      Mfg Romero

    2. Hi Romero,
      Du schreibst:

        
      for( i = 0; i < list.length && anzahl.length; i++ )  
      {  
        if( s == list[i].n.join("_").substr( 0, 14 ) )  
        {  
          list[i].anzahl = list[i].n.join("") + "_" + anzahl[i]; // der geänderte Ausdruck  
        
          out.push( list[i] );  
        }  
      }
      

      Hier ist anzahl.length ja immer true solange das Array min. 1 Element hat,
      das heißt aber nicht das es anzahl auch soviel Elemente wie list hat...
      deswegen wohl das undefined.

      Du meinst es wohl eher so:
      for( i = 0; i < list.length && i < anzahl.length; i++ )

      Grüße

      1. Hi Romero,
        Du schreibst:

        for( i = 0; i < list.length && anzahl.length; i++ )
        {
          if( s == list[i].n.join("").substr( 0, 14 ) )
          {
            list[i].anzahl = list[i].n.join("") + "
        " + anzahl[i]; // der geänderte Ausdruck

        out.push( list[i] );
          }
        }

        
        >   
        > Hier ist anzahl.length ja immer true solange das Array min. 1 Element hat,  
        > das heißt aber nicht das es anzahl auch soviel Elemente wie list hat...  
        > deswegen wohl das undefined.  
        >   
        > Du meinst es wohl eher so:  
        > `for( i = 0; i < list.length && i < anzahl.length; i++ )`{:.language-javascript}  
        >   
        > Grüße  
          
        Hallöchen,  
          
        ok ich habe es so versucht, aber musste feststellen, dass es so auch nicht funktioniert, wie ich es mir dachte. Denke der Fehler liegt daran, dass „list“ mehr Einträge besitzt als es „anzahl“ bzw. „infile“ gibt. Die „list“ ist ein riesiger Ordner mit, sagen wir, 500 Dateien. Infile bzw. anzahl dagegen hat jeweils nur 50 Einträge.  
          
        Ich muss aber davor weg nehmen, dass beim Vergleich von infile und list auch mehrere Dateien aus list gespeichert werden können.  
          
        Bsp.:  
        Infile:  
          
        A123\_45678\_000  
        A123\_45679\_002  
        …  
          
        list:  
          
        A123\_45678\_000A\_10  
        A123\_45678\_000A\_11  
        A123\_45678\_000A\_12  
          
        A123\_45679\_002B\_10  
        A123\_45679\_002B\_11  
        A123\_45679\_002B\_12  
        …  
          
        Die anzahl zur infile sieht da wie folgt aus.  
          
        Infile:  
          
        A123\_45678\_000  
        A123\_45679\_002  
        …  
          
        anzahl:  
          
        5  
        12  
        …  
          
        Aussehen muss es am Ende so:  
          
        A123\_45678\_000A\_10\_5  
        A123\_45678\_000A\_11\_5  
        A123\_45678\_000A\_12\_5  
          
        A123\_45679\_002B\_10\_12  
        A123\_45679\_002B\_11\_12  
        A123\_45679\_002B\_12\_12  
        …  
          
        Bei out.push( list[i] ); speichert er die gesamte Liste aller gefundenen Dateien, passend zur infile. Aber wie bekomm ich nun die passende Anzahl dahinter?  
          
        Weiter oben steht auch das Teilscript, was gebraucht wird, das richtige auszugeben. Also function save( list ), function checkifinfilelist( list, infile, anzahl) bzw. die funtion init()  
          
        Vielen Dank dafür.  
          
        LG Romero