如何使用apache poi + jfianl 导入导出execl

如何使用apache poi + jfianl 导入导出execl

要想使用apache poi首先用maven工程导入如下依赖
<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>4.0.1</version>
</dependency>
<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>4.0.1</version>
</dependency>
jfianl+apache poi实现execl数据导入到数据库

前端:

 <form id="importForm" action="/kpi/upload" enctype="multipart/form-data" method="post">
 	<input type="file"  name = "execl"> //这里没有规定只能上传execl文件,可以自行添加
 	<input type="submit" value="上传xls文件">
 </form>

这里是要导入的execl数据
在这里插入图片描述
后台代码如下:
tip:首先创建Workbook对象,再创建sheet对象,然后通过Row对象获取到execl的行,最后通过row.getCell()方法获取到某行具体的某一个单元格,再提取这个单元格的数据写入数据库,如下代码就是这个操作思路

public void upload() throws Exception {
		//jfinal方法获取上传文件路径并当做输入流传给workbook对象
        UploadFile file =  getFile("execl");
        String fileName = file.getFileName();
        String path  = file.getUploadPath();
        //创建workbook对象操控execl
        Workbook workbook = new XSSFWorkbook(new FileInputStream(path+"/"+fileName));
        //获取表格的头一行,sheet是工作表对象
        Sheet sheet = workbook.getSheetAt(0);
        //Row是行对象,这里用for循环遍历execl的每一行
        for(Row row : sheet){
            //跳过表头
            if(row.getRowNum() == 0){
                continue;
            }
            //获取日期,row.getCell(0)这个方法表示获取当前行的第一个cell单元格的数据
            Date date = row.getCell(0).getDateCellValue();
            String workContent = row.getCell(1).getStringCellValue();
            int score = (int)row.getCell(2).getNumericCellValue();
            String selfevaluate = row.getCell(3).getStringCellValue();
            //从date日期格式的数据中提取出年月
            SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
            String year = yearFormat.format(date);
            SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
            String month = monthFormat.format(date);
           /*jfinal操作数据库的方法,会把execl中读出的数据通过传给record对象的方式写入数据库,
           使用其它数据库操作方式的请自行修改下面的代码*/
            Record record = new Record().set("workcontent",workContent).set("score",score)
                       .set("selfevaluate",selfevaluate).set("month",date).set("year",year).set("yue",month).set("state",0);
           //参数分别为表名,主键字段,Record对象,自行修改
            Db.save("tb_kpi","itemid",record);
        }
        //jfianl页面转发方法
        renderTemplate("/sys/myfunction/function1_kpi.html");
    }
jfianl+apache poi实现execl数据导出到数据库

tip:导出的思路跟导入差不多,区别就是要把数据库的对象写入execl的单元格,最后通过输出流输出成新的execl文件,代码如下
前端:

/*如果是使用jfinal的方法导出数据库文件存储到execl的话前端最好使用href的方式,使用其它方式如ajax的方式
 会使jfinal的renderFile的方法失效,这里我也不知道怎么回事*/
 <a href="#(g_path)/test/download">导出execl</a>

后台:
这里只给出关键代码

public void download(){
	 //创建一个新的execl
	 Workbook copy = new XSSFWorkbook();
	 //创建sheet
	 XSSFSheet sheetCreat = (XSSFSheet)copy.createSheet("execl的导出.xlsx");
	 //这里写自己的sql语句
	String sql = ""; 
	//把结果集封装为一个list集合
	List<Record> records = Db.find(sql);
	int j = 0;//这个用于控制row的行数
	//for循环遍历record对象
	for(Record record:records){
	//创建行
 		XSSFRow row = sheetCreat.createRow(j);
 		//createCell(0)表示创建第一个cell单元格setCellValue()表示写入值,record.getStr()写自己数据库的字段名
 		row.createCell(0).setCellValue(record.getStr("id")); 
 		row.createCell(1).setCellValue(record.getStr("workcontent"));
 		j++;
	}
 	 String fileName = "d:/upload/copyfile.xlsx"; //自己定义输出路径
    	 copy.write(new FileOutputStream(fileName));
         File file = new File(fileName);
         //jfinal文件下载方法,传入file对象即可直接使用
         if(file.exists()){
         renderFile(file);
         }else{
            renderJson(Ret.fail("msg","没有可以导出的数据!"));
         }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值