poi使用

2020-07-21  本文已影响0人  knock
package kr.weitao.common.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.protocol.RequestDate;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.bson.types.ObjectId;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.util.*;

/***
 * @ClassName: OutExcelUtil
 * @Description: TODO
 * @author: yanyd
 * @Date: 3:19 2020/4/23
 * @version : V1.0
 */
@Slf4j
public class OutExcelUtil {


    private static final String XLS = "xls";
    private static final String XLSX = "xlsx";
    private static final String SHEET_NAME = "表格1";
    private static final String SAVE_FILE_PATH = "/tmp/";

    /**
     * 导出jsonArray数据
     *
     * @param dataArray
     * @param headerMap
     * @param fileName
     * @return
     */
    public static String outExcel(JSONArray dataArray, LinkedHashMap<String, Object> headerMap, String fileName) {
        String path = SAVE_FILE_PATH + fileName;
        FileOutputStream fileOutputStream = null;
        Workbook workbook = null;
        try {
            String suffixName = fileName.split("\\.")[1];
            workbook = createWriteWorkBook(suffixName);
            //创建sheet
            Sheet sheet = workbook.createSheet(SHEET_NAME);
            //创建表头
            Row hssfRow = sheet.createRow(0);
            Iterator<Map.Entry<String, Object>> iterator = headerMap.entrySet().iterator();
            int i = 0;
            CellStyle headStyle = createHeadStyle(workbook);
            while (iterator.hasNext()) {
                Map.Entry<String, Object> next = iterator.next();
                //创建单元格
                Cell hssfCell = hssfRow.createCell(i);
                //单元格赋值
                hssfCell.setCellValue(String.valueOf(next.getValue()));
                //设置单元格宽度
                sheet.setDefaultColumnWidth(30);
                //设置单元格样式
                hssfCell.setCellStyle(headStyle);
                i++;
            }

            //设置数据体
            List<List<String>> dataList = new ArrayList<>();
            for (int d = 0; d < dataArray.size(); d++) {
                JSONObject dataObj = dataArray.getJSONObject(d);
                List<String> tempList = new ArrayList();
                for (String key : headerMap.keySet()) {
                    String value = "";
                    if (dataObj.containsKey(key)) {
                        value = String.valueOf(dataObj.getString(key));
                    }
                    tempList.add(value);
                }
                dataList.add(tempList);
            }

            CellStyle dataStyle = createDataStyle(workbook);
            for (int i1 = 0; i1 < dataList.size(); i1++) {
                //创建行
                Row dataHssfRow = sheet.createRow(i1 + 1);
                List<String> tempList = dataList.get(i1);
                for (int i2 = 0; i2 < tempList.size(); i2++) {
                    //创建单元格
                    Cell dataHssfCell = dataHssfRow.createCell(i2);
                    //单元格赋值
                    dataHssfCell.setCellValue(String.valueOf(tempList.get(i2)));
                    //设置单元格样式
                    dataHssfCell.setCellStyle(dataStyle);
                }
            }
            fileOutputStream = new FileOutputStream(path);
            workbook.write(fileOutputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
                workbook.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return path;
    }

    public static Workbook createWriteWorkBook(String suffixName) {
        Workbook workbook = null;
        if (XLSX.equals(suffixName.toLowerCase())) {
            workbook = new XSSFWorkbook();
        } else {
            workbook = new HSSFWorkbook();
        }
        return workbook;
    }


    public static Workbook createReadWorkBook(String suffixName, InputStream inputStream) {
        Workbook workbook = null;
        try {
            if (XLSX.equals(suffixName.toLowerCase())) {
                workbook = new XSSFWorkbook(inputStream);
            } else {
                workbook = new HSSFWorkbook(inputStream);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return workbook;
    }

    /**
     * 创建表头样式
     *
     * @param workbook
     * @return
     */
    public static CellStyle createHeadStyle(Workbook workbook) {
        CellStyle cellStyle = workbook.createCellStyle();
        //垂直居中
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        //背景蓝色
        cellStyle.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());
        cellStyle.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
        //设置单元格字体
        Font font = workbook.createFont();
        //字体 加粗
        font.setBold(true);
        //字体 微软雅黑
        font.setFontName("微软雅黑");
        //字体大小12
        font.setFontHeightInPoints((short) 12);
        //字体颜色 白色
        font.setColor(IndexedColors.WHITE.getIndex());
        cellStyle.setFont(font);
        return cellStyle;
    }


    /**
     * 创建数据样式
     *
     * @param workbook
     * @return
     */
    public static CellStyle createDataStyle(Workbook workbook) {
        CellStyle cellStyle = workbook.createCellStyle();
        //垂直居中
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        //设置单元格字体
        Font font = workbook.createFont();
        //字体 微软雅黑
        font.setFontName("微软雅黑");
        //字体大小12
        font.setFontHeightInPoints((short) 12);
        //字体颜色 白色
        font.setColor(IndexedColors.BLACK.getIndex());
        cellStyle.setFont(font);
        return cellStyle;
    }


    /**
     *      导出:
     *         LinkedHashMap linkedHashMap = new LinkedHashMap();
     *         linkedHashMap.put("name", "名字22222222222222222");
     *         linkedHashMap.put("age", "年龄");
     *
     *         JSONArray jsonArray = new JSONArray();
     *         JSONObject jsonObject = new JSONObject();
     *         jsonObject.put("name", "1");
     *         jsonObject.put("age", null);
     *         jsonObject.put("sex", "3");
     *
     *         JSONObject jsonObject1 = new JSONObject();
     *         jsonObject1.put("name", "4");
     *         jsonObject1.put("age", "5");
     *         jsonObject1.put("sex", "6");
     *         jsonArray.add(jsonObject);
     *         jsonArray.add(jsonObject1);
     *         outExcel(jsonArray, linkedHashMap, "a.xls");
     *         outExcel(jsonArray, linkedHashMap, "a.xlsx");
     *
     *     导入:
     *        Workbook workbook = OutExcelUtil.createReadWorkBook("xlsx", new FileInputStream("D:\\CKJ第三波调价明细.xlsx"));
     *         Sheet sheet = workbook.getSheetAt(0);
     *         //获得数据的总行数
     *         int totalRowNum = sheet.getLastRowNum();
     *         // 获得表头
     *         Row rowHead = sheet.getRow(0);
     *         // 获得表头总列数
     *         int cols = rowHead.getPhysicalNumberOfCells();
     *         // 遍历所有行
     *         for (int i = 1; i <= totalRowNum; i++) {
     *             Row row = sheet.getRow(i);
     *             // 遍历该行所有列
     *             for (short j = 0; j < cols; j++) {
     *                 Cell cell = row.getCell(j);
     *                 if (cell != null) {
     *                     cell.setCellType(Cell.CELL_TYPE_STRING);
     *                     String cellValue = cell.getStringCellValue();
     *                     System.out.print(cellValue+"|");
     *                 }
     *             }
     *             System.out.println();
     *         }
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        
    }

}


pom.xml

       <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>

上一篇下一篇

猜你喜欢

热点阅读