package com.tesr;
import org.apache.poi.ss.usermodel.*;
import javax.swing.*;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class Main {
static String PfadDerTemplateDatei = "/Users/michel/Downloads/ProductionSheet Template.xlsx";
static String PfadDerAusgangsdatei = "/Users/michel/Downloads/ProductionSheet Eingabe.xlsx";
static String PfadDerEndDatei = "/Users/michel/Downloads/ProductionSheet.xlsx";
public static void main(String[] args) {
try {
// Variables
//Optimizer myBasicOptimizer = new Optimizer();
System.out.println("Optimizer instantiated...");
// Select Excel File which the user wants to investigate regarding machine optimization potential
// hier wieder ändern String excelFileName = selectExcelFile();
//hier wieder ändern System.out.println("File via openFileDialog selected: " + excelFileName);
// Read out data from excel sheet via Apache POI
// hier wieder ändern readExcelFileData(excelFileName);
Sheet sheet = readExcelFileData(PfadDerAusgangsdatei);
List<Row> rows = sortExcelFileData(sheet, 19);
// Optimize machine planning and scheduling
//myBasicOptimizer.process();
// Write optimized data back to excel sheet
writeExcelFileData(PfadDerEndDatei, rows, 1);
System.out.println("Optimization done.");
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
//Funktion zum Sortieren der Exceldatei nach der 19 Spalte (Farben)
private static List<Row> sortExcelFileData(Sheet sheet, int sortColumn) {
//Einlesen aller Zeilen in ein Array
List<Row> rows = new ArrayList<>();
try {
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
rows.add(sheet.getRow(i));
}
//konkretes Sortieren der Spalte 19 nach Buchstabenwerten (Alphabet)
rows.sort((r1, r2) -> r1.getCell(sortColumn).getStringCellValue().compareTo(r2.getCell(sortColumn).getStringCellValue()));
}
// Fehler beim Einlesen/Sortieren des Arrays wird ausgegeben
catch (Exception exp) {
System.out.println("Error in writeExcelFileData()");
System.out.println("Error details: " + exp.toString());
}
return rows;
}
//Funktion zum Einlesen der oben ausgewählten Exceldatei
private static Sheet readExcelFileData(String fileName) {
Sheet sheet = null;
try {
Workbook workbook = WorkbookFactory.create(new File(fileName));
sheet = workbook.getSheetAt(1);
//Fehler beim Einlesen der Exceldatei wird ausgegeben
} catch (Exception exReadExcelFile) {
System.out.println("Error in readExcelFileData()");
System.out.println("Error details: " + exReadExcelFile.toString());
}
return sheet;
}
//Funktion zum Ausfüllen der leeren Exceltemplatedatei
private static void writeExcelFileData(String filename, List<Row> rows, int startRow) {
try {
double Kabine = 0;
int c = 1;
int h = 0;
Workbook workbook = WorkbookFactory.create(new File(PfadDerTemplateDatei));
Sheet sheet = workbook.getSheet("Input");
//Durchläuft alle Zeilen und ordnet Farbe Kabinezuweisung zu
Sheet sheet0 = workbook.getSheet("Metadaten");
Row row0 = sheet0.getRow(2);
Cell cell0 = row0.getCell(7);
cell0.setCellValue(120);
for (int i = 0; i < rows.size(); i++) {
double Kabinenfläche = rows.get(i).getCell(5).getNumericCellValue();
Kabinenfläche = Kabinenfläche * 5;
rows.get(i).createCell(21).setCellValue(Kabinenfläche);
rows.get(i).createCell(0).setCellValue(i + 1);
String Farbe = rows.get(i).getCell(19).getStringCellValue();
//Für Fall Blau: Kabine 1 und Zuweisung der kombinierten Auftragsnummer und Auftragsanzahl
if (Farbe.equals("Blau")) {
rows.get(i).createCell(3).setCellValue("Paint_Shop_1");
Kabine = Kabine + rows.get(i).getCell(14).getNumericCellValue();
if (Kabine < 30) {
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
}
if (Kabine >= 30) {
c++;
/*for (int hauke = h; hauke >= 0; hauke--) {
rows.get(i - hauke+1).getCell(2).setCellValue(h);
}*/
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
Kabine = rows.get(i).getCell(14).getNumericCellValue();
}
}
//Für Fall Gelb: Kabine 2 und Zuweisung der kombinierten Auftragsnummer und Auftragsanzahl
else if (Farbe.equals("Gelb")) {
rows.get(i).getCell(3).setCellValue("Paint_Shop_2");
Kabine = Kabine + rows.get(i).getCell(14).getNumericCellValue();
if (Kabine < 30) {
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
}
if (Kabine >= 30) {
h = 1;
c++;
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
Kabine = rows.get(i).getCell(14).getNumericCellValue();
}
}
//Für Fall Grün: Kabine 1 und Zuweisung der kombinierten Auftragsnummer und Auftragsanzahl
else if (Farbe.equals("Grün")) {
rows.get(i).getCell(3).setCellValue("Paint_Shop_3");
Kabine = Kabine + rows.get(i).getCell(14).getNumericCellValue();
if (Kabine < 30) {
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
}
if (Kabine >= 30) {
h = 1;
c++;
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
Kabine = rows.get(i).getCell(14).getNumericCellValue();
}
}
//Für Fall Rot: Kabine 2 und Zuweisung der kombinierten Auftragsnummer und Auftragsanzahl
else if (Farbe.equals("Rot")) {
rows.get(i).getCell(3).setCellValue("Paint_Shop_1");
Kabine = Kabine + rows.get(i).getCell(14).getNumericCellValue();
if (Kabine < 30) {
rows.get(i).createCell(1).setCellValue(c);
//rows.get(i).getCell(2).setCellValue(h);
h++;
}
if (Kabine >= 30) {
h = 1;
c++;
rows.get(i).createCell(1).setCellValue(c);
h++;
Kabine = rows.get(i).getCell(14).getNumericCellValue();
}
}
}
ArrayList<Double> KombAuftragsgroeße = new ArrayList<Double>();
ArrayList<Integer> Auftragsanzahl = new ArrayList<Integer>();
double KombAuftragsnummerVergleich = 1;
double Zellenwert_Kombauftragsfläche1 = 0;
int hochzaehlen = 0;
for (int xx = 0; xx < rows.size(); ) {
double Zellenwert_KombAuftragsnummer = rows.get(xx).getCell(1).getNumericCellValue();
double Zellenwert_KombAuftragsflaeche2 = rows.get(xx).getCell(5).getNumericCellValue();
if (Zellenwert_KombAuftragsnummer == KombAuftragsnummerVergleich) {
xx++;
hochzaehlen++;
Zellenwert_Kombauftragsfläche1 = Zellenwert_Kombauftragsfläche1 + Zellenwert_KombAuftragsflaeche2;
} else {
KombAuftragsnummerVergleich++;
Auftragsanzahl.add(hochzaehlen);
KombAuftragsgroeße.add(Zellenwert_Kombauftragsfläche1);
Zellenwert_Kombauftragsfläche1 = 0;
hochzaehlen = 0;
}
}
int Reihe = 1;
for (int ij = 0; ij < Auftragsanzahl.size(); ij++) {
double Arraystellenwert_Auftraege = Auftragsanzahl.get(ij);
double Arraystellenwert_Flaeche = KombAuftragsgroeße.get(ij);
//System.out.println(Arraystellenwert_Auftraege);
for (int ijk = 1; ijk <= Arraystellenwert_Auftraege; ijk++) {
rows.get(Reihe).createCell(2).setCellValue(Arraystellenwert_Auftraege);
Reihe++;
rows.get(Reihe).createCell(5).setCellValue(Arraystellenwert_Flaeche);
System.out.println(Arraystellenwert_Auftraege);
System.out.println(Arraystellenwert_Flaeche);
}
}
//Korrekte Übertragung der Ausgangsdatei in die neue Exceldatei
for (int i = 0; i < rows.size(); i++) {
Row row = sheet.createRow(i + startRow);
for (int x = 0; x < rows.get(i).getPhysicalNumberOfCells(); x++) {
//Fall: Zelle ist eine Zahl
if (rows.get(i).getCell(x).getCellType() == CellType.NUMERIC) {
row.createCell(x).setCellValue(rows.get(i).getCell(x).getNumericCellValue());
}
//Fall: Zelle ist ein Buchstabe
else if (rows.get(i).getCell(x).getCellType() == CellType.STRING) {
row.createCell(x).setCellValue(rows.get(i).getCell(x).getStringCellValue());
}
//Fall: Zelle ist eine Formel
else if (rows.get(i).getCell(x).getCellType() == CellType.FORMULA) {
String cellFormula = rows.get(i).getCell(x).getCellFormula();
String[] formulaSplitted = cellFormula.split("\\*");
for (int y = 0; y < formulaSplitted.length; y++) {
if (!formulaSplitted[y].matches("^[0-9]*$")) {
formulaSplitted[y] = formulaSplitted[y].replace(String.valueOf(rows.get(i).getRowNum() + 1), String.valueOf(i + startRow + 1));
}
}
row.createCell(x).setCellFormula(String.join("*", formulaSplitted));
} else {
System.out.println(rows.get(i).getCell(x).getCellType());
}
}
}
System.out.println("Called writeExcelFileData()");
try (FileOutputStream outputStream = new FileOutputStream(filename)) {
workbook.write(outputStream);
}
} catch (Exception exWriteExcelFile) {
System.out.println("Error in writeExcelFileData()");
System.out.println("Error details: " + exWriteExcelFile.toString());
}
}
}