1.相关jar包:
dom4j.jar
poi-3.8-beta5-20111217.jar
poi-ooxml-3.8-beta5-20111217.jar
poi-ooxml-schemas-3.8-beta5-20111217.jar
poi-scratchpad-3.8-beta5-20111217.jar
xmlbeans-2.3.0.jar
2.编写Excel-导出:
/**
* [Poi编程-导出到excel]
* @author HanJia
* @date 2017年4月12日 上午10:46:25
* @return
*/
public JSONObject excels(HttpServletRequest request){
JSONObject obj = new JSONObject();
//2.1创建列名数组(就是excel表格中的列名):
String[] colName = new String[]{"列名1","列名2","列名3","列名4","列名5","列名6"};
//2.2创建列名对应的key值(list结果会根据key与列名进行关联);
String[] key = new String[]{"key1","key2","key3","key4","key5","key6"};
//2.3创建工作薄
try {
//获取excel工作薄对象
Workbook workbook = new SXSSFWorkbook(-1);
//创建工作薄
Sheet sheet = workbook.createSheet();
/**--特殊设置第一行时-开始--**/
//创建第一行表格
//Row row0 = sheet.createRow(0);
//为第一行表格填充内容
//row0.createCell(0).setCellValue("");
//合并第一样单元格(开始行,结束行,开始列,结束列)
//CellRangeAddress cra=new CellRangeAddress(0, 0, 0, 6);
//添加进工作薄
//sheet.addMergedRegion(cra);
//将第二行设置为第一行开始写表格
//Row row = sheet.createRow(1);
/**--特殊设置第一行时-结束--**/
//创建第一行
Row row = sheet.createRow(0);
//设置行高
row.setHeightInPoints(16L);
//2.4为Excel设置列名指定不同的列宽
for (int i = 0; i < colName.length; i++) {
//创建当前行的每一列
Cell cell = row.createCell(i);
//设置列名
cell.setCellValue(colName[i]);
//设置列宽
if(colName[i].equals("列名3") || colName[i].equals("列名5")){
sheet.setColumnWidth(i, 5000);
}else{
sheet.setColumnWidth(i, 3000);
}
}
//2.5list为结果集([{key1=1,key2=2,key3=3,...}{key1=1,key2=2,..}])
List
//判断结果集
if(result!=null && !result.isEmpty()){
//记录添加到哪一行了
int count = 1;
//2.6遍历结果集并写入excel工作薄
for (Map map : result) {
//创建新的一行
Row row2 = sheet.createRow(count);
//组装数据
msg(map,row2,key);
//计数
count++;
}
}
//2.7刷出信息到excel
((SXSSFSheet) sheet).flushRows();
//2.8创建文件名字
String fileName = UUID.randomUUID()+".xls";
//2.9获取tomcat文件路径(WebApp/项目/files文件夹-需要在项目中WebContent下创建files文件夹)
String address = request.getSession().getServletContext().getRealPath("/")+"files\\";
//2.10打开文件流开始输出电子表格
OutputStream out = new FileOutputStream(address+fileName);
workbook.write(out);
if(out != null){
//关闭连接
out.close();
//返回成功状态和文件路径、名字
obj.put("result", "success");
obj.put("data", "/files/"+fileName);
return obj;
}
} catch (Exception e) {
e.printStackTrace();
}
//失败返回错误
obj.put("result", "error");
return obj;
}
/**
* [描述信息]
* @author HanJia
* @date 2017年4月12日 上午10:35:12
* @param map 数据
* @param row 行数
* @param key
*/
public void msg(Map map,Row row,String[] key){
//为每一行设置行高
row.setHeightInPoints(16L);
try {
//遍历key根据key组装内容
for (int i = 0; i < key.length; i++) {
//创建每一行的每一列
Cell cell = row.createCell(i);
//当前value不为空时写入
if(map.get(key[i])!=null && !map.get(key[i]).equals("")){
if(key[i].equals("key1")){
cell.setCellValue(map.get(key[i]).toString());
}else if(key[i].equals("key2")){
cell.setCellValue(map.get(key[i]).toString());
}else if(key[i].equals("key3")){
cell.setCellValue(map.get(key[i]).toString());
}else if(key[i].equals("key4")){
cell.setCellValue(map.get(key[i]).toString());
}else if(key[i].equals("key5")){
cell.setCellValue(map.get(key[i]).toString());
}else if(key[i].equals("key6")){
cell.setCellValue(map.get(key[i]).toString());
}else{
cell.setCellValue(map.get(key[i]).toString());
}
}else{
//为空时写""
cell.setCellValue("");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
1.相关jar包:
commons-fileupload.jar
commons-io.jar
2.编写Excel-导入:
beans.xml:
web.jsp:
java-controller:
/**
* [说明/描述]
* @author HanJia
* @date 2017年4月20日 下午4:40:45
* @version 1.0
* @copyright copyright (c) 2017
*/
java.controller
/**
* [controller]
* @author HanJia
* @date 2017年4月20日 下午5:00:07
* @param files
*/
@RequestMapping("/file")
@ResponseBody
//required=true,为前台必须发送该参数变量 值可以是null 或者 ""
public void fileControl(@RequestParam(required=true,value="files") MultipartFile[] files){
//非空判断
if(files!=null && files.length>0){
//调用file处理方法
this.fileService(files);
}
}
java-service:
/**
* [解析excel文件]
* @author HanJia
* @date 2017年4月20日 下午5:05:54
* @param files
*/
public void fileService(MultipartFile[] files){
//获取传来的file文件的文件名字
String fileName = files[0].getOriginalFilename();
//获取excel文件的类型 " .xls "
String fileType = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
//存放解析出来的excel内容
List> excelList = new ArrayList>();
//创建字节流
ByteArrayInputStream bs = null;
//创建工作簿
Workbook wb = null;
try {
//将文件内容转换为byte数组
byte[] bt = IOUtils.toByteArray(files[0].getInputStream());
//将byte数组放入字节流中
bs = new ByteArrayInputStream(bt);
//根据文件类型创建工作簿
if(fileType.equals("xls")){
wb = new HSSFWorkbook(bs);
}else{
wb = new XSSFWorkbook(bs);
}
//获取excel文件对象
Sheet sheet = wb.getSheetAt(0);
//逐行获取结果 i=1排除第一行 i=0不排除第一行
for( int i = 1; i < sheet.getLastRowNum()+1; i++){
Row row = sheet.getRow(i);
//存放每一行的数据
List cellList = new ArrayList();
//逐列获取结果
for (int j = 0; j < 12; j++) {
if(row.getCell(j)!=null){
//此处需要转换cell类型否则会有异常
row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
//获取当前行当前列的内容并去空格
String cellValue = this.dataUtils.strMethod(row.getCell(j).getStringCellValue());
cellValue = (cellValue!=null && !cellValue.equals("")) ? cellValue : " ";
//保存当前内容
cellList.add(cellValue);
}
else{
//没有值填空白
cellList.add(" ");
}
}
//保存解析出来的excel内容
excelList.add(cellList);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}