Excel的導入和導出功能(POI)

Maven

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>

導入:

package com.pan.test;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ImportExcel {

    public static void main(String[] args) throws Exception {
        ImportExcel importExcel = new ImportExcel();
        FileInputStream inputStream = new FileInputStream("C:\\Users\\prg48\\Desktop\\入選名單表.xls");
        String suffix = "xls";
        int startRow = 0;
        List<String[]> strings = importExcel.paresExcel(inputStream,suffix,startRow);
        strings.stream().forEach(s -> {
            if (s!=null) {
                Arrays.stream(s).forEach(ss -> {
                    if (ss != null) {
                        System.out.print(ss.toString());
                    }
                    System.out.print("   ");
                });
                System.out.println();
            }
        });
    }

    /**
     * 解析文件的方法
     * @param  inputStream
     * @param  suffix
     * @param  startRow
     * @return List<String[]>
    */
    public List<String[]> paresExcel(InputStream inputStream, String suffix, int startRow) throws Exception {
        //1.定義Excel對象變量
        Workbook workbook = null;
        //2.判斷後綴 決定解析方式
        if ("xls".equals(suffix)) {
            //2003
            workbook = new HSSFWorkbook(inputStream);
        } else if ("xlsx".equals(suffix)) {
            //2007
            workbook = new XSSFWorkbook(inputStream);
        }else{
            //未知內容
        }
        //判斷
        if (workbook == null) {
            return null;
        }
        //獲取工作表sheet
        Sheet sheet = workbook.getSheetAt(0);
        if (sheet == null) {
            //空表格
            return null;
        }
        //獲取表格最後一行 行號
        int lastRowNum = sheet.getLastRowNum();
        //判斷行號
        if (lastRowNum <= startRow) {
            return  null;
        }

        List<String[]> result = new ArrayList<>();

        //定義行變量和單元格變量
        Row row = null;
        Cell cell = null;
        //循環讀取
        for (int rowNum = startRow; rowNum < lastRowNum; rowNum++){
            row = sheet.getRow(rowNum);
            //獲取當前行的第一列和最後一列的標記
            short firstCellNum = row.getFirstCellNum();
            short lastCellNum = row.getLastCellNum();
            if(lastCellNum!=0){
                String[] rowArray = new String[lastCellNum];
                for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++){
                    cell = row.getCell(cellNum);
                    if (cell == null) {
                        rowArray[cellNum] = null;
                    }else {
                        rowArray[cellNum] = parseCell(cell);
                    }
                }
                result.add(rowArray);
            }
        }
            return result;
    }

    /**
     * 解析單元格字符串
     * @return String
     */
    private String parseCell(Cell cell){
        String cellStr = null;
        switch (cell.getCellType()){
            case XSSFCell.CELL_TYPE_STRING:
                cellStr = cell.getStringCellValue();
                break;
            case XSSFCell.CELL_TYPE_NUMERIC:
                cellStr = cell.getNumericCellValue()+"";
                break;
            case XSSFCell.CELL_TYPE_BLANK:
                cellStr = null;
                break;
            default:
                cellStr = "";
        }
        return cellStr;
    }

}

導出:

package com.pan.test;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

public class ExportExcel {
    public static void main(String[] args) throws Exception {
        ImportExcel importExcel = new ImportExcel();
        FileInputStream inputStream = new FileInputStream("C:\\Users\\prg48\\Desktop\\入選名單表.xls");
        String suffix = "xls";
        int startRow = 0;
        List<String[]> strings = importExcel.paresExcel(inputStream,suffix,startRow);

        ExportExcel exportExcel = new ExportExcel();
        FileOutputStream outputStream = new FileOutputStream("C:\\Users\\prg48\\Desktop\\test.xls");
        exportExcel.exportExcel(strings,outputStream);

    }
    /**
     * 文件導出方法
     * @param resource
     * @param outputStream
     */
    public void exportExcel(List<String[]> resource, OutputStream outputStream) throws Exception {
        //創建Excel對象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //創建一個表格
        HSSFSheet sheet = workbook.createSheet("sheet1");
        //創建表頭
        String[] headerStr = resource.get(0);
        HSSFRow headerRow = sheet.createRow(0);
        for (int i=0; i<headerStr.length; i++) {
            //設置列寬
            sheet.setColumnWidth(i,5000);
        }
        //設置表頭單元格樣式
        HSSFCellStyle headerStyle = workbook.createCellStyle();
        //水平居中
        headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //設置字體
        HSSFFont headerFont = workbook.createFont();
        headerFont.setColor(HSSFColor.VIOLET.index);
        headerFont.setFontName("楷體");
        headerStyle.setFont(headerFont);
        //表頭內容
        for (int i = 0; i<headerStr.length; i++){
            //創建一個單元格
            HSSFCell headerCell = headerRow.createCell(i);
            headerCell.setCellStyle(headerStyle);
            headerCell.setCellValue(headerStr[i]);
        }
        //表體內容
        //設置表體單元格樣式
        HSSFCellStyle bodyStyle = workbook.createCellStyle();
        //水平居中
        bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //設置字體
        HSSFFont bodyFont = workbook.createFont();
        bodyFont.setColor(HSSFColor.BLUE.index);
        bodyFont.setFontName("宋體");
        bodyStyle.setFont(bodyFont);
        for(int row = 1; row<resource.size(); row++){
            //輸出行數據
            String[] temp = resource.get(row);
            //創建行
            HSSFRow bodyRow = sheet.createRow(row);
            //循環創建列
            for(int cell = 0; cell<temp.length; cell++){
                HSSFCell bodyCell1 = bodyRow.createCell(cell);
                bodyCell1.setCellStyle(bodyStyle);
                bodyCell1.setCellValue(temp[cell]);
            }
        }
        //將Excel輸出到文件
        workbook.write(outputStream);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章