Moin zusammen,
ich versuche ein Programm in C# WinForm .NET 4.7.2 zu entwickeln, das basierend auf einer Excel-Tabelle namens "Meine Zeiten" Überstunden und die Anzahl der Tage, die ich durch Überstunden gewonnen habe, berechnet. Leider funktioniert es nicht wie erwartet. Ich habe versucht, meinen Code umzuschreiben, aber ich erhalte eine Fehlermeldung, dass die Zeichenfolge nicht als gültiges DateTime erkannt wird. Das kann aber eigentlich nicht sein, da ich einen Screenshot der Tabelle habe und die Zeiten im Format hh:mm:ss angegeben sind.
Das Programm soll die Daten aus Spalte A und B nehmen, das Datum vergleichen und am Ende anzeigen, wie viele Überstunden insgesamt für diesen Monat vorhanden sind und zusätzlich die Anzahl der Urlaubstage.
Ich habe die Stelle im Code markiert, an der ich die Fehlermeldung erhalte. Vielen Dank für eure Unterstützung.
Viele Grüße,
komp. Quellcode:
Bild von der .xlsx Datei: https://www.webpagescreenshot.info/image-url/h50KEhEhR
ich versuche ein Programm in C# WinForm .NET 4.7.2 zu entwickeln, das basierend auf einer Excel-Tabelle namens "Meine Zeiten" Überstunden und die Anzahl der Tage, die ich durch Überstunden gewonnen habe, berechnet. Leider funktioniert es nicht wie erwartet. Ich habe versucht, meinen Code umzuschreiben, aber ich erhalte eine Fehlermeldung, dass die Zeichenfolge nicht als gültiges DateTime erkannt wird. Das kann aber eigentlich nicht sein, da ich einen Screenshot der Tabelle habe und die Zeiten im Format hh:mm:ss angegeben sind.
Das Programm soll die Daten aus Spalte A und B nehmen, das Datum vergleichen und am Ende anzeigen, wie viele Überstunden insgesamt für diesen Monat vorhanden sind und zusätzlich die Anzahl der Urlaubstage.
Ich habe die Stelle im Code markiert, an der ich die Fehlermeldung erhalte. Vielen Dank für eure Unterstützung.
Viele Grüße,
komp. Quellcode:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Globalization;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using Excel = Microsoft.Office.Interop.Excel;
- using Application = Microsoft.Office.Interop.Excel.Application;
- using DocumentFormat.OpenXml.Packaging;
- using DocumentFormat.OpenXml.Spreadsheet;
- using ExcelDataReader;
- namespace LogSaver
- {
- public partial class Form3 : Form
- {
- private string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Meine Zeiten", "Meine Zeiten.xlsx");
- public Form3()
- {
- InitializeComponent();
- LoadData();
- }
- private void LoadData()
- {
- List<TimeRecord> timeRecords = new List<TimeRecord>();
- using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false))
- {
- WorksheetPart worksheetPart = doc.WorkbookPart.WorksheetParts.First();
- CultureInfo provider = CultureInfo.InvariantCulture;
- foreach (Row row in worksheetPart.Worksheet.Descendants<Row>())
- {
- if (row.RowIndex > 1)
- {
- TimeRecord record = new TimeRecord();
- Cell startCell = row.Descendants<Cell>().ElementAt(0); // A column
- Cell endCell = row.Descendants<Cell>().ElementAt(1); // B column
- Cell dateCell = row.Descendants<Cell>().ElementAt(2); // C column
- string startCellVal = startCell.CellValue.Text;
- string endCellVal = endCell.CellValue.Text;
- string dateCellVal = dateCell.CellValue.Text;
- record.StartTime = DateTime.ParseExact(startCellVal, "HH:mm:ss", provider); // Hier bekomme ich das Problem: System.FormatException: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."[color=#FF0000][u][b][/b][/u][/color]
- record.EndTime = DateTime.ParseExact(endCellVal, "HH:mm:ss", provider);
- record.Date = DateTime.ParseExact(dateCellVal, "dd.MM.yyyy", provider);
- timeRecords.Add(record);
- }
- }
- }
- UpdateLabels(timeRecords);
- }
- private void UpdateLabels(List<TimeRecord> records)
- {
- double totalOvertime = 0;
- double currentMonthOvertime = 0;
- foreach (var record in records)
- {
- double dailyHours = (record.EndTime - record.StartTime).TotalHours;
- totalOvertime += dailyHours - 8;
- if (record.Date.Month == DateTime.Now.Month && record.Date.Year == DateTime.Now.Year)
- currentMonthOvertime += dailyHours - 8;
- }
- überstundenlbl.Text = $"Überstunden total: {totalOvertime} Stunden";
- überstundenaktuellmonatlbl.Text = $"Überstunden diesen Monat: {currentMonthOvertime} Stunden";
- double holidayDays = totalOvertime / 8;
- stundeninurlaubstagelbl.Text = $"Urlaubstage durch Überstunden: {holidayDays} Tage";
- }
- public class TimeRecord
- {
- public DateTime StartTime { get; set; }
- public DateTime EndTime { get; set; }
- public DateTime Date { get; set; }
- }
- private void Form3_Load(object sender, EventArgs e)
- {
- }
- }
- }
Bild von der .xlsx Datei: https://www.webpagescreenshot.info/image-url/h50KEhEhR