[工具类 java] POI导入导出

POI导入导出demo

开发环境

1.使用 eclipse 集成开发工具
2.基于 JDK8 开发
备注:文件内容保存到数据库和数据库表的内容读取到文件没有做.思路很简单,就是基本的CRUD操作.本demo源码没有写.

文章底部有源码链接
工具类
package cn.icanci.poi.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
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.XSSFWorkbook;

public class POIUtil {
    /**
     * 文件导出方法
     * 
     * @param resources    集合类型,要导出的具体数据集合
     * @param outputStream 输出流,输出的excel文件的具体位置
     * @throws IOException
     */
    public static void exportExcel(List resources, OutputStream outputStream) throws IOException {
        // 创建一个内存Excel对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建一个表格
        HSSFSheet sheet = workbook.createSheet("sheet1");
        // 创建表头
        // 获取表头内容
        String[] headerStr = resources.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(HSSFFont.COLOR_RED);
        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]);
        }

        // 表体内容
        for (int i = 1; i < resources.size(); i++) {
            // 输出行的数据
            String[] temp = resources.get(i);
            // 创建行
            HSSFRow bodyRow = sheet.createRow(i);
            // 循环创建列
            for (int j = 0; j < temp.length; j++) {
                HSSFCell bodyCell = bodyRow.createCell(j);
//              bodyCell.setCellStyle()
                bodyCell.setCellValue(temp[j]);
            }
        }

        // 将内存创建的excel对象,输出到文件中
        workbook.write(outputStream);
    }

    /**
     * 解析Excel 表格
     * 
     * @param inputStream 输入流
     * @param suffix      文件的后缀名
     * @param startRow    从哪一行开始
     * @return 返回List集合
     * @throws IOException
     */
    @SuppressWarnings("resource")
    public static List getParseExcel(InputStream inputStream, String suffix, int startRow)
            throws IOException {

        // 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 {
            return null;
        }

        // 获取工作表 excel分为若干个表
        Sheet sheet = workbook.getSheetAt(0);
        if (sheet == null) {
            return null;
        }

        // 获取表格中最后一行的行号
        int lastRowNum = sheet.getLastRowNum();
        // 最后一行的行号大于startRow
        if (lastRowNum <= startRow) {
            return null;
        }

        List 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 (firstCellNum != lastCellNum && 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;
    }

    /**
     * 解析单元格
     * 
     * @param cell 需要解析的单元格数据
     * @return 返回字符串
     */
    @SuppressWarnings("deprecation")
    private static String parseCell(Cell cell) {
        String cellStr = null;
        // 判断单元格的类型
        switch (cell.getCellType()) {
        // 字符串类型单元格
        case STRING:
            cellStr = cell.getStringCellValue();
            break;
        // 空数据 标准数据
        case BLANK:
            cellStr = "";
            break;
        // 数学类型 时间,日期,数字
        case NUMERIC:
            // 判断日期类型
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                // 判断具体类型 是日期还是时间
                SimpleDateFormat sdf = null;
                if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
                    // 这是时间
                    sdf = new SimpleDateFormat("HH:MM");
                } else {
                    // 日期
                    sdf = new SimpleDateFormat("yyyy-MM-dd");
                }
                Date temp = cell.getDateCellValue();
                cellStr = sdf.format(temp);
            } else {
                // 是数字
                double temp = cell.getNumericCellValue();
                // 数学格式化工具
                DecimalFormat format = new DecimalFormat();
                String formatString = cell.getCellStyle().getDataFormatString();
                if ("General".equals(formatString)) {
                    // 定义格式化的正则 定义
                    format.applyPattern("#");
                }
                cellStr = format.format(temp);
            }
            break;
        default:
            cellStr = "";
        }

        return cellStr;
    }
}
文件解析测试类
package cn.icanci.poi.test;


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.junit.jupiter.api.Test;

import cn.icanci.poi.util.ParseExcel;

/**
 * @author 178111545333 zhu qiang
 * @version 1.10
 * @classAction 
 */
class ParseExcelTest {

    /**
     * Test method for {@link cn.icanci.poi.util.ParseExcel#getParseExcel(java.io.InputStream, java.lang.String, int)}.
     * @throws IOException 
     */
    @Test
    void testGetParseExcel() throws IOException {
        
        InputStream inputStream = new FileInputStream("crm_poi.xlsx");
        String suffix = "xlsx";
        int startRow = 2;
        List result = ParseExcel.getParseExcel(inputStream, suffix, startRow);
        for (String[] s : result) {
            for (String s1 : s) {
                System.out.print(s1+" ");
            }
            System.out.println();
        }
    }

}
我的crm_poi.xlsx文件内容
[工具类 java] POI导入导出_第1张图片
crm_poi.xlsx文件内容
测试结果
系统管理 null 系统管理 T 1 
客户管理 null 客户管理 T 1 
合同管理 null 合同管理 T 1 
个人管理 null 个人管理 T 1 
用户维护 /user 用户维护 F 2 
用户查询 /user 用户查询 F 2 
修改用户密码 /user 修改用户密码 F 2 
客户维护 /cus 客户维护 F 3 
客户查询 /cus 客户查询 F 3 
合同维护 /contract 合同维护 F 4 
合同查询 /contract 合同查询 F 4 
查询个人信息 /self 查询个人信息 F 5 
修改个人信息 /self 修改个人信息 F 5 
修改个人密码 /self 修改个人密码 F 5 
导入测试结果
[工具类 java] POI导入导出_第2张图片
导入到 exportFile.xls 测试结果
项目源码地址:链接: GitHub地址 @GitHub OR @百度网盘 提取码:94i4
学生党一枚 欢迎相互交流 一起学习 可以直接点击链接QQ联系我哒 ^_^ @我自己

你可能感兴趣的:([工具类 java] POI导入导出)