java 百度poi_java poi 导入

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我用的是poi3.9导入,就是利用文件流数据转换实现ajax提交文件上传,点击导入按钮,弹出模态框,然后把excel的数据转换为list集合,然后传回bsgrid显示,下面直接看代码:

页面:选择文件:

选择文件

对应的js:

function changefile(ts){

var is=$(ts).val();

$("#Sp_file").text(is);

}

$("#btn_file").click(function(){

$("#inp_file").click();

});

效果:

9e607d065d9996578964e63e0d98c5d7.png

导入按钮:

function DaoRu(){

//获取input的val值

var fileName= $("#inp_file").val().toString();

//自定义导入文件类型的后缀名

var imgExt = new Array(".xls",".xlsx");

//获取文件的后缀名并判断是否符合

if(imgExt.contain(fileName.extension())){

//获取文件

var file = document.getElementById('inp_file').files[0];

//实例化FileReader文件对象

var reader = new FileReader();

reader.onloadend= function () {

//实现两次uri编码,如果一次的话java那边解码之后还是乱码的

// reader.result是获取reader.readAsArrayBuffer的值

tableUser.search({filterExcel:encodeURIComponent(encodeURIComponent(arrayBufferToBase64(reader.result).toString()))});

};

if (file) {

//如果是文件,则获取文件的转换为ArrayBuffer

reader.readAsArrayBuffer(file);

}

}else{

tr=false;

alert("选择的不是Excel文件!");

}

}

用到的封装的js方法:

//获取文件名后缀名

String.prototype.extension= function(){

var ext = null;

var name = this.toLowerCase();

var i = name.lastIndexOf(".");

if(i > -1){

var ext = name.substring(i);

}

return ext;

}

//判断Array中是否包含某个值

Array.prototype.contain= function(obj){

for(var i=0; i

if(this[i] === obj)

return true;

}

return false;

};

function arrayBufferToBase64(buffer) {

var binary = '';

//Uint8Array 对象8 位无符号整数值的类型化数组

var bytes = new Uint8Array(buffer);

var len = bytes.byteLength;

for (var i = 0; i < len; i++) {

//对buffer一个一个的转码

binary +=String.fromCharCode(bytes[i]);

}

//base-64 解码使用方法btoa

return window.btoa(binary);

}

后台:

publicstatic List decoderBase64File(String base64Code)

throws Exception {//后台java代码给searchtext赋值的时候,本身已经使用了一次解码,不过解码的结果依然不对。

// 所以我们可以在页面上进行两次编码操作,这样后台自动的那次就可以抵消掉一次,

// 然后在使用 searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");进行一次解码就好了。

/* 因为Tomcat服务器会自动帮你做一次URLDecode,所以再加上你自己在代码里面写的URLDecode,

一共就是两个Decode了,既然要两次Decode,当然就需要两次Encode了*/

// base64Code= base64Code.replace(" ","+");

//将参数字符串解码进行URl解码;

base64Code= URLDecoder.decode(base64Code, "UTF-8");

//将base64字符串转换成byte数组

byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);

// 将byte数组转换成流

ByteArrayInputStream swapStream = new ByteArrayInputStream(buffer);

//声明HSSFWorkbook

HSSFWorkbook workbook=null;

//声明list,存放Excel里面的数据

List list=null;

try {

//将流转换为Excel

workbook= new HSSFWorkbook(swapStream);

//定义一个字符串数组,该数组与Excel导入的表头一一对应

String[] strings=new String[]{"用户名称","用户账号","用户密码","用户类型","座右铭","年龄","性别"};

HSSFSheetsheet=workbook.getSheetAt(0);

//获取sheet中最前行行号

HSSFRow row=sheet.getRow(0);

//循环判断导入Excel的数据与规定的字符串数组是否一一对应,如果没有,就自定义异常

for(int j=0,l=strings.length;j

HSSFCell cell=row.getCell(j);

cell.setCellType(Cell.CELL_TYPE_STRING);//设置单元格数据类型为字符串

String value=cell.getStringCellValue().trim();

if(!strings[j].equals(value)){

int b= 4/0;

}

}

//表头对应,则实例化list数据

list=new ArrayList();

int lastRowNum=sheet.getPhysicalNumberOfRows();//获取行数

//因为有一行是表头,所有数据从1索引开始;

int firstRowNum=1;

for(int i = firstRowNum; i < lastRowNum; i++){

//获取循环的行对象

row=sheet.getRow(i);

//获取该行的列数;

int lastCellNum=row.getPhysicalNumberOfCells();//获取列数

//判断如果列数与规定的列数不一致,则自定义报错

if(lastCellNum!=strings.length){

int b= 4/0;

}

//实例化po

userPO po=new userPO();

//循环行的单元格,然后赋值给po

for(int z=0;z

//获取单元格对象

HSSFCellcell=row.getCell(z);

cell.setCellType(Cell.CELL_TYPE_STRING);//设置单元格数据类型为字符串

//获取单元格的值

Stringvalue=cell.getStringCellValue().trim();

// Integer数据类型如果字段没有赋值,json转换会报错

//判断当前单元格是多少,则1给对应的po赋值

switch(z){

case 0:{

po.setUserName(value);

break;

}

case 1:{

po.setUserCode(value);

break;

}

case 2:{

po.setPassword(value);

break;

}

case 3:{

if(value.equals("前台用户")){

po.setUserType(true);

}else{

po.setUserType(false);

}

break;

}

case 4:{

po.setMotto(value);

break;

}

case 5:{

po.setAge(Integer.valueOf(value));

break;

}

case 6:{

if(value.equals("男")){

po.setSex(true);

}else{

po.setSex(false);

}

break;

}

}

}

//循环完之后将po赋值给list

list.add(po);

}

} catch (Exception e) {

list=null;

}finally{

swapStream.close();

}

return list;

}

Excel导入:

publicvoid inExcelUser(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=utf-8");

//获取页面传来的参数

String dd=request.getParameter("filterExcel");

List list=null;

try {

//调用方法

list=decoderBase64File(dd);

} catch (Exception e1) {

e1.printStackTrace();

}

try {

Bsgrid bsgrid=new Bsgrid();

bsgrid.setData(list);

bsgrid.setSuccess(true);

bsgrid.setCurPage(1);

bsgrid.setTotalRows(list.size());

JSONObject jsonObject=JSONObject.fromObject(bsgrid);

PrintWriter out=response.getWriter();

out.write(jsonObject.toString());

out.flush();

out.close();

return;

} catch (Exception e) {

e.printStackTrace();

}

}

效果图如下:

a8d33f63080ba089170e0f272bccb5de.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值