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="Sempervivum, post: 14058, member: 3917"] Ich war inzwischen auch nicht untätig und habe einen ersten Versuch unternommen, die Pausenzeiten festzulegen. Zunächst ohne Prüfungen bzgl. der maximalen Anzahl der MA in Pause und den Prozentwert. Und ohne Anzeige, nur mit Ausgabe in der Console. [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>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 }); let bereinigteDienstzeiten = []; 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]); bereinigteDienstzeiten.push(getBereinigteDienstzeit(jsonData[i])); } console.log(bereinigteDienstzeiten); loadingText.style.display = 'none'; // Verstecke den Lade-Text, nachdem die Daten berechnet wurden document.querySelector('button').addEventListener('click', calculateBreakTimes.bind(bereinigteDienstzeiten) ); }; 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 getMinutes(timeStr) { const matches = timeStr.match(/(\d{2}):(\d{2})/); return Number(matches[1]) * 60 + Number(matches[2]); } function getBereinigteDienstzeit(rowData) { let bereinigteDienstzeit = []; let startTime = null; let endTime = null; for (let i = 2; i < rowData.length - 1; i++) { const currentStatus = rowData[i]; if (currentStatus === 'P' || currentStatus === 'S') { if (startTime && endTime) { bereinigteDienstzeit.push({ fromStr: startTime, from: getMinutes(startTime), toStr: endTime, to: getMinutes(endTime) }); startTime = null; endTime = null; } } 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) { bereinigteDienstzeit.push({ fromStr: startTime, from: getMinutes(startTime), toStr: endTime, to: getMinutes(endTime) }); } return bereinigteDienstzeit; } </script> <script> function calculateBreakTimes(event) { const gewuenschtePausendauer = 10; // Gewünschte Pausendauer in Minuten const minPausenabstand = 40; // Mindestabstand zwischen den Pausen in Minuten const minPausenstart = 40; // Mindestzeit nach Dienstbeginn für die erste Pause in Minuten const maxMitarbeiter = 7; // Maximale Anzahl von Mitarbeitern zur selben Zeit let pausenzeiten = this.map((item, idx) => { item.forEach((dienstzeit, idx) => { // Leeres Array mit den Pausenzeiten einfügen dienstzeit.pausenzeiten = []; // Start- und Endezeit für die Pausen festlegen let pausenzeit = dienstzeit.from + minPausenstart; let letztePausenzeit = dienstzeit.to - minPausenabstand - gewuenschtePausendauer; // Solange die Endezeit nicht erreicht ist while (pausenzeit < letztePausenzeit) { // Pause einfügen dienstzeit.pausenzeiten.push(pausenzeit); pausenzeit += (minPausenabstand + gewuenschtePausendauer); } }) return item; }); console.log(pausenzeiten); } </script> </body> </html>[/CODE] [/QUOTE]
Zitate
Authentifizierung
Antworten
Programmierung
JavaScript
Auslesen einer Tabelle und Berechnen von Mitarbeiterpausen
Oben
Unten