excel导入、下载功能
1、excel导入、下载功能
2、首先,我们是居于maven项目进行开发引入poi,如果不是那就手动下载相应的jar包引入项目就可以了
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
2、编写代码【excel 导入】
EXCEL工具类:
package com.ntgjj.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
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.XSSFWorkbook; import com.mysql.cj.x.protobuf.MysqlxCrud.Column;
/**
* 导出Excel文档工具类
* @date 2014-8-6
* */
public class ExcelUtil {/**
* 创建表
* 对workbook添加数据
* @param index 第几个工作表
* @param rowIndex 从第几行开始
* @param headList 表头数据
* @param dataList 数据
* @param hmap 字段对照如"name"对应的列为1
* @param shellName 工作表的名称
* @return
*/
public static Workbook addWorkBookData(int index,int rowIndex,List<String> headList,List<?> dataList,Map<String,Integer> hmap,String shellName) {
if(shellName == null || "".equals(shellName)) {
shellName = "数据";
}
Sheet wsheet = null;
Workbook workbook = new HSSFWorkbook();
if (index > 0) {
wsheet = workbook.getSheetAt(index);
} else {
wsheet = workbook.createSheet(shellName);
}
// 用于格式化单元格的数据
// DataFormat format = workbook.createDataFormat();
Font font = workbook.createFont();
font.setFontHeightInPoints((short) 16); // 字体高度
font.setColor(Font.COLOR_NORMAL); // 字体颜色正常类型的黑色。
font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 宽度
font.setItalic(false); // 是否使用斜体
font.setFontName("宋体");
// 设置单元格类型
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 水平布局:居中
cellStyle.setWrapText(true);
// 设置边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 自动换行
cellStyle.setWrapText(false);
// 创建行
Row row = wsheet.createRow(0);
if (headList != null) {
int listSize = headList.size();
for (int i = 0; i < listSize; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(headList.get(i));
cell.setCellStyle(cellStyle);// 设置单元格样式
cell.setCellType(Cell.CELL_TYPE_STRING);// 指定单元格格式:数值、公式或字符串
wsheet.autoSizeColumn((short)i); // 调整第一列宽度
}
} // 用于格式化单元格的数据
// DataFormat format = workbook.createDataFormat();
Font fontD = workbook.createFont();
fontD.setFontHeightInPoints((short) 10); // 字体高度
fontD.setColor(Font.COLOR_NORMAL); // 字体颜色正常类型的黑色。
fontD.setBoldweight(Font.BOLDWEIGHT_BOLD); // 宽度
fontD.setItalic(false); // 是否使用斜体
fontD.setFontName("宋体");
// 设置单元格类型
CellStyle cellStyleD = workbook.createCellStyle();
cellStyleD.setFont(fontD);
cellStyleD.setAlignment(CellStyle.ALIGN_CENTER); // 水平布局:居中
cellStyleD.setWrapText(true);
// 设置边框
cellStyleD.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyleD.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyleD.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyleD.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 添加数据
if (dataList != null) {
int dlen = dataList.size();
for (int i = 0; i < dlen; i++) {
// 开始创建行
Row rowData = wsheet.createRow(i+rowIndex);
//这是序号列
Cell row_col_cell0 = rowData.createCell(0);
row_col_cell0.setCellValue(i+1);
row_col_cell0.setCellStyle(cellStyleD);
FormMap<String, Object> fl = (FormMap<String, Object>) dataList.get(i);
if (hmap != null && hmap.size() > 0) {
for (String mkey : hmap.keySet()) {
Integer colIndex = hmap.get(mkey);
// 对应的值
String colVal = fl.get(mkey)+"";
Cell row_col_cell = rowData.createCell(colIndex);
row_col_cell.setCellValue(colVal);
row_col_cell.setCellStyle(cellStyleD);
}
}
}
}
return workbook;
} /**
* 将读取到的excel文件转为List<FormMap<String, Object>>对象
* @param in excels文件流
* @param fileName 文件名
* @param index 读取的文件工作表,默认0
* @param hmap 字段对照表
* @return List<FormMap<String, Object>>
* @throws Exception
*/
public static HashMap<String,FormMap<String, Object>> getFormMap(InputStream in, String fileName,int index,Map<String,Integer> hmap) throws Exception {
HashMap<String,FormMap<String, Object>> hashFormMap = null;
Workbook wb;
if (in != null) {
hashFormMap = new HashMap<String,FormMap<String, Object>>();
// 创建Excel工作薄
wb = new HSSFWorkbook(in);
if(index < 0) {
index = 0;
}
//获得需要读取的数据表
Sheet wsheet = wb.getSheetAt(index);
for (Row row : wsheet) {
int rowNum = row.getRowNum();
//跳出第一行 一般第一行都是表头没有数据意义
if(rowNum == 0){
continue;
}
FormMap<String, Object> fm = new FormMap<String, Object>();
String grzh = "";
if (hmap != null && hmap.size() > 0) {
for (String mkey : hmap.keySet()) {
Integer colIndex = hmap.get(mkey);
Cell cell_da = row.getCell(colIndex);
int celltype = cell_da.getCellType();
String value = null;
switch (celltype) {
case Cell.CELL_TYPE_STRING:
//String类型
value = cell_da.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
//Numer类型
value = cell_da.getNumericCellValue()+"";
break;
default:
break;
}
if(value != null && !"".equals(value) && "GRZH".equals(mkey)) {
grzh = value.replaceFirst(" ", "");
}
fm.put(mkey, value);
}
}
hashFormMap.put(grzh,fm);
}
return hashFormMap;
}
return null;
}
}
controler层:
@RequestMapping("importDwhjEexceFile")
    @ResponseBody
    public String importDwhjEexceFile(HttpServletRequest request) {
try {
            MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
            InputStream in = null;
            MultipartFile file = mRequest.getFile("importFile");
            if (file.isEmpty()) {
                throw new Exception("文件不存在!");
            }
            in = file.getInputStream();
            String fnm = file.getOriginalFilename();
            Map<String, Integer> hmap = new HashMap<String, Integer>();
            hmap.put("XINGMING", 1);
            hmap.put("GRZH", 2);
            hmap.put("YJCEHJ", 3);
            //------start 开始解析数据
            HashMap<String, FormMap<String, Object>> hashFormMap = ExcelUtil.getFormMap(in, fnm,0,hmap);
            //------end 开始解析数据
        } catch (Exception e) {
            e.printStackTrace();
            return "Exception";
        }
    }
EXCEL文档在线生成并下载:
/**
* 下载excel模板
* @param request
* @param response
* @throws Exception
*/
@RequestMapping("downloadDwhjEexceFile")
@ResponseBody
public void downloadDwhjEexceFile(HttpServletRequest request, HttpServletResponse response)
throws Exception {//从数据库获取需要导出的数据
List<BisJjmcFormMap> jjList = gjMapper.findBisHjPage();
Workbook wb = null;
String name = "模板-单位汇缴-名册";
String fileName = name+".xls"; if(null != jjList && jjList.size() > 0) {
List<String> headList = new ArrayList<String>();
//第二步 创建表头
headList.add("序号");
headList.add("姓名");
headList.add("账号");
headList.add("缴存合计(元)");
//第三步 写入每一行数据
Map<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("XINGMING", 1);
hmap.put("GRZH", 2);
hmap.put("YJCEHJ", 3);
wb = ExcelUtil.addWorkBookData(0, 1,headList, jjList, hmap,name+"-数据");
} response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
java.io.BufferedOutputStream bos = null;
try {
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition",
"attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
bos = new BufferedOutputStream(response.getOutputStream());
if(wb != null) {
//写excel
wb.write(bos);
bos.flush();
}
} catch (Exception e) {
logger.warn(fileName+"文件下载异常!"+e.fillInStackTrace());
} finally {
if (bos != null)
bos.close();
wb = null;
}
}
3、顺便写一下HTML-JS代码:
 function  import_or_export_excel_fun(){
     var root_div = document.createElement("div");
     root_div.style = 'text-align: center;';
     var root_div_form = document.createElement("form");
     var root_div_form_input = document.createElement("input");
     root_div_form_input.type = 'file';
     root_div_form_input.id = 'excelFile';
     root_div_form_input.accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel';
     root_div_form_input.style = 'padding-left: 10px;border-radius: 20px;background-color: #2281e0;color: #ffffff;';
     var root_div_form_a = document.createElement("a");
     root_div_form_a.value = '仅允许导入“xls”或“xlsx”格式文件!';
     root_div_form.appendChild(root_div_form_input);
     root_div_form.appendChild(root_div_form_a);
     root_div.appendChild(root_div_form);
     if(this){
         if(this.id == 'import_excel'){
             // 导入employee
             layer.open({
                 title:"excel文件导入",
                 content: root_div.innerHTML
                  ,btn: ['确认导入', '下载模板'] // 可以无限个按钮
                  ,yes: function(index, layero){
                      debugger
                     // 按钮的回调
                      var f_importForm_f = $("#excelFile")[0];
                        var fileObj_fs = f_importForm_f.files; // js 获取文件对象
                        var fs = fileObj_fs[0];
                        //var file = $("#excelFile")[0].files[0];// 获取文件
                        //name "shuidian.xlsx"  size 10112
                        if(fs && fs.size > 0){
                            var importUrl = rootPath + '/business/gj/importDwhjEexceFile.shtml';
                            var formFile = new FormData();
                            formFile.append("action", importUrl);
                            formFile.append("importFile", fs); // 加入文件对象
                            lr.ajax({
                                type : "post",
                                data :formFile,
                                url : importUrl,
                                contentType: false,// 且已经声明了属性enctype="multipart/form-data",所以这里设置为false
                                processData: false, // 不需要对数据做处理
                                dataType : 'json',// 这里的dataType就是返回回来的数据格式了html,xml,json
                                async : true, // 是否异步
                                cache : false,// 设置是否缓存,默认设置成为true,当需要每次刷新都需要执行数据库操作的话,需要设置成为false
                                success : function(data) {
                                     if(data == 'NOT_DATA'){
                                         msgd('导入失败',2,'数据错误,请先生成缴交名册!');
                                     }else if(data == 'Exception'){
                                         msgd('导入excel异常',2,'异常错误!');
                                     }else if(data == 'success'){
                                         msgd('导入excel成功',1,'导入成功!');
                                     }else if(data == 'OK'){
                                         msgd('成功提示',1,'导入excel成功!');
                                         gridHjsq.loadData();
                                     }
                                     IS_EISABLE = true;
                                     gridHjsq.loadData();
                                     getjcxx(true);
                               },erro : function(data) {
                                   msgd('错误',2,'导入Excel出错!');
                               }
                        });
                        }else{
                            msgd('提示',2,'请选择Excle文件!');
                            return false;
                        }
                  },btn2:function(index, layero){
                      var lay_ui;
                     //下载模板前校验是否存在名册
                      beforeDownCheck(lay_ui);
                  }
                  });
         }else{
              var lay_ui;
             //下载模板前校验是否存在名册
              beforeDownCheck(lay_ui);
         }
     }
 }
excel导入、下载功能的更多相关文章
- Java导出excel并下载功能
		
我们使用的导出并下载功能是利用一个插件叫POI的插件提供的导出功能,很实用:首先先导入Jar包: Jar包下载地址:http://poi.apache.org/ 官方文档地址:http://poi ...
 - ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
		
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
 - thinkphp-PHP实现Excel导入 导出功能
		
Excel导出 //功能:导出题库模板 public function get_contract_ex() { ob_get_clean(); header("Content-Typ:tex ...
 - 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
		
今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...
 - excel 导入 下载模板 demo
		
import org.apache.commons.beanutils.PropertyUtils;import org.apache.commons.lang3.StringUtils;import ...
 - 非常简单的数据,支持excel表格下载功能
		
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
 - 记录-java(jxl) Excel导入数据库
		
本内容主要包括(文件上传.excel2003数据导入数据库)excel导入数据库功能需要jxl jar包支持 下面是文件上传的前端测试代码 <%@ page language="ja ...
 - 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出
		
注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能.过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好. 序 由于 poi 本身只是 ...
 - 企业级自定义表单引擎解决方案(十六)--Excel导入导出
		
Excel对于后端管理系统来说,永远都是绕不开的话题,开发Excel导入导出功能往往都比较麻烦,因为涉及到Excel导入模板制作.Excel表格数据与系统数据库表字段映射.Excel导入数据验证.验证 ...
 
随机推荐
- js的基本语法规范
			
1.不要在同一行声明多个变量: 2.使用===/!==来比较true/false的返回值: 3.使用字面量替代new Array这种形式: 4.不要使用全局函数: 5.switch语句必须带有defa ...
 - tp6 控制器不存在:app\index\controller\Index
			
tp6 控制器不存在:app\index\controller\Index config/app.php 修改如下 'auto_multi_app' => true,
 - keras 或 tensorflow 调用GPU报错:Blas GEMM launch failed
			
GPU版的tensorflow在模型训练时遇到Blas GEMM launch failed错误,或者keras遇到相同错误(keras 一般将tensorflow作为backend,如果安装了GPU ...
 - Python脚本的name
 - Yacc - 一个生成 LALR(1) 文法分析器的程序
			
SYNOPSIS 总览 yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename DESCRIPTION 描述 Yacc 从 f ...
 - uptime - 告知系统运行了多久时间
			
SYNOPSIS(总览) uptime uptime [-V] DESCRIPTION(描述) uptime 给出下列信息的一行显示. 当前时间, 系统运行了多久时间, 当前登陆的用户有多少, 以及前 ...
 - centos7.x部署php7.0、mysql
			
1.安装httpd yum install httpd systemctl start httpd.service #启动命令 systemctl stop httpd.service #停止命令 s ...
 - Deployment的使用
			
RC和RS的功能基本上是差不多的,唯一的区别就是RS支持集合的selector. RC|RS是Kubernetes的一个核心概念,当我们把应用部署到集群之后,需要保证应用能够持续稳定的运行,RC|RS ...
 - 使用 SpringBoot 配置发送邮件功能
			
1.使用 SpringBoot 配置发送邮件功能 项目总体结构 用户表设计 SET FOREIGN_KEY_CHECKS=0; CREATE DATABASE sample; USE sample; ...
 - HDFS(Hadoop Distributed File System)的组件架构概述
			
1.hadoop1.x和hadoop2.x区别 2.组件介绍 HDFS架构概述1)NameNode(nn): 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个 ...