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导入数据验证.验证 ...
随机推荐
- PHP72w安装
PHP72w # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm ...
- Java SE(1)
Java SE基础回顾 1.循环语句中的break是终止全部循环,跳出循环体:而continue是终止本次循环,跳执行下一循环 2.return语句有两个作用:返回值:结束方法的运行 3.对于java ...
- 微服务(Microservices)和服务网格(Service Mesh)的架构概念
注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...
- 字符串利用%02d将月份前加0
i = 20190104 a = 2019 b = 1 c = 4 s = "%04d-%02d-%02d" % (a, b, c)
- 覆盖element ui 的样式
我们可以使用 !important 来覆盖element ui 的样式 首先先在浏览器中找到 我们所要修改的样式 ,然后找到她的 class 重新写他的样式 ,例如 . app { width ...
- CSIC_716_20191205【TCP-解决粘包问题、UDP模板】
---------------------------------------------------------------------------------------------------- ...
- shell脚本中:单引号和双引号的区别
单引号和双引号的区别 前面我们还留下一个疑问,定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明: #!/bin ...
- 23.包、修饰符、jar
下面都是在记事本里面写代码 1. 包的定义格式: package 包名(全小写) 例如: package a; 注意: 1)package语句必须位于java文件的第一个语句 2.编译运行 注意: ...
- Dom编程优化
对Dom的访问代价是昂贵,在富网页应用中通常是性能的瓶颈,所以对Dom的优化十分重要. 一.访问和修改Dom元素 浏览器通常要求JavaScript和Dom实现保持独立的.例如,在Internet E ...
- delphi常见的错误
******************************* * 编 译 错 误 信 息 * ******************************* ';' not allowed befo ...