Ankündigung

Einklappen
Keine Ankündigung bisher.

Excel Import

Einklappen
X

Excel Import

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • Excel Import

    Hallo zusammen,
    gewünscht ist ein Excel Import um mehrere Daten gleichzeitig einzufügen.

    Da die Datenfelder oft verknüpft sind, sollen die Tabellen nicht mit den IDs der Referenzen gefüllt werden.

    Deshalb möchte ich die Datentransfer Funktionalität per Groovy nutzen.

    Allerdings stoße ich da auf ein paar Probleme.

    1. Die Datei muss fest auf dem Server liegen. Die Datei muss vorher erst auf ein Laufwerk überschrieben werden damit der Import klappt.
    2. Der Sample Code wirft bereits Probleme. java.lang.NumberFormatException.forInputString

    Code:
    g_destination.setValue("STR_NAME", g_source.getValue("test"))
    Genutzt wird die Methode getValue. Der Wert in der Excel Tabelle ist ein String. Die Felder habe ich nochmal extra auf Text formatiert, trotzdem geht er von einem Zahlenwert aus


    Das Dateiformat ist ods und nicht xlsx. Es wird lediglich in Excel bearbeitet.



  • #2
    Also ich denke ein komplett eigen geschriebener Import wäre am besten.

    Hat jemand von euch schon Apache POI genutzt? So wie es scheint ist diese Bibliothek ja schon in Intrexx vorhanden.

    Momentan lese ich eine Excel Datei aus, welche an einem Festen Ort auf dem Server liegt. Diese wird Zeile für Zeile in einem Record gespeichert und entsprechende Fremdschlüssel anhand der eingetragenen Werte gesetzt. Danach wird der Datensatz in die DB reingeschrieben.

    Wie kann ich diesen Fixen Ort der Excel Tabelle durch eine hochgeladene Datei ersetzten? Also das der Endbenutzer einen Dateiupload macht und der Import mit dieser Datei durchgeführt wird.

    ---

    Zusätzliches Problem:
    Da ich Fremdschlüssel suchen und einsetzen muss kann es passieren, dass bei einer Falscheingabe kein Ergebnis geliefert wird.
    Ich würde gerne nach Prozessablauf die jeweilige Person benachrichtigen ob der Prozess erfolgreich war oder welche Datensätze nicht übernommen wurden.
    Wenn das Event per Button getriggert wird, dann läd keine neue Seite, bis der Prozess abgeschlossen wurde. Hier möchte ich nach Abschluss gerne eine Rückmeldung geben. wie lässt sich so etwas umsetzen?

    Kommentar


    • #3
      Zum Import aus hochgeladener Excel gibt es einen Werkstattbeitrag:

      http://up-download.de/up/docs/werkstatt/de/intrexx-werkstatt-import-von-daten-aus-hochgeladener-excel-datei.pdf

      Ist zwar offiziell "veraltet" hilft vielleicht aber trotzdem.

      Kommentar


      • #4
        Ahh danke. Jetzt habe ich das alles schon selber gemacht..

        Allerdings zum Iterator: Er überspringt leere Zellen, was zu Problemen führen kann.
        Falls das bei jemandem passieren sollte einfach bei erster Spalte anfangen, letzte beschriebene Spalte ermitteln und dann for-Schleife.

        Bei der Methode getCell die Konstante CREATE_NULL_AS_BLANK einfügen.

        Code:
        try {
            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME))
            Workbook workbook = new XSSFWorkbook(excelFile)
            Sheet sheet = workbook.getSheetAt(0)
            int rowCount = 1
            Row currentRow = sheet.getRow(rowCount++)
        
            while(currentRow != null){
                for (int colNum = 0; colNum < currentRow.getLastCellNum(); colNum++) {
        
                    Cell cell = currentRow.getCell(colNum, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                    switch (cell.getCellTypeEnum()) {
        
                        case "STRING":
                            list.add(cell.getStringCellValue());
                            break;
                        case "BOOLEAN":
                            list.add(cell.getBooleanCellValue());
                            break;
                        case "NUMERIC":
                           list.add(Math.round(cell.getNumericCellValue()));
                            break;
                        case "BLANK":
                            list.add("-");
                           break;
                    }
                }
                    list = debugLog(list)
                    currentRow = sheet.getRow(rowCount++)
            }
        } catch (FileNotFoundException e){
            e.printStackTrace()
        }catch (IOException e){
            e.printStackTrace()
        }

        Kommentar

        Lädt...
        X