提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:
用idea开发软件,写导出代码。 其他开发软件可供参考!
提示:以下是本篇文章正文内容,下面案例可供参考
一、pom文件导入对应的jar包
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
说明:这段代码粘贴到pom文件里 刷新文件可自动下载
二、前台HTML页面
1.引入bootstrap文件
代码如下(示例):引入对应的js和css
<!-- file 文件 --> <script src="../js/bootstrap/bootstrap-fileinput/js/fileinput.js"></script> <script src="../js/bootstrap/bootstrap-fileinput/js/locales/zh.js"></script> <link rel="stylesheet" href="../js/bootstrap/bootstrap-fileinput/css/fileinput.css">
2.javascript里定义函数映射到后台路径
代码如下(示例):
//导出 exportUser = function(){ location.href="/user/exportUser"; }
location.href="/user/exportUser"; 后台映射路径名 自定义
三、后台
// 导出 @Override public void exportUser(HttpServletResponse response) { // 先查询 把要导出的数据查询出来 List<UserBean> list = userDao.selectList(null); //需要转码的字段 先定义业务字段 用于存数据 然后下面把对应map存的字段替换掉 for (UserBean String : list) { if (String.getSeniority() == 1){ String.setNewSeniority("无工作年限"); }else if (String.getSeniority() == 2){ String.setNewSeniority("1-2年"); }else if (String.getSeniority() == 3){ String.setNewSeniority("2-3年"); }else if (String.getSeniority() == 4){ String.setNewSeniority("3-5年"); }else if (String.getSeniority() == 5){ String.setNewSeniority("5年以上"); } if (String.getEducation() == 1){ String.setNewEducation("大专"); }else if (String.getEducation() == 2){ String.setNewEducation("本科"); }else if (String.getEducation() == 3){ String.setNewEducation("硕士"); } } // new 有顺序的map 泛型 String Map<String, String> map = new LinkedHashMap<>(); map.put("id","id"); map.put("companyName","公司名称"); map.put("demand","招聘需求"); map.put("address","地址"); map.put("newSeniority","工作年限"); map.put("salaryLow","最低薪资"); map.put("salaryHight","最高薪资"); map.put("newEducation","学历"); String jsonString = JSONArray.toJSONString(list);//---把 list 转成 string JSONArray array = JSONArray.parseArray(jsonString);//---string 转成 json数组 PoiUtils.exportExcel(response,array,map,"招聘需求","招聘需求表.xlsx"); }
说明: PoiUtils.exportExcel 调用的是 PoiUtils工具类里的 exportExcel导出方法
对应的工具类 仅供引用!!!
/**
* <pre>项目名称:
* 文件名称:PoiUtils.java
*/
package com.jk.zy.utils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class PoiUtils {
/**
* <pre>importExcel(poi导入excel)
*/
public static List importExcel(MultipartFile filename,String[] fieldarr,Class cc){
//1、创建导入的文件
InputStream input;
List list = null;
try {
input = filename.getInputStream();
//2、创建excel的工作表
//获取上传的文件名称
String oldname = filename.getOriginalFilename();
//判断是03还是07
Workbook book = null;
if(oldname.endsWith(".xls")){//03 以...结尾
book = new HSSFWorkbook(input);
}else{//07
book = new XSSFWorkbook(input);
}
//3、获取sheet页
Sheet sheet = book.getSheetAt(0);
//4、获取表格的值
//获取行数
int rownum = sheet.getLastRowNum();//2
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < rownum ; i++) {
Row row = sheet.getRow(i+1);
JSONObject jsonObject = new JSONObject();
//{"id","name".....}
for (int j = 0; j < fieldarr.length; j++) {
//String value = row.getCell(j).getStringCellValue();
Cell cell = row.getCell(j);
if(cell!=null){
//调用方法获取单元格的值
String value = getMyCellType(cell);
//把值存放josn对象
jsonObject.put(fieldarr[j], value);
}
}
jsonArray.add(jsonObject);
}
//把json数组转换成list集合
list = JSONArray.parseArray(jsonArray.toJSONString(), cc);
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* <pre>exportExcel(poi导出excel)
* 1、sheet名称 2、表头 3、list:导出的数据 4、文件名称 5、json的参数
* @param response 响应对象
* @param dataArray list集合转换成json数组
* @param map key:json的参数 value :标题
* @param sheetName sheet页的名称
* @param excelname 导出的文件名称 后缀 excel </pre>
*/
public static void exportExcel(HttpServletResponse response, JSONArray dataArray, Map<String,String> map, String sheetName,String excelname) {
//创建表格
XSSFWorkbook book=new XSSFWorkbook();
//创建sheet页
XSSFSheet sheet=book.createSheet(sheetName);
//创建表头
Iterator<String> iterator = map.keySet().iterator();
Row row = sheet.createRow(0);
int i = 0;
List<String> list = new ArrayList<String>();
//{"id","name","other","sexname","cityname"}
while (iterator.hasNext()){//判断是否有下一个值
String key = iterator.next();//获取下一个值
Cell cell = row.createCell(i);
//给表头的单元格赋值
cell.setCellValue(map.get(key));
list.add(key);
i++;
}
//写入数据
for(int j = 0; j < dataArray.size(); j++){
//把用户对象转换成json对象
JSONObject jsonObject = dataArray.getJSONObject(j);
Row dataRow = sheet.createRow(j+1);//创建行
// //{"id","name","other","sexname","cityname"}
for(int k = 0; k < list.size(); k++){
String field = list.get(k);//id、name
String value = jsonObject.getString(field);//1、张三
dataRow.createCell(k).setCellValue(value);
}
}
try {
//生成excel文件
//OutputStream out = new FileOutputStream("F:/2003.xlsx");
//设置响应为文件下载:header设置
response.setHeader("content-disposition", "attchment;filename="+URLEncoder.encode(excelname,"utf-8"));
ServletOutputStream out = response.getOutputStream();
book.write(out);
//7、关闭流
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//获得cell的值
private static String getMyCellType(Cell cell){
String value = "";
switch (cell.getCellType()) {//获取单元格的类型
case Cell.CELL_TYPE_NUMERIC: // 数字或日期 0
//如果为时间格式的内容
if (DateUtil.isCellDateFormatted(cell)) {//日期
//注:format格式 yyyy-MM-dd hh:mm:ss 中小时为12小时制,若要24小时制,则把小h变为H即可,yyyy-MM-dd HH:mm:ss
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value=sdf.format(cell.getDateCellValue()).toString();
break;
} else {//数值
value = new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_STRING: // 字符串 1
value = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN: // Boolean 4
value = cell.getBooleanCellValue() + "";
break;
case Cell.CELL_TYPE_FORMULA: // 公式 2
value = cell.getCellFormula() + "";
break;
case Cell.CELL_TYPE_BLANK: // 空值 3
value = "";
break;
case Cell.CELL_TYPE_ERROR: // 故障 5
value = "非法字符";
break;
default:
value = "未知类型";
break;
}
return value;
}
}