Newer
Older
ExcelImport / src / com / tesr / Main.java
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());
        }
    }
}