Excel表格内容导出到页面

 

引入org.apache.poi.ss.usermodel

public void addExcelBooks() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String filepath = request.getParameter("filepath");
String fileType = filepath.substring(filepath.lastIndexOf("."));
InputStream is = null;
Workbook wb = null;
try {
String filedir = ServletActionContext.getServletContext().getRealPath(filepath);
File file = new File(filedir);
is = new FileInputStream(file);
if (fileType.equals(".xls")) {
wb = new HSSFWorkbook(is);
} else if (fileType.equals(".xlsx")) {
wb = new XSSFWorkbook(is);
} else {
throw new Exception("读取的不是Excel文件");
}
JSONArray jsonarr = new JSONArray();
for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) {//excel的sheet
Sheet hf = wb.getSheetAt(numSheet);
if (hf == null) {
continue;
}
JSONObject jsonChildObj = new JSONObject();
for (int rowNum = 1; rowNum <= hf.getLastRowNum(); rowNum++) {
Row hr = hf.getRow(rowNum);
if (hr == null) {
break;
}
Cell hxh = hr.getCell(0);
Cell hca = hr.getCell(1);
Cell hcb = hr.getCell(2);
if (hca == null || hca.toString().equals("") || hcb == null || hcb.toString().equals("") || hxh == null || hxh.toString().equals("")) {
break;
}
if (hxh.getCellType() != Cell.CELL_TYPE_NUMERIC) {判断类型对否excel表的第一列为书序为int类型对应的就是CELL_TYPE_NUMERIC
jsonChildObj.put("fail", "FAIL");
jsonarr.add(jsonChildObj);
// throw new Exception("文件内容格式错误");
} else {
int xnumber = (int) hr.getCell(0).getNumericCellValue();
String name = hr.getCell(1).getStringCellValue();
int revision = (int) hr.getCell(2).getNumericCellValue();

//这里转换为json类型前台通过ajax获得
jsonChildObj.put("xnumber", xnumber);
jsonChildObj.put("name", name);
jsonChildObj.put("revision", revision);
jsonarr.add(jsonChildObj);
}
}
}
jsonPrint(jsonarr);

} catch (FileNotFoundException e) {
throw e;
} finally {
if (wb != null) {
wb = null;
}
if (is != null) {
is.close();
}
}
}

 

转载于:https://www.cnblogs.com/niuxi/p/7250448.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

综述ASP.NET下的AJAX模式

本文内容: 一、导言 二、XMLHttpWebForm模式 三、XMLHttpHttpHandler模式 四、ASP.NET 2.0/3.5回调模式 五、AJAX框架模式 -------------------------------------------------------------------------------------------------- 一、导言 在这篇文章中&#xff0c;将介绍…

JIRA-6.3.6安装与破解

首先下载JIRA-6.3.6的安装包&#xff1a; wget http://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-6.3.6.tar.gz 在这里笔者新建JIRA用户来专门运行JIRA useradd jira passwd jira 把包解压到jira的宿主目录(/home/jira)下&#xff1a; tar -zxvf atla…

求二进制数中1的个数

要求&#xff1a;对于一个字节&#xff08;8bit&#xff09;的变量&#xff0c;求其二进制表示中“1”的个数&#xff0c;要求算法的执行效率尽可能地高。 大多数的读者都会有这样的反应&#xff1a;这个题目也太简单了吧&#xff0c;解法似乎也相当地单一&#xff0c;不会有太…

面试题 锁消除是什么

锁消除是在编译器级别的事情。 在即时编译器时&#xff0c;如果发现不可能被共享的对象&#xff0c;则可以消除这些对象的锁操作。 也许你会觉得奇怪&#xff0c;既然有些对象不可能被多线程访问&#xff0c;那为什么要加锁呢&#xff1f;写代码时直接不加锁不就好了。 但是…

面试题-- 什么是偏向锁

所谓的偏向&#xff0c;就是偏心&#xff0c;即锁会偏向于当前已经占有锁的线程 。 大部分情况是没有竞争的&#xff08;某个同步块大多数情况都不会出现多线程同时竞争锁&#xff09;&#xff0c;所以可以通过偏向来提高性能。即在无竞争时&#xff0c;之前获得锁的线程再次获…

Collections.min()和Collections.max()的使用

取集合中的最小值 Collections.min(); 取集合中的最大值 Collections.max(); public class TestCollectionMinMax {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(3);list.add(7);list.add(9);list.add(1);list.add(…

python学习之路(九)

这一节主要讲的是装饰器。装饰器是一个非常好用的&#xff0c;用于装饰已有函数的函数功能。 其优点是不用修改调用方式&#xff0c;还不用修改源代码。 他的思想是&#xff1a;函数既变量&#xff1b;高阶函数&#xff1b;嵌套函数。 现在来尝试写装饰器 有两个函数 各自实现自…

java http请求实现_java工程实现http请求接口

java工程实现http请求接口java工程实现http请求接口1.实现代码package com.home;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.https…

Java集合中removeIf的使用

使用removeIf方法从List中删除元素 在JDK1.8中&#xff0c;Collection以及其子类新加入了removeIf方法&#xff0c;作用是按照一定规则过滤集合中的元素。这里展示removeIf的用法。 需求是过滤掉学生中分数为为18以下的&#xff0c; 一个学生实体类 Data public class Studen…

Java中lombok @Builder注解使用详解

简介 Lombok大家都知道&#xff0c;在使用POJO过程中&#xff0c;它给我们带来了很多便利&#xff0c;省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外&#xff0c;通过Builder注解&#xff0c;lombok还可以方便的实现建造者模式&#xff0c;创建对象 …

Java中Collections.singletonList用法

Collections.singletonList()返回的是不可变的集合&#xff0c;但是这个长度的集合只有1&#xff0c;可以减少内存空间。但是返回的值依然是Collections的内部实现类&#xff0c;同样没有add的方法&#xff0c;调用add&#xff0c;set方法会报错 调用add方法报错 Exception in…

CF Round410 D. Mike and distribution

D. Mike and distribution 构造法 798D - Mike and distribution In the beginning, its quite easy to notice that the condition " 2(ap1  ...  apk) is greater than the sum of all elements in A " is equivalent to " ap1  ...  apk is greater …

ADSL提速 从入门到精通

虽然现在的宽带速率已经很快了&#xff0c;但是大家还是希望在以下方面提升一下应用速度&#xff1a;电影BT下载时、在线影音播放时、FTP文件传送时等。广大网友也因此探寻出不少提升宽带速率的方法&#xff0c;那么&#xff0c;都有哪些简单可行的提速方法呢&#xff1f;它们的…

Swift开发图解入门

《论语卫灵公》有一段经典对白&#xff1a;『子贡问为仁。子曰&#xff1a;工欲善其事&#xff0c;必先利其器。……』。对于一个程序猿来说&#xff0c;好的工具不意味着一定能产生优质的代码。可是好的工具对提升开发效率的作用还是不言而喻的。想要用Swift做iOS开发。唯一可…

java 负数存储结构_负数在java中的存储和读取过程 | 学步园

问题描述&#xff1a;将-5存储在文本文件中&#xff0c;再读取出来显示到控制台;预备知识&#xff1a;1.在java中使用补码处理数字&#xff0c;而且byte(8)的数字在扩展成int(32)类型的时候&#xff0c;正数填充0&#xff0c;负数填充1;2.负数的转变过程&#xff0c;正数的原码…