xssf导入excel

Java用XSSFWorkbook实现excel简单读写
一、概述
二、所需的jar
三、XSSFWorkbook的使用方法
四、源代码
一、概述
Apache POI是 Java 程序员用来处理 MS Office 文件的常用开源库。由 Apache 软件基金会开发,使用 Java 分布式设计或修改 Microsoft Office 文件,包含一系列类和方法对用户输入数据或文件进行编码和解码。其中 POI-HSSF 和 POI-XSSF 是用来处理 excel 文件的组件,前者对应 97~2007版本的文件格式(.xls), 后者对应07以后的格式(.xlsx),更多关于 POI 的介绍请访问官方主页。
个人觉得 POI 对 office 的对象进行了很好的抽象设计,因此学习起来比较平滑。在阅读学习的同时打开excel进行同步操作,你会感觉到使用 POI 和使用 office 一样简单。

二、所需的jar
进行操作之前,先用maven等工具导入依赖包,或者手动下载jar导入classpath

org.apache.poi 3.14

三、XSSFWorkbook的使用方法
// 07之前版本
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream(“workbook.xls”);
wb.write(fileOut);
fileOut.close();
// 07之后版本 Workbook wb = new XSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream(“workbook.xlsx”);
wb.write(fileOut);
fileOut.close();

**注:我用的是07之后版本 **

// wb 可以是上述创建的两个对象之一
Sheet sheet = wb.createSheet(); Sheet sheet =
wb.createSheet(“库存”);

// 1. 首先创建行,声明行的索引,从0开始。
Row row = sheet.createRow(0);

四、源代码
实体类:

private int index;
private String name;
private String age;
private String brithday;

public ExcelInfo() {
}

public ExcelInfo(int index, String name, String age, String brithday) {
	this.index = index;
	this.name = name;
	this.age = age;
	this.brithday = brithday;
}
//省略get/set方法

@Override
public String toString() {
	return "第" + index + "行的数据如:姓名:" + name + ",年龄:" + age + ",生日:" + brithday ;
}

导出Excel类:

public static void main(String[] args) {

	List<ExcelInfo> list = new ArrayList<ExcelInfo>();
	list.add(new ExcelInfo(1, "石头", "24", "6/12"));
	list.add(new ExcelInfo(2, "火男", "25", "6/13"));
	list.add(new ExcelInfo(3, "火女", "26", "6/14"));
	list.add(new ExcelInfo(4, "武器", "27", "6/15"));
	list.add(new ExcelInfo(5, "提莫", "28", "6/16"));
	excelExp("D:\\eclipse-project\\javaweb\\AccessTest\\excel\\result.xlsx", list);
}

public static void excelExp(String filePath, List<ExcelInfo> list) {
	Workbook wb = null;
	OutputStream out = null;
	try {
		wb = new XSSFWorkbook();
		Sheet sheet = wb.createSheet("联系表"); //重命名sheet1的工作表名
		Row r = sheet.createRow(0);			//0 表示 第一行
		r.createCell(0).setCellValue("姓名");
		r.createCell(1).setCellValue("年龄");
		r.createCell(2).setCellValue("生日");	//给表头定义字段名

		for (ExcelInfo user : list) {
			r = sheet.createRow(user.getIndex()); //按照对象的index对应第几行
			r.createCell(0).setCellValue(user.getName());
			r.createCell(1).setCellValue(user.getAge());
			r.createCell(2).setCellValue(user.getDate());
		}
		out = new FileOutputStream(filePath); // 字节输出流
		wb.write(out); //导出excel
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

准备被读入的excel内容如下:

控制台输出如下图:

注:输出形式是根据toString()形式输出,可以改为自己喜欢的方式,请修改实体类中的toString()。

读入类

public static void main(String[] args) throws IOException {
List list = importExcel(“D:\eclipse-project\javaweb\AccessTest\excel\test.xlsx”);
for (ExcelInfo excelInfo : list) {
System.out.println(excelInfo);
}
}

public static List<ExcelInfo> importExcel(String file) throws IOException {
	FileInputStream in = null;
	List<ExcelInfo> result = null;
	try {
		in = new FileInputStream(file);
		result = new ArrayList<ExcelInfo>();
		Workbook wb = new XSSFWorkbook(in); //基于文件字节输入流 创建工作簿对象
		Sheet sheet = wb.getSheetAt(0); // sheetIndex 表示 第一个工作表
		for (Row row : sheet) {
			if (row.getRowNum() < 1) {	//因为第一行是一些字段名,此行不获取字符串
				continue;
			}
			String cellValue = new String(); //用来赋值,取格式化后的日期字符串
			ExcelInfo eInfo = new ExcelInfo();
			eInfo.setIndex(row.getRowNum());
			eInfo.setName(row.getCell(0).getStringCellValue());	//获取第一列单元表格的数据值
			row.getCell(1).setCellType(Cell.CELL_TYPE_STRING); //因为年龄的数据值是一个数值,所以需要进行转字符串,否则报异常
			eInfo.setAge(row.getCell(1).getStringCellValue());
			SimpleDateFormat formatter = new SimpleDateFormat("MM-dd");	//定义时间格式化对象
			Date dateCell = row.getCell(2).getDateCellValue(); // 
			cellValue = formatter.format(dateCell);//进行日期格式化
			eInfo.setBrithday(cellValue);
			result.add(eInfo);
		}

		wb.close();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		in.close();
	}
	return result;
}

导出的excel内容如下图
在这里插入图片描述

补充:
如果你是用request 接收,写法如下:

// 转换request,解析出request中的文件
	MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

	// 获取文件map集合
	Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
      MultipartFile   file = entity.getValue();
      // 创建workbook
      XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
     Sheet xssfSheet = wb.get(0);
         //循环取每行的数据
    for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {
        XSSFRow xssfRow = xssfSheet.getRow(rowIndex);
        if (xssfRow == null) {
            continue;
        }


        //循环取每个单元格(cell)的数据
        for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells();     cellIndex++) {
           
        }
        
       //   这里说下获取不同类型的值:
             ① 获取String 类型
             cell.setCellType(Cell.CELL_TYPE_STRING);
             String  a = cell.getStringCellValue();
             ② 获取 日期类型,实体类为Date类型,要求格式yyyy-MM-dd
            double value = cell.getNumericCellValue();
            if(0.0!=value){
                Date d = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
                SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
                String dateStr =  f.format(d);
                Date  date  =  sdf.parse(dateStr);
                
            }
            ③ 获取BigDecimal类型
         cell.setCellType(Cell.CELL_TYPE_STRING);
         new BigDecimal(cell.getStringCellValue());    
    }
  
}

原文链接:https://blog.csdn.net/qq_35525955/article/details/80904844

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