- 浏览: 129511 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (118)
- 2014_Java (11)
- 2014_Java Web (25)
- Ext专栏 (7)
- HTML相对路径(Relative Path)和绝对路径(Absolute Path) (1)
- 开发工具 (3)
- 最新的Adobe Dreamweaver CS5序列号,Adobe Photoshop cs5 (1)
- HTML (3)
- JAVASCRIPT (3)
- oracle (12)
- jQuery (1)
- DOM (1)
- EL和JSTL (1)
- Discuz (1)
- 面试总结 (1)
- 网络编程 (1)
- javaweb_struts1 (0)
- webservices (5)
- weblogic (2)
- java.net.ProtocolException: Didn't meet stated Content-Length (0)
- wrote: '0' bytes instead of stated: '47789' bytes (0)
- httpclient (0)
- eclipse (1)
- dblink (0)
- EJB (0)
- 传智播客java学习 (2)
- 前台界面效果 (1)
- 生活 (0)
- linux (2)
- 开源软件 (3)
- 开发技术系列 (3)
- mssql2000 (1)
- mysql (4)
- jdbc (1)
- struts (0)
- 开发帮助 (0)
- runtime modeler error: Wrapper class org.zttc.service.jaxws.Add is not found. Have you run APT to generate them? (1)
- MyBatis (0)
- JSON (1)
- 账号 (0)
- Quartz (4)
- 系统安装 (1)
- 电脑基础 (1)
- Hibernate (5)
- 圆通快递专栏 (1)
- openoffice专栏 (1)
- 多线程 (1)
- 1 (0)
- 生活感悟 (1)
最新评论
-
pktangshao:
不错.效果挺好的.
前台界面效果----div弹出层,后面变色不可编辑 -
星尘pxj:
大神,我也出现了这样的问题,能将jar包传我一下吗
java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUp -
springsen:
非常感谢,按照这个方法,现在已经解决了
webservice
上班的时候公司要求做一个从网页上导入excel,研究了半天后,开始着手去实现它。
思路很简单:
1、做一个jsp页面,页面包括浏览文件,提交文件
2、将excel文件上传到服务器
3、 服务器对该excel文件进行读出
4、 将excel文件内容显示到页面上
环境搭建:
需要准备的包:commons-fileupload-1.2.1.jar & commons-io-1.3.2.jar 这两个包是上传用的
jxl.jar 这个包是读取excel用的 下载地址 :http://sourceforge.net/projects/jexcelapi/ 建议不要用新版本,因为新版本会出现与jdk版本兼容问题,如果运行程序出现问题的时候请切换旧版本。
一、Jsp页面
注意:1、在jsp页面的form要使用html本身的<form>标记,而不要使用第三方视图开源框架的form标记,例如不要使用strut的<htm:form>。
2、在<form>的属性里必须加上 ENCTYPE="multipart/form-data"
<h1>导入Excel</h1>
<hr>
<form action="importExcel" method="post" enctype="multipart/form-data">
<input type="file" name="importExcel" id="importExcel">
<input type="submit" value="导入">
</form>
二、上传excel的Servlet
注意:1、导入的excel最好用后缀为.xls,如果用.xlsx可能会导不进去。
2、在调用FileItem的write方法前必须保证文件的存放路径存在否则出现异常。commons fileupload不会自动为你建立不存在的目录。
3、上传后会对文件进行重命名,以时间为文件名进行命名
public class ImportExcelServlet extends HttpServlet {
//缓冲区域
File tempPathFile;
//默认路径
String uploadTo = "D:\\";
// 支持的文件类型
String[] errorType = { ".xls" };
//格式化日期
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//取得服务器真实路径
uploadTo = req.getSession().getServletContext().getRealPath("\\") + "upload\\";
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小,这里是4kb
factory.setSizeThreshold(4096);
// 设置缓冲区目录
factory.setRepository(tempPathFile);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
// 设置最大文件尺寸,这里是4MB
upload.setSizeMax(4*1024*1024);
// 开始读取上传信息
List fileItems = new ArrayList();
try {
fileItems = upload.parseRequest(req);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
System.out.println("fileItems的大小是" + fileItems.size());
// 正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息
System.out.println("正在处理" + item.getFieldName());
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if ((name == null || name.equals("")) && size == 0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result) {
boolean flag = false;
for (int temp = 0; temp < errorType.length; temp++) {
if(m.group(1).endsWith(errorType[temp])) {
flag = true;
}
}
if(!flag) {
System.out.println("上传了不支持的文件类型");
throw new IOException(name + ": wrong type");
}
try {
String fileName = uploadTo + format.format(new Date()) + m.group(1).substring(m.group(1).indexOf("."));
item.write(new File(fileName));
//调用ReadExcel类进行读出excel
ReadExcel.readExcel(fileName, resp.getWriter());
System.out.println(name + "\t\t" + size);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
// 这里添加对不是上传文件表单项的处理
System.out.println("这是一个表单项");
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void init() throws ServletException {
tempPathFile = new File("d:\\temp\\buffer\\");
if (!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
}
}
三、读出excel文件内容的类
public class ReadExcel {
public static void readExcel(String pathname, PrintWriter out) {
try {
//打开文件
Workbook book = Workbook.getWorkbook(new File(pathname)) ;
//取得第一个sheet
Sheet sheet = book.getSheet(0);
//取得行数
int rows = sheet.getRows();
for(int i = 0; i < rows; i++) {
Cell [] cell = sheet.getRow(i);
for(int j=0; j<cell.length; j++) {
//getCell(列,行)
out.print(sheet.getCell(j, i).getContents());
out.print(" ");
}
out.println("<br/>");
}
//关闭文件
book.close();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结:上面只是一个很简单的导入excel文件的例子,如果想做完善还得下更多的功夫。在做的过程中如果出现Workbook打不开,请更换jxl版本,尽量用低版本,这样与jdk兼容会好点,我在做这个导入excel的时候,就遇到了版本兼容问题,处理了半天才发现问题所在。所以想做这个例子给大家参考,以后不要犯和我同样的错误。O(∩_∩)O哈哈~
思路很简单:
1、做一个jsp页面,页面包括浏览文件,提交文件
2、将excel文件上传到服务器
3、 服务器对该excel文件进行读出
4、 将excel文件内容显示到页面上
环境搭建:
需要准备的包:commons-fileupload-1.2.1.jar & commons-io-1.3.2.jar 这两个包是上传用的
jxl.jar 这个包是读取excel用的 下载地址 :http://sourceforge.net/projects/jexcelapi/ 建议不要用新版本,因为新版本会出现与jdk版本兼容问题,如果运行程序出现问题的时候请切换旧版本。
一、Jsp页面
注意:1、在jsp页面的form要使用html本身的<form>标记,而不要使用第三方视图开源框架的form标记,例如不要使用strut的<htm:form>。
2、在<form>的属性里必须加上 ENCTYPE="multipart/form-data"
<h1>导入Excel</h1>
<hr>
<form action="importExcel" method="post" enctype="multipart/form-data">
<input type="file" name="importExcel" id="importExcel">
<input type="submit" value="导入">
</form>
二、上传excel的Servlet
注意:1、导入的excel最好用后缀为.xls,如果用.xlsx可能会导不进去。
2、在调用FileItem的write方法前必须保证文件的存放路径存在否则出现异常。commons fileupload不会自动为你建立不存在的目录。
3、上传后会对文件进行重命名,以时间为文件名进行命名
public class ImportExcelServlet extends HttpServlet {
//缓冲区域
File tempPathFile;
//默认路径
String uploadTo = "D:\\";
// 支持的文件类型
String[] errorType = { ".xls" };
//格式化日期
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//取得服务器真实路径
uploadTo = req.getSession().getServletContext().getRealPath("\\") + "upload\\";
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小,这里是4kb
factory.setSizeThreshold(4096);
// 设置缓冲区目录
factory.setRepository(tempPathFile);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
// 设置最大文件尺寸,这里是4MB
upload.setSizeMax(4*1024*1024);
// 开始读取上传信息
List fileItems = new ArrayList();
try {
fileItems = upload.parseRequest(req);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
System.out.println("fileItems的大小是" + fileItems.size());
// 正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息
System.out.println("正在处理" + item.getFieldName());
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if ((name == null || name.equals("")) && size == 0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result) {
boolean flag = false;
for (int temp = 0; temp < errorType.length; temp++) {
if(m.group(1).endsWith(errorType[temp])) {
flag = true;
}
}
if(!flag) {
System.out.println("上传了不支持的文件类型");
throw new IOException(name + ": wrong type");
}
try {
String fileName = uploadTo + format.format(new Date()) + m.group(1).substring(m.group(1).indexOf("."));
item.write(new File(fileName));
//调用ReadExcel类进行读出excel
ReadExcel.readExcel(fileName, resp.getWriter());
System.out.println(name + "\t\t" + size);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
// 这里添加对不是上传文件表单项的处理
System.out.println("这是一个表单项");
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void init() throws ServletException {
tempPathFile = new File("d:\\temp\\buffer\\");
if (!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
}
}
三、读出excel文件内容的类
public class ReadExcel {
public static void readExcel(String pathname, PrintWriter out) {
try {
//打开文件
Workbook book = Workbook.getWorkbook(new File(pathname)) ;
//取得第一个sheet
Sheet sheet = book.getSheet(0);
//取得行数
int rows = sheet.getRows();
for(int i = 0; i < rows; i++) {
Cell [] cell = sheet.getRow(i);
for(int j=0; j<cell.length; j++) {
//getCell(列,行)
out.print(sheet.getCell(j, i).getContents());
out.print(" ");
}
out.println("<br/>");
}
//关闭文件
book.close();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结:上面只是一个很简单的导入excel文件的例子,如果想做完善还得下更多的功夫。在做的过程中如果出现Workbook打不开,请更换jxl版本,尽量用低版本,这样与jdk兼容会好点,我在做这个导入excel的时候,就遇到了版本兼容问题,处理了半天才发现问题所在。所以想做这个例子给大家参考,以后不要犯和我同样的错误。O(∩_∩)O哈哈~
发表评论
-
escape,encodeURI,encodeURIComponent
2013-06-27 09:25 687js对文字进行编码涉及3个函数:escape,encodeUR ... -
JSP—传统标签TagSupport和BodyTagSupport类的生命周期和方法
2013-06-26 14:37 824一、传统标签的开发 1、 在开发传统标签之前,需 ... -
jsp自定义标签的执行流程
2013-03-19 21:26 6941、客户端访问jsp页面,遇到自定义的标签; 2、初始化自 ... -
BufferedReader和BufferedWriter
2012-08-21 19:49 801java.io.BufferedReader与java.io ... -
struts1标签的使用文档资料
2012-08-12 23:12 666http://www.doc88.com/p-90698758 ... -
JspWriter和PrintWriter的区别
2012-08-12 23:00 796JspWriter out = pageContext.get ... -
Struts1 标签库 说明
2012-08-12 22:40 782Struts提供了五个标签库,即:HTML、Bean、Logi ... -
Structs - HTML、Bean、Logic、Template和Nested标签库总结、心得和使用详
2012-08-12 22:33 2982标签库 说明 HTML 标签 ... -
weblogic.utils.NestedRuntimeException: Cannot parse POST parameters of request:
2012-08-02 18:14 5397http://xzhsht.blog.163.com/blog ... -
String index out of range: -1
2012-08-02 17:53 1034前两天报字符串越界, ... -
WebLogic如何设置session超时时间(转) .
2012-08-01 17:18 920WebLogic如何设置session超时 ... -
集群的概念
2012-08-01 15:42 771首先 还的理解概念 1:域:说穿了就是一个区域,范围,域 ... -
Weblogic 10.3集群配置及session共享(上)
2012-07-31 09:45 6741http://hi.baidu.com/water_1 ... -
配置WebLogic Server集群
2012-07-24 17:07 2474配置WebLogic Server集群 (本文讲 ... -
java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUp
2012-07-17 18:16 1334遇到问题:java.lang.NoSuchMethod ... -
ie直接打开pdf、图片
2012-07-10 23:45 0http://zyc1006.iteye.com/blog/8 ... -
java生成、读取、修改Excel示例
2012-07-06 18:03 1418生成Excel的类: public static v ... -
JSP自定义标签开发流程
2012-07-03 09:55 625、概述 jsp(SUN企业级应用的首选)中有一块重要 ... -
cookie和session
2012-04-15 11:46 721javax.servlet.http.Cookie有两个比较重 ... -
两种包含的区别
2012-04-15 11:43 761静态包含:先包含后处理 <%@include file= ...
相关推荐
java实现Excel导入
java_poi实现excel导入导出功能,有详细的注解
Excel源代码,导入导出各种工具类 <groupId>org.apache.poi <artifactId>poi <groupId>org.apache.poi <artifactId>poi-scratchpad 代码实例: String path = ""; byte[] bytes; vo.setCurrentPage(0); vo....
java实现excel导入数据库
java实现在Excel中插入图片有时碰到下载excel中加入图片或已经制作好的图章。
java实现excel的导入导出(poi详解),经过测试poi效率要比jxl要高很多,特别是数据量大的时候jxl根本无法用肉眼入目,本资源是个可运行项目demo,很有参考价值!
用Java实现的Excel的导入导出,简洁明了,高质量代码。
此代码为java运用poi3.8插件实现运用模版导入导出复杂excel
Java实现Excel导入导出简介 Java实现Excel导入导出是通过Java语言编写的程序,将数据从Excel文件中读取或写入到Excel文件中。这种方式可以实现数据的批量处理和分析,提高工作效率。 Java实现Excel导入导出的应用...
java实现Excel数据导入到数据库,如果数据库中存在就更新。 数据库数据导入到Excel表中。
这个是使用java语言 poi导入excel到数据库中,同时使用了xml对excel的每个单元格数据进行了非空验证。经测试,导入数据库成功。
Java、SpringBoot实现对Excel内容的读取并将Excel内容导入到数据库中(后端篇)
java jxl 通过excel模板创建新文件并将数据导入excel,实现按行、列插入数据
java 导入Excel 文件,兼容Excel 2003(后缀名:xls)及 2007(后缀名:xlsx)的文件,同时还支持csv格式的文件
自定义的一个excel文件导入导出类,支持Excel2003到2010的格式。里面也有简单的配置文件的创建。
用java实现清除excel内容之间空行方法,需要导入poi插件。
java实现Excel导入导出源码,简单 易懂 有详细的注释
java实现对Excel的读取,并保存到数据库中!代码简洁有注释!!!
Java导入excel文件,里面是一个完整的Java项目,包括了需要的jar包
java实现excel导入导出