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: 14059, member: 4798"] Vielen Dank für die Mühe! Das funktioniert schonmal sehr gut. an zwei Problemen hänge ich jedoch noch: 1. Es wird "Mitarbeiter 1", "Mitarbeiter 2" usw. angezeigt, statt dem tatsächlichen Namen. Ich hab eine neue Dummy Datei angefügt, mit Beispielnamen. 2. Mitarbeiter mit einem Status ('K', 'X', 'KU', 'ZA', 'U', 'x', 'PF) werden in der Pausenberechnung angezeigt. ich hab schon einiges versucht, um diese Probleme zu beheben, bin aber leider gescheitert. Ich hab eine Ausgabe eingefügt, um die Pausen nicht nur in der Console anzuzeigen und ein paar Änderungen an den Grundeinstellungen vorgenommen: [CODE=html]<!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 getRandomValue() { const values = [40, 50]; const randomIndex = Math.floor(Math.random() * values.length); return values[randomIndex]; } function calculateBreakTimes(event) { const gewuenschtePausendauer = 10; // Gewünschte Pausendauer in Minuten const minPausenabstand = getRandomValue(); // 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; // Solange die Endezeit nicht erreicht ist while (pausenzeit <= letztePausenzeit) { // Pause einfügen dienstzeit.pausenzeiten.push(pausenzeit); pausenzeit += (minPausenabstand + gewuenschtePausendauer); } }) return item; }); // Den Inhalt des 'pausenzeiten'-Arrays in das 'pausenzeiten'-<div> einfügen const pausenzeitenDiv = document.getElementById('pausenzeiten'); pausenzeitenDiv.innerHTML = formatierePausenzeiten(pausenzeiten); } function formatierePausenzeiten(pausenzeiten) { let formattedPausenzeiten = ''; pausenzeiten.forEach((item, idx) => { const mitarbeiterPausen = item.filter(dienstzeit => dienstzeit.pausenzeiten.length > 0); if (mitarbeiterPausen.length > 0) { formattedPausenzeiten += `<p><strong>Mitarbeiter ${idx + 1}:</strong></p>`; mitarbeiterPausen.forEach(dienstzeit => { const pausenZeiten = dienstzeit.pausenzeiten.map(pausenzeit => formatiereZeit(pausenzeit)); formattedPausenzeiten += `<p>Pausenzeiten: ${pausenZeiten.join(', ')}</p>`; }); } }); return formattedPausenzeiten; } function formatiereZeit(zeit) { const stunden = Math.floor(zeit / 60); const minuten = zeit % 60; return `${padLeadingZero(stunden)}:${padLeadingZero(minuten)}`; } function padLeadingZero(num) { return num.toString().padStart(2, '0'); } </script> </body>[/CODE] [/QUOTE]
Zitate
Authentifizierung
Antworten
Programmierung
JavaScript
Auslesen einer Tabelle und Berechnen von Mitarbeiterpausen
Oben
Unten