- 浏览: 334569 次
文章分类
最新评论
-
luokery:
你把正常的代码放到try里面不就好了, 异常的时候就catch ...
巧用while循环避免执行除了异常处理的的另一个处理机制 -
java_doom:
这个行号根据什么来的 为什么不是连续的?
别拿Hadoop map key当id使 -
mixer_b:
...
写博客的那些事儿 -
flyfx:
谢谢谢谢
java break,continue,return 使用。【借鉴与改编】 -
andilyliao:
比起青鸟 我更鄙视大学。
北大青鸟就让你们这么鄙视吗.
网上有许多人在找这样的例子,有多个Excel,要把他们合并到一个Excel里面,这里涉及无非是Excel的读取和Sheet的合并。
我做了这样一个实现,可以参考,当然更希望指点。使用Struts实现他的上传功能,在把多个Excel上传到Action后,进行合并,然后直接执行下载。也就是说,我们一个Action里要动用Struts2的上传和下载两个功能。
实现的步骤:
1.拷贝Struts的包到工程(估计都会吧,Ctrl+C 加 Ctrl + V)
2.在Web.xml里配置Struts2,也不难
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
3.定义Struts2的配置文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <!-- 一些基本配置,自己看着办 -->
- <constant name="struts.devMode" value="false"></constant>
- <constant name="struts.i18n.reload" value="true"></constant>
- <constant name="struts.i18n.encoding" value="UTF-8"></constant>
- <constant name="struts.multipart.saveDir" value="C:\\"></constant>
- <constant name="struts.multipart.maxSize" value="20971520"></constant>
- <package name="default" namespace="/" extends="struts-default">
- <action name="doUpload"
- class="com.golden.action.StrutsFileUpload">
- <result name="success" type="stream">
- <param name="contentType">
- application/vnd.ms-excel
- </param>
- <param name="contentDisposition">
- attachment;filename="TEST.xls"
- </param>
- <param name="inputName">downLoadStream</param>
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>
注意:
contentType:要设置为下载类型为Excel,当然这些可以在Actoin里动态定义,想实现的具体再说。
contentDisposition:里面千万不要忘了attachment;不然可能会出一些问题,当然也许有的人不写。后面是下载的文件名,也可以在Action里定义。
inputName:真正执行下载的方法
bufferSize:缓冲区大小
3.写一个上传页面
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>多文件Excel分析</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- </head>
- <body>
- <center>
- <s:form action="doUpload" method="POST" enctype="multipart/form-data">
- <s:file name="upload" label="上传的文件1" />
- <s:file name="upload" label="上传的文件2" />
- <s:file name="upload" label="上传的文件3" />
- <s:file name="upload" label="上传的文件4" />
- <s:file name="upload" label="上传的文件5" />
- <s:file name="upload" label="上传的文件6" />
- <s:submit value="上 传"/>
- </s:form>
- </center>
- </body>
- </html>
注意:
里面使用了Struts2的标签,也可以直接使用Html标签
4.最关键的部分,写Action的类
- package com.golden.action;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFCellStyle;
- import org.apache.poi.hssf.usermodel.HSSFDateUtil;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import com.opensymphony.xwork2.ActionSupport;
- import java.math.*;
- import java.text.NumberFormat;
- @SuppressWarnings("serial")
- public class StrutsFileUpload extends ActionSupport {
- private File[] upload;// 实际上传文件
- private String[] uploadContentType; // 文件的内容类型
- private String[] uploadFileName; // 上传文件名
- /**
- * 请求的Action
- */
- @Override
- public String execute() throws Exception {
- return "success";
- }
- /**
- * 真正的下载方法
- *
- * @return
- * @throws Exception
- */
- @SuppressWarnings("deprecation")
- public InputStream getDownLoadStream() throws Exception {
- HSSFWorkbook wb = new HSSFWorkbook();
- // 设置一个靠右排放样式,如果需要其他样式自可以再定义一些
- HSSFCellStyle style = wb.createCellStyle();
- // style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
- style.setAlignment(HSSFCellStyle.ALIGN_RIGHT); // 在单元格中右排放
- try {
- for (int i = 0; i < upload.length; i++) {
- File f = upload[i]; // 取得一个文件
- FileInputStream is = new FileInputStream(f);
- HSSFWorkbook wbs = new HSSFWorkbook(is);
- // 根据读出的Excel,创建Sheet
- HSSFSheet sheet = wb.createSheet(uploadFileName[i]);
- // 一直取的是第一个Sheet,一定要注意,如果你要读取所有的Sheet,循环读取即可
- HSSFSheet childSheet = wbs.getSheetAt(0);
- // 循环读取Excel的行
- for (int j = 0; j < childSheet.getLastRowNum(); j++) {
- // 根据读取的行,创建要合并Sheet的行
- HSSFRow r = sheet.createRow(j);
- HSSFRow row = childSheet.getRow(j);
- // 判断是否为空,因为可能出现空行的情况
- if (null != row) {
- // 循环读取列
- for (int k = 0; k < row.getLastCellNum(); k++) {
- // 根据读取的列,创建列
- HSSFCell c = r.createCell(k);
- HSSFCell cell = row.getCell(k);
- // 将值和样式一同赋值给单元格
- String value = "";
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- // 如果是Date类型则 ,获取该Cell的Date值
- value = HSSFDateUtil.getJavaDate(
- cell.getNumericCellValue())
- .toString();
- } else {// 纯数字,这里要判断是否为小数的情况,因为整数在写入时会被加上小数点
- String t = cell.getNumericCellValue()
- + "";
- BigDecimal n = new BigDecimal(cell
- .getNumericCellValue());
- // 判断是否有小数点
- if (t.indexOf(".") < 0) {
- value = n.intValue() + "";
- } else {
- // 数字格式化对象
- NumberFormat nf = NumberFormat
- .getInstance();
- // 小数点最大两位
- nf.setMaximumFractionDigits(2);
- // 执行格式化
- value = nf.format(n.doubleValue());
- }
- }
- break;
- case HSSFCell.CELL_TYPE_STRING: // 字符串型
- value = cell.getRichStringCellValue()
- .toString();
- break;
- case HSSFCell.CELL_TYPE_FORMULA:// 公式型
- // 读公式计算值
- value = String.valueOf(cell
- .getNumericCellValue());
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
- value = " " + cell.getBooleanCellValue();
- break;
- /* 此行表示该单元格值为空 */
- case HSSFCell.CELL_TYPE_BLANK: // 空值
- value = " ";
- break;
- case HSSFCell.CELL_TYPE_ERROR: // 故障
- value = " ";
- break;
- default:
- value = cell.getRichStringCellValue()
- .toString();
- }
- } else {
- value = " ";
- }
- c.setCellValue(value);
- c.setCellStyle(style);
- }
- } else {
- HSSFCell c = r.createCell(0);
- c.setCellValue(" ");
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- // 这种写法不会产生临时文件,因为这里使用字节数组作为介质
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- wb.write(os);
- byte[] content = os.toByteArray();
- InputStream is = new ByteArrayInputStream(content);
- return is;
- }
- public File[] getUpload() {
- return upload;
- }
- public void setUpload(File[] upload) {
- this.upload = upload;
- }
- public String[] getUploadContentType() {
- return uploadContentType;
- }
- public void setUploadContentType(String[] uploadContentType) {
- this.uploadContentType = uploadContentType;
- }
- public String[] getUploadFileName() {
- return uploadFileName;
- }
- public void setUploadFileName(String[] uploadFileName) {
- this.uploadFileName = uploadFileName;
- }
- }
这里要关注的地方太多,具体的代码里注释写的很清楚。
一定要注意的是要判断单元格的类型,特别是数字类型时,我根据自己的需求一定了一些处理。
发表评论
-
java如何终止线程
2012-04-24 21:38 1076对于线程的终止或者中断,由于java中Thread.stop方 ... -
ubuntu-11.10-server-i386学习笔记-网络基本配置
2012-04-23 22:11 10431. 静态IP地址配置 配置文件路径:/etc/networ ... -
ubuntu-11.10-server-i386学习笔记-Apache安装
2012-04-23 22:11 837第一步:先更新安装包缓存 1.1 sudo apt-get ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器安装
2012-04-23 22:10 1126在安装SVN前,假设你的Apache已经安装好了。 ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器-客户端测试
2012-04-23 22:10 746进入客户端测试之前,您应该确保svn服务器已经正确安装,如果您 ... -
svn服务器搭建经验总结
2012-04-23 22:09 1024从最近几天的实验来看,svn(Subversion versi ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(二)
2012-04-18 13:59 1943上一节贴出了web应用访问生成报告的action ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(一)
2012-04-18 13:59 2104后台主要工作是解析XML定义的标签文件,并 ... -
单例类、final、抽象类
2012-04-15 23:53 1667前些日子一直没写博客,因为病了,所以就耽误了,现在好点了 ... -
怎样在架构中合理的设置request中的Lcoale
2012-04-15 23:51 1266相信很多朋友在做J2EE国际化的时候,很可能遇到这个问题 ... -
一个Java时间工具类
2012-04-14 21:50 1031主要包含了对时间操作的一些工具方法,仅供参考吧! ... -
POI Excel导出,我的又一个模板方法
2012-04-14 21:49 2842下面有源码,下载就可以用,如果因为包的问题,就拷贝我 ... -
POI读取Excel浅谈
2012-04-14 21:48 902先看代码,挨句解释: 一般遍历使用两种方式,1:得到总 ... -
struts2项目中静态html在firefox下乱码的解决
2012-04-13 00:03 1006struts2 项目,通常开 ... -
黑马程序员——Java开发前奏
2012-04-12 23:59 824对于Java,我的一 ... -
《JAVA与模式》之单例模式
2012-04-12 23:58 781在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模 ... -
Java中的String不再纠结
2012-04-12 23:58 1455又是新的一月,又是各种总结,先分享一下java中st ... -
swing绘制了一只直升机
2012-04-12 23:56 3534周末用swing绘制了一只直升机 对swing的的绘制技 ...
相关推荐
本篇文章将详细介绍如何利用Apache POI与Struts2来实现Excel的读写以及合并多个Excel工作表。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF格式(.xls)和新版本的OOXML格式(.xlsx)。要...
本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到实体类中以供后续使用。 Apache POI是一个强大的库,允许程序员使用Java来创建、修改和显示Microsoft...
在IT行业中,尤其是在数据分析、报表处理等领域,经常需要对Excel...通过以上步骤,你可以实现将多个Excel文件的多个Sheet合并到一个新文件中,每个Sheet对应源文件的一个Sheet,满足了“poi实现多sheet合并”的需求。
poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
Struts2 和 Apache POI 的结合使用...通过以上步骤,可以成功利用 Struts2 和 Apache POI 实现 Web 应用程序中的 Excel 导出功能。这个功能广泛应用于数据分析、报表生成、数据交换等多种场景,极大地提高了工作效率。
要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...
在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的...
在Struts2中实现数据导出到Excel,首先需要在项目中引入Apache POI的依赖库。这通常通过在Maven或Gradle的构建文件中添加相应的依赖完成。例如,在Maven的pom.xml文件中,可以添加如下依赖: ```xml <groupId>org...
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 ...在本文中,我们已经详细介绍了如何使用 Java POI 实现 Excel 导入导出功能,包括读取和写入 Excel 文件。
在IT领域,Apache POI是一个广泛使用的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel工作簿。本教程将深入探讨如何利用Apache POI库来合并多个Excel工作表,这对于处理大量数据或者...
在Java开发中,Apache POI库是一个非常重要的工具,它允许程序员读取、写入和修改Microsoft Office格式的文件,包括Excel。"基于POI的Excel多Sheet页导出导入工具类"是一个实用的Java类库,专为处理Excel文件中的多...
通过以上讲解,我们可以看到,结合Struts2和Apache POI,我们可以轻松实现动态生成和导出Excel表格的功能,满足企业级Web应用的需求。提供的文档和网页资源应该会进一步细化这一过程,帮助开发者更好地理解和实践。
总结起来,利用Struts2和Apache POI,我们可以方便地实现从Web应用中导出数据到Excel的功能。这涉及到对POI库的理解,以及Struts2 Action和Result的配置。通过这种方式,开发者可以为用户提供便捷的数据导出服务,...
通常,该类会包含一个或多个方法,比如`readExcel()`,来实现Excel的读取操作。以下是此类的一个基本结构: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; ...
Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...
android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel
本文将详细介绍如何使用Apache POI库来读取含有合并单元格的Excel文件,并将读取到的数据存储为`List`。 #### Apache POI简介 Apache POI是一个用于处理Microsoft Office格式文件的开源Java库。它提供了对Excel、...
Struts2 和 Apache POI 的整合允许开发者轻松地实现在 Web 应用程序中导出 Excel 文件的功能。Apache POI 是一个 Java 库,它提供了处理 Microsoft Office 格式(如 .xls 和 .xlsx)的能力,包括创建、读取和修改 ...
Apache POI是一个强大的Java库,专门用于处理...通过lib.rar和Poi02.rar中的示例代码,你可以更深入地了解和学习POI操作Excel的具体实现。在实践中,结合这些资源,你将能够熟练地在Java Web项目中集成Excel处理功能。