JavaFX JavaFX Chart in Apache Poi Excel Datei

lam_tr

Top Contributor
Hallo zusammen

Ich will aus einer BarChart eine Image erstellen und die direkt in eine Excel includen. Ich habe unten ein Code Beispiel, bekomme es nicht zum Laufen. kann mir mal jemand sagen was ich da falsch gemacht habe?

Code:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.SnapshotParameters;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.image.WritableImage;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;

public class BarChartSample extends Application {
    final static String austria = "Austria";

    final static String brazil = "Brazil";

    final static String france = "France";

    final static String italy = "Italy";

    final static String usa = "USA";

    @Override
    public void start(Stage stage) {
        stage.setTitle("Bar Chart Sample");
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String, Number> bc = new BarChart<>(xAxis, yAxis);
        bc.setTitle("Country Summary");
        xAxis.setLabel("Country");
        yAxis.setLabel("Value");

        XYChart.Series series1 = new XYChart.Series();
        series1.setName("2003");
        series1.getData().add(new XYChart.Data(austria, 25601.34));
        series1.getData().add(new XYChart.Data(brazil, 20148.82));
        series1.getData().add(new XYChart.Data(france, 10000));
        series1.getData().add(new XYChart.Data(italy, 35407.15));
        series1.getData().add(new XYChart.Data(usa, 12000));

        XYChart.Series series2 = new XYChart.Series();
        series2.setName("2004");
        series2.getData().add(new XYChart.Data(austria, 57401.85));
        series2.getData().add(new XYChart.Data(brazil, 41941.19));
        series2.getData().add(new XYChart.Data(france, 45263.37));
        series2.getData().add(new XYChart.Data(italy, 117320.16));
        series2.getData().add(new XYChart.Data(usa, 14845.27));

        XYChart.Series series3 = new XYChart.Series();
        series3.setName("2005");
        series3.getData().add(new XYChart.Data(austria, 45000.65));
        series3.getData().add(new XYChart.Data(brazil, 44835.76));
        series3.getData().add(new XYChart.Data(france, 18722.18));
        series3.getData().add(new XYChart.Data(italy, 17557.31));
        series3.getData().add(new XYChart.Data(usa, 92633.68));

        Scene scene = new Scene(bc, 800, 600);
        bc.getData().addAll(series1, series2, series3);

        bc.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                try {
                    XSSFWorkbook my_workbook = new XSSFWorkbook();
                    XSSFSheet my_sheet = my_workbook.createSheet("MyLogo");
                    WritableImage bImage = bc.snapshot(new SnapshotParameters(), null);
                    int width = (int) bImage.getWidth();
                    int height = (int) bImage.getHeight();
                    byte[] pixelBytes = new byte[width * height * 4];
                    int my_picture_id = my_workbook.addPicture(pixelBytes, Workbook.PICTURE_TYPE_PNG);
                    XSSFDrawing drawing = my_sheet.createDrawingPatriarch();
                    XSSFClientAnchor my_anchor = new XSSFClientAnchor();
                    my_anchor.setCol1(2);
                    my_anchor.setRow1(1);
                    XSSFPicture my_picture = drawing.createPicture(my_anchor, my_picture_id);
                    my_picture.resize();
                    FileOutputStream out = new FileOutputStream(new File("C:\\test.xlsx"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

StackTrace:
Code:
Exception in thread "JavaFX Application Thread" java.util.NoSuchElementException
    at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:836)
    at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:528)
    at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
    at org.apache.poi.ss.util.ImageUtils.getImageDimension(ImageUtils.java:64)
    at org.apache.poi.xssf.usermodel.XSSFPicture.getImageDimension(XSSFPicture.java:278)
    at org.apache.poi.xssf.usermodel.XSSFPicture.getPreferredSize(XSSFPicture.java:203)
    at org.apache.poi.xssf.usermodel.XSSFPicture.resize(XSSFPicture.java:170)
    at org.apache.poi.xssf.usermodel.XSSFPicture.resize(XSSFPicture.java:152)
    at util.BarChartSample$1.handle(BarChartSample.java:92)
    at util.BarChartSample$1.handle(BarChartSample.java:1)

Quelle: http://thinktibits.blogspot.com/2012/12/Excel-XLSX-Insert-PNG-JPG-Image-Java-POI-Example.html

Grüße
lam

P.S. kann man diesen Thread noch in JavaFX Kategorie verschieben?
 
Zuletzt bearbeitet:

Robat

Top Contributor
Zwei Dinge die mir aufgefallen sind:
1. Du befüllst das byte Array nirgends. Ich persönlich würde das Bild aber auch wie folgt zu einem byte Array machen:
Java:
WritableImage image = bc.snapshot(...);

byte[] pixelBytes = null;
BufferedImage bImage = SwingFXUtils.fromFXImage(image, null);
try(ByteArrayOutputStream s = new ByteArrayOutputStream()) {
    ImageIO.write(bImage, "png", s);
    pixelBytes = s.toByteArray();
}

int my_picture_id = my_workbook.addPicture(pixelBytes, ..);

2. Du hast am Ende vergessen, den Outputstream in das Workbook zu schreiben. (siehe deine Quelle)
Java:
FileOutputStream out = new FileOutputStream(new File("C:\\test.xlsx"));
my_workbook.write(out);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
thor_norsk Eclipse - Fehlermeldung - JavaFX Allgemeine Java-Themen 24
volcanos JavaFX-Programme nur in NetBeans selber ausführbar ! command_line: NoClassDefFoundError Allgemeine Java-Themen 39
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
C Java11+ JavaFX HtmlEditor ContextMenu neue MenuItems hinzufügen Allgemeine Java-Themen 5
G JavaFX var Ausdruck Allgemeine Java-Themen 1
G javafx "class path" exception Allgemeine Java-Themen 5
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
M JavaFX Allgemeine Java-Themen 13
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
A Zusammenspiel javafx Fenster Allgemeine Java-Themen 1
D JavaFX mit JDK 12 Allgemeine Java-Themen 31
H Internationalisierung I18n in JavaFx? Allgemeine Java-Themen 7
Tarrew JavaFX: K-NN Decision Boundary plotten (Mesh-Grid, Polylines, ... ?? ) Allgemeine Java-Themen 1
D Compiler-Fehler JavaFX - Bekomme Fehlermeldungen nicht weg Allgemeine Java-Themen 31
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
U JAVAFX Simulation Allgemeine Java-Themen 1
M javafx ComboBox- Nullpointer Exception Allgemeine Java-Themen 6
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
Sam96 JavaFX Benutzerrechte Allgemeine Java-Themen 6
J javaFX mySQL Allgemeine Java-Themen 3
P JavaFX HTMLEditor Menü Allgemeine Java-Themen 0
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
S JavaSE, JavaEE oder JavaFX? Allgemeine Java-Themen 5
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
I Javafx Open/Read und Tree Funktion Allgemeine Java-Themen 14
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
B JavaFX fxml, die selbe Instanz der Klasse Allgemeine Java-Themen 4
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5
T 2D-Grafik Chart als Image erstellen Allgemeine Java-Themen 3
P Java fx bar chart Allgemeine Java-Themen 2
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
O JFreeChart: ständiges Updaten der Chart stoppen Allgemeine Java-Themen 4
J POI Chart positionieren Allgemeine Java-Themen 3
B Jfree Chart mit Datum und Uhrzeit Allgemeine Java-Themen 6
H Java Applet Diagramm (Chart) Allgemeine Java-Themen 11
J freie Chart API für java? Allgemeine Java-Themen 2
P Chart, Kennlinien darstellen Allgemeine Java-Themen 3
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
T Logging mit org.apache.logging.log4j Allgemeine Java-Themen 1
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
H Apache fop - OutOfMemoryError Allgemeine Java-Themen 10
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
L APACHE POI PIVOT TABELLEN Allgemeine Java-Themen 4
L Apache POI Datenquelle Allgemeine Java-Themen 1
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
MiMa Apache Tika: Warnmeldungen und Beispielcode Allgemeine Java-Themen 12
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
FrittenFritze Swing Apache Batik - Zoom an einer bestimmten Stelle Allgemeine Java-Themen 4
K Apache poi: Deprecated getCellType Allgemeine Java-Themen 3
J Apache POI Excel- Blattschutz aufheben Allgemeine Java-Themen 2
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
K Apache POI Word Tabelle Zellen verbinden Allgemeine Java-Themen 4
K Apache POI Word Tabelle Spaltenbreite festlegen Allgemeine Java-Themen 7
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
R Apache POI XSSF Allgemeine Java-Themen 2
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
S Eclipse Apache Camel FTP: Fehlerbehandlung, wie? Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
GianaSisters Apache POI - Hyperlink erstellen Allgemeine Java-Themen 0
reibi Apache PDFBox Allgemeine Java-Themen 0
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
H Apache POI HSSF - Farbe/Rahmen etc. ohne Style-Vorlage? Allgemeine Java-Themen 4
E Apache POI-Datei lesen und umschreiben Allgemeine Java-Themen 8
G Input/Output Apache POI Excel Allgemeine Java-Themen 5
L Apache CLI: Args[] übergeben Allgemeine Java-Themen 3
P docx mit Apache POI auslesen, verändern und zurückschreiben Allgemeine Java-Themen 2
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
L Apache Common CLI Allgemeine Java-Themen 4
J Webstart (auf Apache) jnlp wird nicht geladen Allgemeine Java-Themen 2
S HTTP Apache HTTPClient Problem Allgemeine Java-Themen 4
R org.apache.http kompletter Internetausfall Allgemeine Java-Themen 7
J xlsx Dateien lesen OHNE apache POI Allgemeine Java-Themen 6
V Für was benötigt man Apache Common Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben