Java-XSSFBook: zwei Sheets mergen

Adriano10

Bekanntes Mitglied
Java:
 static String dirPath = "C:\a\\Test\\Tes\\";
    static String path = "C:\\Test\\ - Kopie.xlsx";

    public static void main(String[] args) throws IOException, URISyntaxException {
        mergeSheets();
    }
    static void mergeSheets() throws IOException, URISyntaxException {
        List<Sheet> list;
        WorkBookClass workBookClass = new WorkBookClass();

        final String fileName = "test.xlsx";

        String path1 = "C:\\\Test\\Tes\\" + workBookClass.createFile(dirPath, fileName);
        FileOutputStream outputStream = new FileOutputStream(path1);

        Iterator<Sheet> sheets = workBookClass.inputWorkbook(path);
        list = workBookClass.getList(sheets);

        Workbook workbookOutput = workBookClass.outputWorkbook();
        XSSFSheet outputSheet = (XSSFSheet) workbookOutput.createSheet("Test");

        //Create Cell and Row
        XSSFCell cell = null;
        XSSFRow row = null;
        int temp = 0;
        workBookClass.setColumnWidth(outputSheet);
        int count = 0;
        for (int i = 0; i < list.size(); i++) {
            count += list.get(i).getPhysicalNumberOfRows();
        }

        for (int i = 0; i < list.size(); i++) {
            for (int k = 0; k <= count; k++) {
                row = outputSheet.createRow(k);
                for (int j = 0; j < 14; j++) {
                    cell = row.createCell(j);
                    if (list.get(0).getRow(k) == null) {
                        cell.setCellValue("");
                    } else {
                        cell.setCellValue(workBookClass.getDataFormatter().formatCellValue(list.get(i).getRow(k).getCell(j)));
                    }
                }
            }
        }
        workbookOutput.write(outputStream);
    }
}

Moin,

in einer Datei gibt es mehrere Sheets, ich möchte alle auf einem Blatt schreiben. Kann jemand mir bitte helfen.

Vielen Dank
 
Evtl. hilft dir diese SO Frage mit Antworten:

Da werden die Sheets komplett kopiert.

Ansonsten wäre es gut, wenn Du mehr Informationen liefern würdest: Was für Probleme hast Du denn? Woran hängt Dein Code? Zumindest ich habe keine Lust, den jetzt durchzusehen um zu überlegen, wo überall ein Problem sein könnte - nur weil einfach kaum Informationen vorliegen.
Was etas auffällt ist, dass Du Zeilen nicht immer Anhängst sondern immer wieder ab Zeile 0 des neuen Sheets einfügst. Aber so ganz habe ich auch noch nicht verstanden, was genau Du erreichen willst und was Du am Ende erwartest,
 
Evtl. hilft dir diese SO Frage mit Antworten:

Da werden die Sheets komplett kopiert.

Ansonsten wäre es gut, wenn Du mehr Informationen liefern würdest: Was für Probleme hast Du denn? Woran hängt Dein Code? Zumindest ich habe keine Lust, den jetzt durchzusehen um zu überlegen, wo überall ein Problem sein könnte - nur weil einfach kaum Informationen vorliegen.
Was etas auffällt ist, dass Du Zeilen nicht immer Anhängst sondern immer wieder ab Zeile 0 des neuen Sheets einfügst. Aber so ganz habe ich auch noch nicht verstanden, was genau Du erreichen willst und was Du am Ende erwartest
Es werden nur die Informationen aus dem letzten Blatt gespeichert, wahrscheinlich die vorherigen werden immer überschrieben.
Java:
for (int i = 0; i < list.size(); i++) {
            for (int k = 0; k <= count; k++) {
                row = outputSheet.createRow(k);
                for (int j = 0; j < 14; j++) {
                    cell = row.createCell(j);
                    if (list.get(0).getRow(k) == null) {
                        cell.setCellValue("");
                    } else {
                        cell.setCellValue(workBookClass.getDataFormatter().formatCellValue(list.get(i).getRow(k).getCell(j)));
                    }
                }
            }

hier row = outputSheet.createRow(k); nach jedem durchlauf wird erneut erstellt, ich glaube, das Problem liegt daran.


Vielen Dank für die Rückmeldung
 
for (int k = 0; k <= count; k++) { row = outputSheet.createRow(k);
Du fügst immer wieder ab Zeile 0 ein!

Du musst hier natürlich fortlaufend zählen, also z.B. einen Zähler "currentLine" den Du dann in der Schleife erst erhöhst und dann createrow(currentLine) machst,

EDIT: Das ist zumindest etwas, das ir aufgefallen ist und eine kurze Idee, wie es gelöst werden könnte.
 
Du fügst immer wieder ab Zeile 0 ein!

Du musst hier natürlich fortlaufend zählen, also z.B. einen Zähler "currentLine" den Du dann in der Schleife erst erhöhst und dann createrow(currentLine) machst,

EDIT: Das ist zumindest etwas, das ir aufgefallen ist und eine kurze Idee, wie es gelöst werden könnte.
Java:
 for (int i = 0; i < list.size(); i++) {
            for (int k = 0; k <= count; k++) {
                currentLine++;
                row = outputSheet.createRow(currentLine);
                for (int j = 0; j < 14; j++) {
                    cell = row.createCell(j);
                    if (list.get(0).getRow(k) == null) {
                        cell.setCellValue("");
                    } else {
                        cell.setCellValue(workBookClass.getDataFormatter().formatCellValue(list.get(i).getRow(k).getCell(j)));
                    }
                }
            }
        }

ich danke für guten Hinweis.. Ich habe so gemacht, aber irgendwie ist unschön, Zwischen Zellen gibt es viele freien Plätzen... Wenn Sie mir genau sagen könnten, wie ich das am besten machen kann, wäre ich sehr geholfen, ich bitte Sie.

Vielen Dank im Voraus
 
Evtl. hilft dir diese SO Frage mit Antworten:

Da werden die Sheets komplett kopiert.

Ansonsten wäre es gut, wenn Du mehr Informationen liefern würdest: Was für Probleme hast Du denn? Woran hängt Dein Code? Zumindest ich habe keine Lust, den jetzt durchzusehen um zu überlegen, wo überall ein Problem sein könnte - nur weil einfach kaum Informationen vorliegen.
Was etas auffällt ist, dass Du Zeilen nicht immer Anhängst sondern immer wieder ab Zeile 0 des neuen Sheets einfügst. Aber so ganz habe ich auch noch nicht verstanden, was genau Du erreichen willst und was Du am Ende erwartest,
Vielen Dank, wie immer bekomme ich von Ihnen sehr hilfreichen Hinweisen.

Ich habe das so gelöst
Java:
  int currentLine = 1;
        for (int i = 0; i < list.size(); i++) {
            int temp = 0;
            currentLine--;
            if (i > 0) {
                temp = 1;
            }
            for (int k = temp; k <= list.get(i).getPhysicalNumberOfRows(); k++, currentLine++) {
                row = outputSheet.createRow(currentLine);
                for (int j = 0; j < 14; j++) {
                    cell = row.createCell(j);
                    if (list.get(k).getRow(k) == null) {
                        cell.setCellValue("");
                    } else {
                        cell.setCellValue(workBookClass.getDataFormatter().formatCellValue(list.get(i).getRow(k).getCell(j)));
                    }
                }
            }
        }
 

Zurück
Oben