Jeg hentede:
poi-bin-5.2.3-20220909.zip
Puttede alle jar filer i classpath i Eclipse.
Og så virkede:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xddf.usermodel.chart.ChartTypes;
import org.apache.poi.xddf.usermodel.chart.LegendPosition;
import org.apache.poi.xddf.usermodel.chart.XDDFCategoryDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class GenXslx {
public static class Order {
private int id;
private String customer;
private String status;
private double totalPrice;
public Order(int id, String customer, String status, double totalPrice) {
this.id = id;
this.customer = customer;
this.status = status;
this.totalPrice = totalPrice;
}
public int getId() {
return id;
}
public String getCustomer() {
return customer;
}
public String getStatus() {
return status;
}
public double getTotalPrice() {
return totalPrice;
}
}
private static XSSFCell createCell(XSSFRow rowobj, int colix, XSSFCellStyle style) {
XSSFCell c = rowobj.createCell(colix);
c.setCellStyle(style);
return c;
}
public static void main(String[] args) throws IOException {
List<Order> data = new ArrayList<Order>();
data.add(new Order(1, "A", "Delivered", 10.00));
data.add(new Order(2, "B", "Delivered", 40.00));
data.add(new Order(3, "C", "Delivered", 35.00));
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
XSSFCellStyle headerstyle = workbook.createCellStyle();
headerstyle.setFillForegroundColor(IndexedColors.PALE_BLUE.index);
headerstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
XSSFCellStyle amountstyle = workbook.createCellStyle();
amountstyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));
int row = 0;
XSSFRow headerrow = sheet.createRow(row);
createCell(headerrow, 0, headerstyle).setCellValue("Order");
createCell(headerrow, 1, headerstyle).setCellValue("Customer");
createCell(headerrow, 2, headerstyle).setCellValue("Status");
createCell(headerrow, 3, headerstyle).setCellValue("Total");
row++;
for(Order o : data) {
XSSFRow datarow = sheet.createRow(row);
datarow.createCell(0).setCellValue(o.id);
datarow.createCell(1).setCellValue(o.customer);
datarow.createCell(2).setCellValue(o.status);
datarow.createCell(3).setCellValue(o.totalPrice);
row++;
}
XSSFRow datarow = sheet.createRow(row);
datarow.createCell(0).setCellValue("Total");
createCell(datarow, 3, amountstyle).setCellFormula(String.format("SUM(D%d:D%d)", row - data.size() + 1, row));
row++;
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, row, 3, row + 9);
XSSFChart chart = drawing.createChart(anchor);
XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP_RIGHT);
XDDFCategoryDataSource cat = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(row - data.size() - 1, row - 2, 1, 1));
XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(row - data.size() - 1, row - 2, 3, 3));
XDDFChartData piedata = chart.createData(ChartTypes.PIE, null, null);
piedata.setVaryColors(true);
piedata.addSeries(cat, val);
chart.plot(piedata);
OutputStream os = new FileOutputStream("/work/orders.xlsx");
workbook.write(os);
os.close();
workbook.close();
}
}