Foren
Neue Beiträge
Foren durchsuchen
Was ist neu?
Neue Beiträge
Profilnachrichten
Online
Anmelden
Registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Neue Beiträge
Foren durchsuchen
Menü
Anmelden
Registrieren
App installieren
Installieren
Programmierung
JavaScript
Auslesen einer Tabelle und Berechnen von Mitarbeiterpausen
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Auf Thema antworten
Beitrag
[QUOTE="Knox, post: 14050, member: 4798"] Enthschuldigung, der Code ist leider vor meiner letzten Änderung. Hier ist der aktuellste Code: [CODE]<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Excel-Daten auslesen</title> <style> #dropZone { border: 2px dashed #ccc; width: 300px; height: 200px; line-height: 200px; text-align: center; font-size: 18px; margin: 20px auto; } #loadingText { text-align: center; font-size: 18px; margin-bottom: 20px; display: none; /* Verstecke den Text standardmäßig */ } #outputTable th:nth-child(4), #outputTable td:nth-child(4) { display: none; /* Blende die Spalte "Dienstzeiten" aus */ } #pausenzeiten { display: block; height: auto; } </style> </head> <body> <h1>Excel-Daten auslesen</h1> <div id="loadingText">Daten werden berechnet...</div> <div id="dropZone">Datei hier ablegen</div> <table id="outputTable"> <thead> <tr> <th>Name</th> <th>Status</th> <th>Team</th> <th>Dienstzeiten</th> <th>Reale Dienstzeiten</th> </tr> </thead> <tbody id="outputBody"></tbody> </table> <div> <button onclick="calculateBreakTimes()">Pausenzeiten berechnen</button> </div> <div id="pausenzeiten"></div> <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> <script> const dropZone = document.getElementById('dropZone'); const outputBody = document.getElementById('outputBody'); const loadingText = document.getElementById('loadingText'); const excludedStatus = ['K', 'X', 'KU', 'ZA', 'U', 'x', 'PF']; // Liste der auszuschließenden Status // Datei per Drag & Drop hochladen dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleFileSelect, false); function handleDragOver(e) { e.preventDefault(); } function handleFileSelect(e) { e.preventDefault(); const file = e.dataTransfer.files[0]; const reader = new FileReader(); loadingText.style.display = 'block'; // Zeige den Lade-Text an reader.onload = function (e) { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); const sheetName = getSheetName(); // Funktion, um den passenden Tabellennamen zu ermitteln const worksheet = workbook.Sheets[sheetName]; const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); outputBody.innerHTML = ''; for (let i = 5; i < 108; i++) { const name = jsonData[i][1]; const status = jsonData[i][0]; const team = jsonData[i][36]; // Spalte AK const dienstzeiten = getDienstzeiten(jsonData[i]); const bereinigteDienstzeiten = getBereinigteDienstzeit(jsonData[i]); if (name && dienstzeiten && !excludedStatus.includes(status)) { // Überprüfe, ob der Status nicht in der Liste der auszuschließenden Status enthalten ist const row = document.createElement('tr'); const nameCell = document.createElement('td'); const statusCell = document.createElement('td'); const teamCell = document.createElement('td'); const dienstzeitenCell = document.createElement('td'); const bereinigteDienstzeitenCell = document.createElement('td'); nameCell.textContent = name; statusCell.textContent = status; teamCell.textContent = team; dienstzeitenCell.textContent = dienstzeiten; bereinigteDienstzeitenCell.textContent = bereinigteDienstzeiten; row.appendChild(nameCell); row.appendChild(statusCell); row.appendChild(teamCell); row.appendChild(dienstzeitenCell); row.appendChild(bereinigteDienstzeitenCell); outputBody.appendChild(row); } } loadingText.style.display = 'none'; // Verstecke den Lade-Text, nachdem die Daten berechnet wurden }; reader.readAsArrayBuffer(file); } function getSheetName() { const date = new Date(); const day = date.getDate(); const month = date.getMonth() + 1; const year = date.getFullYear(); const sheetName = `${getDayName(date.getDay())}${day}.${month < 10 ? '0' + month : month}.${year}`; return sheetName; } function getDayName(dayIndex) { const days = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']; return days[dayIndex]; } function getDienstzeiten(rowData) { let earliestTime = ''; let latestTime = ''; for (let i = 2; i < rowData.length; i++) { if (rowData[i] === 'T' || rowData[i] === 'M' || rowData[i] === 'R' || rowData[i] === 'W' || rowData[i] === 'E' || rowData[i] === 'H') { const startTime = getTimeFromIndex(i); const endTime = getTimeFromIndex(i + 1); if (!earliestTime) { earliestTime = startTime; } latestTime = endTime; } } if (earliestTime && latestTime) { return `${earliestTime} - ${latestTime}`; } else { return ''; } } function getTimeFromIndex(index) { const hours = Math.floor(index / 2) + 5; const minutes = index % 2 === 0 ? '00' : '30'; return `${hours < 10 ? '0' + hours : hours}:${minutes}`; } function getBereinigteDienstzeit(rowData) { let bereinigteDienstzeit = ''; let startTime = ''; let endTime = ''; for (let i = 2; i < rowData.length - 1; i++) { const currentStatus = rowData[i]; if (currentStatus === 'P' || currentStatus === 'S') { if (startTime && endTime) { if (bereinigteDienstzeit) { bereinigteDienstzeit += ' ; '; } bereinigteDienstzeit += `${startTime} - ${endTime}`; startTime = ''; endTime = ''; } } else if (currentStatus === 'T' || currentStatus === 'M' || currentStatus === 'H' || currentStatus === 'R' || currentStatus === 'W' || currentStatus === 'E') { if (!startTime) { startTime = getTimeFromIndex(i); } if (i + 1 < rowData.length) { endTime = getTimeFromIndex(i + 1); } } } if (startTime && endTime) { if (bereinigteDienstzeit) { bereinigteDienstzeit += ' ; '; } bereinigteDienstzeit += `${startTime} - ${endTime}`; } return bereinigteDienstzeit; } </script> <script> function calculateBreakTimes() { var tableBody = document.getElementById("outputBody"); var rows = tableBody.getElementsByTagName("tr"); var dienstzeiten = {}; // Extrahiere die realen Dienstzeiten für jeden Mitarbeiter for (var i = 0; i < rows.length; i++) { var row = rows[i]; var nameCell = row.cells[0]; var dienstzeitenCell = row.cells[4]; // Verwende den Index 4 für die Spalte "Reale Dienstzeiten" var name = nameCell.innerText; var zeiten = dienstzeitenCell.innerText; dienstzeiten[name] = zeiten; } var gewuenschte_pausendauer = 10; // Gewünschte Pausendauer in Minuten var min_pausenabstand = 40; // Mindestabstand zwischen den Pausen in Minuten var min_pausenstart = 40; // Mindestzeit nach Dienstbeginn für die erste Pause in Minuten var max_mitarbeiter = 7; // Maximale Anzahl von Mitarbeitern zur selben Zeit var pausenzeitenDiv = document.getElementById("pausenzeiten"); pausenzeitenDiv.innerHTML = ""; for (var mitarbeiter in dienstzeiten) { var zeiten = dienstzeiten[mitarbeiter].split(";"); var pausenstart = Infinity; var pausenende = -Infinity; // Finde den frühesten Pausenstart und den spätesten Pausenende for (var i = 0; i < zeiten.length; i++) { var zeit = zeiten[i].trim(); var timeRegex = /(\d{2}):(\d{2}) - (\d{2}):(\d{2})/; var match = zeit.match(timeRegex); if (match) { var stundenStart = parseInt(match[1]); var minutenStart = parseInt(match[2]); var stundenEnde = parseInt(match[3]); var minutenEnde = parseInt(match[4]); var startInMinuten = stundenStart * 60 + minutenStart; var endeInMinuten = stundenEnde * 60 + minutenEnde; pausenstart = Math.min(pausenstart, startInMinuten); pausenende = Math.max(pausenende, endeInMinuten); } } var pausendauer = gewuenschte_pausendauer; var pausestartZeit = pausenstart; // Berechne die Pausenzeiten basierend auf den gewünschten Parametern var pausenzeiten = []; while (pausestartZeit + pausendauer <= pausenende) { pausenzeiten.push({ start: pausestartZeit, ende: pausestartZeit + pausendauer }); pausestartZeit += pausendauer + min_pausenabstand; } // Überprüfe, ob die Bedingungen für Pausen erfüllt sind if (pausestartZeit - pausendauer < pausenende) { pausenzeiten.push({ start: pausestartZeit, ende: pausenende }); } // Überprüfe, ob die Mindestzeit nach Dienstbeginn für die erste Pause erfüllt ist if (pausenzeiten.length > 0 && pausenzeiten[0].start < min_pausenstart) { pausenzeiten.shift(); } // Überprüfe, ob die maximale Anzahl von Mitarbeitern zur gleichen Zeit überschritten wird if (pausenzeiten.length > max_mitarbeiter) { pausenzeiten.splice(max_mitarbeiter); } var pausenzeitenText = ""; for (var j = 0; j < pausenzeiten.length; j++) { var pause = pausenzeiten[j]; var startStunden = Math.floor(pause.start / 60); var startMinuten = pause.start % 60; var endeStunden = Math.floor(pause.ende / 60); var endeMinuten = pause.ende % 60; var pauseText = ("0" + startStunden).slice(-2) + ":" + ("0" + startMinuten).slice(-2) + " - " + ("0" + endeStunden).slice(-2) + ":" + ("0" + endeMinuten).slice(-2); pausenzeitenText += pauseText + "<br>"; } pausenzeitenDiv.innerHTML += "<p><b>" + mitarbeiter + ":</b><br>" + pausenzeitenText + "</p>"; } } </script> </body> </html> [/CODE] [/QUOTE]
Zitate
Authentifizierung
Antworten
Programmierung
JavaScript
Auslesen einer Tabelle und Berechnen von Mitarbeiterpausen
Oben
Unten