/// <summary> /// Diese Methode erstellt aus den Turnierdaten eine Excel-Datei /// </summary> public void Export(SpreadsheetDocument document, SheetData sheetData, WorksheetPart worksheetPart) { int rowsToCreate = RowsCounter.CalculateRowsToCreate(Rounds); RowsCreator.CreateRows(sheetData, rowsToCreate); EvaluateRowData(worksheetPart); // Datei Speichern document.WorkbookPart.Workbook.Save(); }
public void Export(SpreadsheetDocument document, SheetData sheetData, WorksheetPart worksheetPart) { if (Groups.Count == 0) { return; } int rowsToCreate = RowsCounter.CalculateRowsToCreate(AllMatches.Count, Groups); RowsCreator.CreateRows(sheetData, rowsToCreate); int matchesInRow = 1; int matchRowNumber = 2; for (int i = 0; i < AllMatches.Count; i++) { var match = AllMatches[i]; var matchPoints = Adapters.MatchAdapter.GetMatchInformationForExcelExport(match); var p1Cell = CellFinder.GetCell(worksheetPart.Worksheet, matchesInRow, matchRowNumber); p1Cell.CellValue = new CellValue(match.PlayerOne); p1Cell.DataType = new EnumValue <CellValues>(CellValues.String); var p1P = CellFinder.GetCell(worksheetPart.Worksheet, matchesInRow + 1, matchRowNumber); p1P.CellValue = new CellValue(matchPoints.Item1); p1P.DataType = new EnumValue <CellValues>(CellValues.Number); var p2Cell = CellFinder.GetCell(worksheetPart.Worksheet, matchesInRow, matchRowNumber + 1); p2Cell.CellValue = new CellValue(match.PlayerTwo); p2Cell.DataType = new EnumValue <CellValues>(CellValues.String); var p2P = CellFinder.GetCell(worksheetPart.Worksheet, matchesInRow + 1, matchRowNumber + 1); p2P.CellValue = new CellValue(matchPoints.Item2); p2P.DataType = new EnumValue <CellValues>(CellValues.Number); if (matchesInRow < 10) { matchesInRow += 3; } else { matchesInRow = 1; matchRowNumber += 3; } } matchRowNumber += 3; foreach (var group in Groups) { int columnIndex = 1; var gCell = CellFinder.GetCell(worksheetPart.Worksheet, columnIndex, matchRowNumber); string gName = $"Group {group.Key}"; gCell.CellValue = new CellValue(gName); gCell.DataType = new EnumValue <CellValues>(CellValues.String); foreach (var player in group.Value) { matchRowNumber++; var pCell = CellFinder.GetCell(worksheetPart.Worksheet, columnIndex, matchRowNumber); pCell.CellValue = new CellValue(player.PlayerName.Title); pCell.DataType = new EnumValue <CellValues>(CellValues.String); var dCell = CellFinder.GetCell(worksheetPart.Worksheet, columnIndex + 1, matchRowNumber); dCell.CellValue = new CellValue(player.GoalDifference); dCell.DataType = new EnumValue <CellValues>(CellValues.Number); var pointsCell = CellFinder.GetCell(worksheetPart.Worksheet, columnIndex + 2, matchRowNumber); pointsCell.CellValue = new CellValue(player.Points); pointsCell.DataType = new EnumValue <CellValues>(CellValues.Number); } matchRowNumber += 2; } // Datei Speichern document.WorkbookPart.Workbook.Save(); }
public void Export(SpreadsheetDocument document, SheetData sheetData, WorksheetPart worksheetPart) { RowsCreator.CreateRows(sheetData, 100); // Variablen für die Startpositionen des ersten Spiels der jeweiligen Runde // nextStartPosition ist dafür da, sich die Position zu merken, wann das erste "VS" // der vorigen Runde gesetzt wird, da dort das erste Spiel der nächsten Runde beginnt, // damit die Excel-Datei am Ende wie ein richtiger Turnierbaum aussieht int startPosition = 3; int?nextStartposition = null; int?firstLoserStartPosition = null; // Nun jede Runde der KO-Runde durchgehen for (int i = 0; i <= WinnerRounds.Count; i++) { // Zelle ermittelt, in die der Rundenname geschrieben wird Cell cell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, 2); string text = $"Round {i + 1}"; if (i == WinnerRounds.Count) { text = "Winner"; } // Rundenname in die Zelle schreiben cell.CellValue = new CellValue(text); cell.DataType = new EnumValue <CellValues>(CellValues.String); // Da die for-Schleife ein Mal öfter als die eigentliche Rundenanzahl läuft // gibt es hier eine Überprüfung, da es sonst zu einem Absturz kommen würde // Die for-Schleife läuft so oft, da am Ende ja noch der Gewinner in die Datei // geschrieben werden muss. if (i < WinnerRounds.Count) { // Jedes Spiel jeder Runde durchgehen foreach (var match in WinnerRounds[i].Matches) { // Daten des Spiels in die Zellen schreiben // Erster Spieler des Spiels var firstPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition); firstPlayerCell.CellValue = new CellValue(match.PlayerOne); firstPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); // VS var vsPosition = startPosition + Convert.ToInt32(Math.Pow(2, i)); if (!nextStartposition.HasValue) { nextStartposition = vsPosition; } var vsCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, vsPosition); vsCell.CellValue = new CellValue("vs"); vsCell.DataType = new EnumValue <CellValues>(CellValues.String); // Zweiter Spieler des Spiels var secondPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition + 2 * Convert.ToInt32(Math.Pow(2, i))); secondPlayerCell.CellValue = new CellValue(match.PlayerTwo); secondPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); // Nun wird die Startposition für das nächste Spiel berechnet startPosition = startPosition + Convert.ToInt32(Math.Pow(2, i + 2)); } if (!firstLoserStartPosition.HasValue) { var position = startPosition + 2 * Convert.ToInt32(Math.Pow(2, i)); firstLoserStartPosition = position + 2; } } else { // Gewinner eintragen var match = WinnerRounds[i - 1].Matches[0]; var winner = match.FirstPlayerWin ? match.PlayerOne : match.PlayerTwo; var winnerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition); winnerCell.CellValue = new CellValue(winner); winnerCell.DataType = new EnumValue <CellValues>(CellValues.String); } if (nextStartposition.HasValue) { // Wenn die nextStartPosition-Variable nun gesetzt ist, dann wird startPosition // mit dem gesetzten Wert überschrieben, sodass die nächste Runde an dieser Stelle // weitermachen kann. startPosition = nextStartposition.Value; nextStartposition = null; } } nextStartposition = null; startPosition = firstLoserStartPosition.Value; int?firstFinalPosition = null; for (int i = 0; i <= LoserRounds.Count; i++) { // Da die for-Schleife ein Mal öfter als die eigentliche Rundenanzahl läuft // gibt es hier eine Überprüfung, da es sonst zu einem Absturz kommen würde // Die for-Schleife läuft so oft, da am Ende ja noch der Gewinner in die Datei // geschrieben werden muss. if (i < LoserRounds.Count) { // Jedes Spiel jeder Runde durchgehen foreach (var match in LoserRounds[i].Matches) { // Daten des Spiels in die Zellen schreiben // Erster Spieler des Spiels var firstPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition); firstPlayerCell.CellValue = new CellValue(match.PlayerOne); firstPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); // VS var vsPosition = startPosition + Convert.ToInt32(Math.Pow(2, i)); if (!nextStartposition.HasValue) { nextStartposition = vsPosition; } var vsCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, vsPosition); vsCell.CellValue = new CellValue("vs"); vsCell.DataType = new EnumValue <CellValues>(CellValues.String); // Zweiter Spieler des Spiels var secondPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition + 2 * Convert.ToInt32(Math.Pow(2, i))); secondPlayerCell.CellValue = new CellValue(match.PlayerTwo); secondPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); var position = 2 + startPosition + 2 * Convert.ToInt32(Math.Pow(2, i)); if (!firstFinalPosition.HasValue || position > firstFinalPosition.Value) { firstFinalPosition = position; } // Nun wird die Startposition für das nächste Spiel berechnet startPosition = startPosition + Convert.ToInt32(Math.Pow(2, i + 2)); } } else { // Gewinner eintragen var match = LoserRounds[i - 1].Matches[0]; var winner = match.FirstPlayerWin ? match.PlayerOne : match.PlayerTwo; var winnerCell = CellFinder.GetCell(worksheetPart.Worksheet, i + 1, startPosition); winnerCell.CellValue = new CellValue(winner); winnerCell.DataType = new EnumValue <CellValues>(CellValues.String); } if (nextStartposition.HasValue) { // Wenn die nextStartPosition-Variable nun gesetzt ist, dann wird startPosition // mit dem gesetzten Wert überschrieben, sodass die nächste Runde an dieser Stelle // weitermachen kann. startPosition = nextStartposition.Value; nextStartposition = null; } } nextStartposition = null; startPosition = firstFinalPosition.Value; Cell finalCell = CellFinder.GetCell(worksheetPart.Worksheet, 1, startPosition); finalCell.CellValue = new CellValue("Finals"); finalCell.DataType = new EnumValue <CellValues>(CellValues.String); startPosition++; foreach (var final in FinalMatches) { // Daten des Spiels in die Zellen schreiben // Erster Spieler des Spiels var firstPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, 1, startPosition); firstPlayerCell.CellValue = new CellValue(final.PlayerOne.ToString()); firstPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); // VS var vsPosition = startPosition + 1; if (!nextStartposition.HasValue) { nextStartposition = vsPosition; } var vsCell = CellFinder.GetCell(worksheetPart.Worksheet, 1, vsPosition); vsCell.CellValue = new CellValue("vs"); vsCell.DataType = new EnumValue <CellValues>(CellValues.String); // Zweiter Spieler des Spiels var secondPlayerCell = CellFinder.GetCell(worksheetPart.Worksheet, 1, startPosition + 2); secondPlayerCell.CellValue = new CellValue(final.PlayerTwo.ToString()); secondPlayerCell.DataType = new EnumValue <CellValues>(CellValues.String); var winnerCell = CellFinder.GetCell(worksheetPart.Worksheet, 2, vsPosition); var winner = final.FirstPlayerWin ? final.PlayerOne.ToString() : final.PlayerTwo.ToString(); winnerCell.CellValue = new CellValue(winner); winnerCell.DataType = new EnumValue <CellValues>(CellValues.String); startPosition += 4; } // Datei Speichern document.WorkbookPart.Workbook.Save(); }