poi 文件批量上传下载

poi

Excel文件的导入导出 Apache POI是Apache软件基金会的开放源码jar包,POI提供API给Java程序对Microsoft Office格式Excel读和写的 功能

  1. 写出 Excel文件的导出 使用场景:几乎任何的后台管理模块 各种报表的下载(诊断报告 成绩单 发票) 2. 读取 Excel文件的导入 使用场景:批量注册 Excel文件中 ----》读取文件的数据 Java程序 ----》添加数据库

为什么需要使用Poi呢?

文本文件 通过流可以直接读取为可以识别的字符串 二进制文件
Excel文件 mp3 mp4 Poi能够读取和生成Excel文件

基本的API POI 对 Excel 抽象出来的对象

Windows电脑使用Excel流程
  1. 新建一个Excel文件 HSSFWorkbook
  2. 创建一张工作表 HSSFSheet
  3. 确定在哪一行写数据 HSSFRow
  4. 确定在第几个单元格写数据 HSSFCell
  5. 在单元格中写入数据
    6… 保存 用Java代码使用Excel
Excel文件对象
  1. 创建一个HSSFWorkbook
  2. 创建一个工作表对象 HSSFSheet
  3. 创建一个行对象 HSSFRow
  4. 创建一个单元格对象 HSSFCell
  5. 在单元格对象中写入数据
  6. 将对象写出到本地 生成 Excel文件

依赖

org.apache.poi poi 3.16

@Test
public void test1() throws IOException {
// 1. 创建一个HSSFWorkbook Excel文件对象
HSSFWorkbook workbook = new HSSFWorkbook();
// 2. 创建一个工作表对象 HSSFSheet 参数表名
HSSFSheet sheet = workbook.createSheet(“demo”);
// 3. 创建一个行对象 HSSFRow 下标从0开始
HSSFRow row = sheet.createRow(2);
// 4. 创建一个单元格对象 HSSFCell
HSSFCell cell = row.createCell(2);
// 5. 在单元格对象中写入数据
cell.setCellValue(“hhhh”);
// 6. 将对象写出到本地 生成 Excel文件 xls 07版以前(使用这一种) xlsx 07版以后
workbook.write(new FileOutputStream(“E://demo.xls”));
}

反射优化导出代码

问题:没有遍历得到属性的值

@Test
public void test3() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
CmfzGuru cmfzGuru = new CmfzGuru();
cmfzGuru.setGuruId(1);
cmfzGuru.setGuruName(“ddd”);
// 获取类对象
Class guruClass = cmfzGuru.getClass();
}
// 获取方法

/*
思路1
1.获取属性名
2.拼接出来get方法名
3.通过方法名调用方法 获取值
*/
Field[] declaredFields =guruClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
String fieldName = declaredField.getName();
// 2.拼接出来get方法名 guruId
String getMethodName = “get”+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
System.out.println(getMethodName);
// 3.通过方法名得到方法对象 参数1 方法名 参数2 形参类型的类对象
Method declaredMethod = guruClass.getDeclaredMethod(getMethodName, null);
System.out.println(declaredMethod); //
4.调用方法 参数1 当前对象 参数2 形参
Object invoke = declaredMethod.invoke(cmfzGuru, null);
System.out.println(invoke);
}

}

读取数据库数据

poi 文件批量上传下载_第1张图片

数据导入

  1. 读取文件 得到流
  2. 通过Poi处理流
  3. 获取对象中的值

/** * 导入 */
@Test
public void test4() throws IOException {
// 1.读取文件
FileInputStream inputStream = new FileInputStream(“E://gurus.xls”);

//        2.通过poi处理流        
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
 
//        3.取出文件对象中的数据 
//        3.1取出表 getSheetAt(0)通过下标获取        
HSSFSheet sheet = workbook.getSheetAt(0);
//        3.2获取表中的行 getLastRowNum()获取最后一行的下标        
int lastRowNum = sheet.getLastRowNum();        
for (int i = 1; i <= lastRowNum; i++) { 
//            3.3获取行            
HSSFRow row = sheet.getRow(i);
 
//            3.4通过行得到单元格            
String id = row.getCell(0).getStringCellValue();            
String name = row.getCell(1).getStringCellValue();            
String img = row.getCell(2).getStringCellValue();            
String nickName = row.getCell(3).getStringCellValue();            
String status = row.getCell(4).getStringCellValue();
 
            CmfzGuru cmfzGuru = new CmfzGuru(); 
            //            cmfzGuru.setGuruId(Integer.parseInt(id));            
            cmfzGuru.setGuruName(name);            
            cmfzGuru.setGuruImage(img);            
            cmfzGuru.setGuruNickname(nickName);            
            cmfzGuru.setGuruStatus(Integer.parseInt(status));
 
		//            3.5添加数据库            
		System.out.println(cmfzGuru);
 
            cmfzGuruDao.insert(cmfzGuru);        
            }    
     }

代码设置格式(可忽略)

response.setHeader(“Content-Disposition”,
“attachment;fileName=” + URLEncoder.encode(s, “utf-8”)); response.setContentType(“application/vnd.ms-excel”);
// 通过文件对象写出
workbook.write(response.getOutputStream());

你可能感兴趣的:(poi,excel,poi,excel)