# 导出

# 简单的写

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Demo1 {
    public static void main(String[] args) {
        //创建工作簿
        Workbook workbook = new XSSFWorkbook();
        //创建表单 sheet
        //如果多个sheet 则执行多个 workbook.createSheet("poi");
        Sheet sheet = workbook.createSheet("poi");
        //行对象
        Row row = sheet.createRow(0);
        //单元格
        Cell cell = row.createCell(0);
        //写入内容
        cell.setCellValue("第一个内容");

        try (
                OutputStream os = new FileOutputStream("D:/excelDemo/a.xlsx")
        ) {
            workbook.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

# 单元格样式


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Demo1 {
    public static void main(String[] args) {
        //创建工作簿
        Workbook workbook = new XSSFWorkbook();
        //创建表单 sheet
        //如果多个sheet 则执行多个 workbook.createSheet("poi");
        Sheet sheet = workbook.createSheet("poi");
        //行对象
        Row row = sheet.createRow(0);
        //单元格
        Cell cell = row.createCell(0);
        //写入内容
        cell.setCellValue("第一个内容");
        setStyle(workbook.createCellStyle(), sheet, workbook.createFont(), row, cell);

        try (
                OutputStream os = new FileOutputStream("D:/excelDemo/a.xlsx")
        ) {
            workbook.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setStyle(CellStyle cellStyle, Sheet sheet, Font font, Row row,Cell cell) {

        //创建样式

        //上下左右边框
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);

        //字体对象
        font.setFontName("宋体");
        //字体大小
        font.setFontHeightInPoints((short) 18);
        cellStyle.setFont(font);

        //行高
        row.setHeightInPoints(20);
        //列宽 (索引,宽度(源码会/256 如果设置20 需要*256))
        sheet.setColumnWidth(0, 20 * 256);
        //居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);

        //水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        //向单元格设置样式
        cell.setCellStyle(cellStyle);

    }
}

# 绘制图形


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo1 {
    public static void main(String[] args) {
        //创建工作簿
        Workbook workbook = new XSSFWorkbook();
        //创建表单 sheet
        //如果多个sheet 则执行多个 workbook.createSheet("poi");
        Sheet sheet = workbook.createSheet("poi");
        //行对象
        Row row = sheet.createRow(0);
        //单元格
        Cell cell = row.createCell(0);
        //写入内容
        cell.setCellValue("第一个内容");
        setStyle(workbook.createCellStyle(), sheet, workbook.createFont(), row, cell);
        setImg(workbook, sheet);
        try (
                OutputStream os = new FileOutputStream("D:/excelDemo/a.xlsx")
        ) {
            workbook.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setStyle(CellStyle cellStyle, Sheet sheet, Font font, Row row,Cell cell) {

        //上下左右边框
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);

        //字体对象
        font.setFontName("宋体");
        //字体大小
        font.setFontHeightInPoints((short) 18);
        cellStyle.setFont(font);

        //行高
        row.setHeightInPoints(20);
        //列宽 (索引,宽度(源码会/256 如果设置20 需要*256))
        sheet.setColumnWidth(0, 20 * 256);
        //居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);

        //水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        //向单元格设置样式
        cell.setCellStyle(cellStyle);
    }

    public static void setImg(Workbook workbook,Sheet sheet) {
        //读取图片流
        try (
                InputStream is = new FileInputStream("C:\\Users\\GaoLiang\\Pictures\\uTools_1687237919654.png")
        ) {

            //转化二进制,这里poi提供了工具类
            byte[] imgByteArray = IOUtils.toByteArray(is);
            is.read(imgByteArray);

            //向POI内存中添加一张图片,返回图片集合中的索引
            /**
             * params1:byte
             * params2:图片类型
             */
            int imgIndex = workbook.addPicture(imgByteArray, Workbook.PICTURE_TYPE_JPEG);

            //绘制图片工具类
            CreationHelper creationHelper = workbook.getCreationHelper();
            Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();

            //创建描点,设置图片坐标
            ClientAnchor clientAnchor = creationHelper.createClientAnchor();
            //从第几行开始
            clientAnchor.setRow1(0);
            //第几列
            clientAnchor.setCol1(0);

            //绘制图片
            Picture picture = drawingPatriarch.createPicture(clientAnchor, imgIndex); //图片位置,图片索引
            //自适应渲染图片
            picture.resize();



        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}