`
bei-jin-520
  • 浏览: 110532 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用JXLS操作进行excel操作

阅读更多
【准备工作】
软件环境:jxls-core-0.9.5.jar,spring2.0,jspSmartUpload.jar.
首先需要新建一个XML文件和excel模板。(说明XML文件是为了写入数据库的准备的excel模板为了导出数据)可以在应用根目录下新建一个excel文件夹把这两个文件放在这个文件夹下。XML文件格式如下:
  【导入需要的XML文件 】:
<?xml version="1.0" encoding="UTF-8"?>
<workbook>
<worksheet name="Sheet1">
<section startRow="0" endRow="0">
</section>
<loop startRow="1" endRow="1" items="orgs"
var="org" varType="com.ultrapower.accredit.common.value.Organise">
<section startRow="1" endRow="1">
<mapping row="1" col="0">org.dept_id</mapping>
<mapping row="1" col="1">org.super_id</mapping>
<mapping row="1" col="2">org.dept_name</mapping>
<mapping row="1" col="3">org.node</mapping>
<mapping row="1" col="4">org.org_phone</mapping>
<mapping row="1" col="5">org.org_fax</mapping>
</section>
<loopbreakcondition>
<rowcheck offset="0">
<cellcheck offset="0">
end
</cellcheck>
</rowcheck>
</loopbreakcondition>
</loop>
</worksheet>
</workbook>
导出excel表格的格式为EL表达式为类名.要导出的属性名。网上搜索下就知道怎么写了。
【后台方法】
  【操作EXCEL接口:】
public interface ExcelManagerHandler {
public boolean writeExcle(List dataList, String exportFileUrl);
public List readExcel(InputStream inputXLS);
}
【实现接口方法:】
public class OrganiseExcelManagerHandlerImpl implements ExcelManagerHandler {
private String excleModelPath = "excel/organise.xls";// 导出excel模板

private String xmlModelPath = "excel/organise.xml";// 导入XML模板

private static String path;

static {
path = new OrganiseExcelManagerHandlerImpl().getClass()
.getResource("/").getPath();
path = path.substring(1, path.indexOf("WEB-INF"));
}

public List readExcel(InputStream inputXLS) {
try {

if (inputXLS != null) {
InputStream inputXML = new BufferedInputStream(
new FileInputStream(path + xmlModelPath));

XLSReader mainReader = ReaderBuilder.buildFromXML(inputXML);

List orgs = new ArrayList();
Map beans = new HashMap();
beans.put("orgs", orgs);
XLSReadStatus readStatus = mainReader.read(inputXLS, beans);
return orgs;
} else {

}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public boolean writeExcle(List dataList, String exportFileUrl) {

Map<String, List<?>> beans = new HashMap<String, List<?>>();
beans.put("organise", dataList);

XLSTransformer transformer = new XLSTransformer();

try {
transformer.transformXLS(path + excleModelPath, beans, path+ exportFileUrl);
return true;
} catch (ParsePropertyException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return false;
}

public String getExcleModelPath() {
return excleModelPath;
}

public void setExcleModelPath(String excleModelPath) {
this.excleModelPath = excleModelPath;
}

public String getXmlModelPath() {
return xmlModelPath;
}

public void setXmlModelPath(String xmlModelPath) {
this.xmlModelPath = xmlModelPath;
}

}
【控制器里的代码:导出EXCEL】
public class ExportOrganiseController  extends BaseRedirectController{
private static Logger logger = Logger.getLogger(ExportOrganiseController.class);
private OrganiseManagerHandler organiseManagerHandler; //具体操作对象接口
private ExcelManagerHandler organiseExcelManager;
private String exportFileUrl;
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
List list = organiseManagerHandler.getOrganises();
organiseExcelManager.writeExcle(list,exportFileUrl);
return null;
}

public void afterPropertiesSet() throws Exception {

}
public OrganiseManagerHandler getOrganiseManagerHandler() {
return organiseManagerHandler;
}
public void setOrganiseManagerHandler(
OrganiseManagerHandler organiseManagerHandler) {
this.organiseManagerHandler = organiseManagerHandler;
}

public ExcelManagerHandler getOrganiseExcelManager() {
return organiseExcelManager;
}
public void setOrganiseExcelManager(ExcelManagerHandler organiseExcelManager) {
this.organiseExcelManager = organiseExcelManager;
}
public String getExportFileUrl() {
return exportFileUrl;
}
public void setExportFileUrl(String exportFileUrl) {
this.exportFileUrl = exportFileUrl;
}

}
【导入EXCEL:】
public class Affix  implements Serializable {
/**
* 附件ID
*/
private String id = "";
/**
*附件名称
*/
private String affixName = "";
/**
*附件路径
*/
private String url = "";
/**
*附件类型
*/
private String type = "";
/**
*用于临时存放项目物理路径
*/
private String path = "";//
/**
*上传文件
*/
private MultipartFile file;//上传文件
public Affix() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public String getAffixName() {
return affixName;
}
public void setAffixName(String affixName) {
this.affixName = affixName;
}
}


public class ImportOrganiseController  extends BaseFormController {
private OrganiseManagerHandler organiseManagerHandler;
private ExcelManagerHandler organiseExcelManager;
protected Object formBackingObject(HttpServletRequest request) throws Exception {
Affix affix = new Affix(); //文件操作类
return affix;
}
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors) throws Exception {

Affix affix = (Affix)command;
MultipartFile file = affix.getFile();

InputStream inputXLS = file.getInputStream();

List organiseList = organiseExcelManager.readExcel(inputXLS);

// System.err.println(accountList);
if(organiseList == null){
request.setAttribute("info", "导入数据空");
}else{
String info = organiseManagerHandler.addOrganise_BS(organiseList);
String showInfo = i18n("security_new.importexcel");
request.setAttribute("info", info);
}

return new ModelAndView(getSuccessView());
}
public void afterPropertiesSet() throws Exception {

}
public ExcelManagerHandler getOrganiseExcelManager() {
return organiseExcelManager;
}
public void setOrganiseExcelManager(ExcelManagerHandler organiseExcelManager) {
this.organiseExcelManager = organiseExcelManager;
}
public OrganiseManagerHandler getOrganiseManagerHandler() {
return organiseManagerHandler;
}
public void setOrganiseManagerHandler(
OrganiseManagerHandler organiseManagerHandler) {
this.organiseManagerHandler = organiseManagerHandler;
}

}
【BEAN的配置】
<bean id="organiseExcelManager" class="com.ultrapower.accredit.service.impl.OrganiseExcelManagerHandlerImpl">
<property name="excleModelPath" value="excel/organise.xls"/>
<property name="xmlModelPath" value="excel/organise.xml"/>
</bean>

<!--导出EXCEL配置-->
      <bean id="exportOrganise" class="com.ultrapower.accredit.controller.organise.ExportOrganiseController"> <property name="organiseManagerHandler" ref="OrganiseManagerHandlerImpl"></property>
  <property name="organiseExcelManager" ref="organiseExcelManager"></property>
  <property name="exportFileUrl" value="excel/organiseList.xls"></property>
    </bean>

<!--导入EXCEL配置-->
<bean id="importOrganise" class="com.ultrapower.accredit.controller.organise.ImportOrganiseController">
        <property name="sessionForm" value="true" />
<property name="commandName" value="affix" />
<property name="commandClass" value="com.ultrapower.accredit.common.value.Affix" />
<property name="formView" value="tree/organization/exceloperation" />
<property name="successView" value="tree/organization/exceloperation" />
  <property name="organiseManagerHandler" ref="OrganiseManagerHandlerImpl"></property>
  <property name="organiseExcelManager" ref="organiseExcelManager"></property>
</bean>

【JSP】代码:
因为EXCEL数据在导出的时候已经把它放置在服务器下EXCEL文件夹里只需要在前台提供下载方式就可以把EXCEL文件下载放到本地任何位置。
<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %>
<%
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setContentDisposition(null);
String path= application.getRealPath("/");
path = path+"excel\\organiseList.xls";
System.out.println(path);
su.downloadFile(path);
response.flushBuffer();
out.clear();
out=pageContext.pushBody();
%>
【导入EXCEL exceloperation.jsp】
<%@ include file="/jsp/tree/include.jsp" %>
<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
request.setAttribute("path",path);
%>
<html>
<head>
<link type="text/css" rel="stylesheet" href="<%=path%>/css/adduser.css">
<link type="text/css" rel="stylesheet" href="<%=path%>/css/content.css">

<script type="text/javascript">
function winClose(){
window.top.opener = null;
window.open('','_parent','');  
//window.close();
top.close();
}

function checkForm(){
if(form1.file.value == ""){
alert("请选择待导入文件");
}else{
if(checkType(form1.file.value)){
document.getElementById("cover").innerHTML = "";
form1.submit();
}
}
}

//截取图片名字
function checkType(path){
var start = path.lastIndexOf(".")+1;
var end = path.length;
var sufix = path.substring(start,end);

if(sufix != "xls"){
alert("文件类型不正确");
form1.file.value = "";
return false;
}
return true;
}

</script>

</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="<%=path%>/organization/importOrganise.htm" target="hidden_frame">
<table align="center" cellpadding="1" cellspacing="1">
<tr align="center">
<th>
<ins>组织机构导入</ins>
</th>
</tr>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0">

<tr>
<td align="center" colspan="2">
<a href="<%=path%>/excel/organiseModule.xls">下载导入模板</a>
</td>
</tr>
<tr title="格式限xls">
<td  align="right"><font color="red">*</font>选择导入文件</td>
<td  align="left">
<input type="file" name="file" id="file" value="" onChange="checkType(this.value)"
onblur="this.className='onblur'" onFocus="this.className='onfocus'">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center" height="10"><div id="cover"></div></td>
</tr>
<tr>
<td align="center">
<input type="button" value=" 提 交 " class="btn1_mouseout"
onmouseover="this.className='btn1_mouseover'"
onMouseOut="this.className='btn1_mouseout'" onclick="checkForm()"/>
<input type="reset" value=" 重 置 " class="btn1_mouseout"
onmouseover="this.className='btn1_mouseover'"
onMouseOut="this.className='btn1_mouseout'"/>
</td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe>
</form>

  <body>
 
<script type="text/javascript">

function init(){
if("${info}" != null && "${info}" != ""){
document.getElementById("cover").innerHTML = "";
if(confirm("${info}" + "\n点击确定后关闭当前页面")){
winClose();
}else{

}
}
}

window.onload = init;
</script>  

</html>
2
0
分享到:
评论
2 楼 hufangdong 2013-03-13  
真需要 学习了 太感谢分享了
1 楼 chaodilei 2012-08-03  
请问一下楼主 readExcel(InputStream inputXLS)函数 中
List orgs = new ArrayList();
Map beans = new HashMap();
beans.put("orgs", orgs);
XLSReadStatus readStatus = mainReader.read(inputXLS, beans);
return orgs;

orgs实例化之后也没有加入值,做这么多操作有什么用?

相关推荐

    使用JXLS+Excel模板制作灵活的excel导出

    本文将详细介绍如何使用JXLS库结合Excel模板来实现这一功能。 JXLS(Java Excel Library)是一个强大的开源Java库,它允许开发者通过简单的XML模板来控制Excel文件的内容和格式。这个库简化了Java程序生成复杂Excel...

    用Jxls实现数据导入excel实例

    Jxls库的核心功能在于提供了一种声明式的方式来处理Excel模板,通过使用Apache POI库来操作Excel文件。它的主要优点是将数据和样式分离,让开发者可以专注于业务逻辑,而无需关心底层Excel表格的细节。 首先,我们...

    jxls利用模板生成excel文件

    它利用Apache POI库操作Excel,并引入了类似于JSP标签的概念,使得开发者可以轻松地将数据绑定到Excel模板的各个单元格上。 ### 二、jxls的工作原理 1. **模板创建**:首先,你需要创建一个Excel模板文件,这个...

    利用jxls操作excel模板文件

    Jxls是一个强大的库,它允许我们使用Java编程语言来操作Excel模板文件,从而简化了这个过程。本篇文章将深入探讨如何利用Jxls库在Java中进行Excel模板文件的操作。 首先,我们需要了解Jxls的基本概念。Jxls是一个...

    使用 jxls2.X 导出excel文件

    "使用jxls2.X导出Excel文件"的主题涉及了如何利用Java来生成和操作Excel文档,尤其适用于需要动态生成内容的场景。在这个项目案例中,开发者使用了jxls库的最新版本(jxls2),它是一个强大的工具,能够帮助程序员将...

    jxls-poi导出excel示例代码文件

    `jxls-poi`是`jxls`的一个分支,专门针对Apache POI进行优化,支持使用POI API处理Excel文件。Apache POI是一个开源项目,提供了对Microsoft Office格式的读写支持,包括Excel。 首先,让我们了解`jxls`的工作原理...

    使用jxls轻松制作excel报表

    本文将深入探讨jxls的使用方法及其在创建Excel报表中的优势。 jxls是一个基于Java的库,它扩展了Apache POI库的功能,允许开发者使用简单的模板语法来动态生成Excel工作表。Apache POI是Java社区中广泛使用的API,...

    jxls导出excel官方例子

    jxls(Java eXcel Library)是一个强大的库,它允许开发者使用Java模板语言来处理Excel文档,极大地简化了Excel数据的导入和导出操作。本篇文章将深入探讨jxls库,并通过官方示例,帮助你掌握如何高效地使用jxls导出...

    jxls教程Excel生成

    jxls教程 使用Java操作Excel,创建模板生成 jxls教程 使用Java操作Excel,创建模板生成

    java web使用jxls导出excel功能

    通过这种方式,你可以轻松地在Java Web项目中实现Excel导出功能,而无需直接操作Excel文件的复杂代码。Jxls库提供了灵活的模板机制,使得数据与格式分离,使得Excel模板的设计和维护变得更加简单。同时,由于Jxls是...

    JXLS 2.4.0 excel 导出 可以运行在 JDK 1.6

    在进行导出时,JXLS 2.4.0的“直接运行”功能意味着使用者无需进行复杂的配置或设置,只需提供必要的数据和模板,就可以快速生成Excel文件。这简化了开发流程,提高了工作效率。 压缩包中的文件“JexcelTemple”...

    jxls 读写Excel

    - 功能强大:支持多种数据结构和复杂的Excel操作。 - 高效灵活:适合批处理和动态生成报表。 6. **应用场景** - 数据报告:快速生成定制化的报告模板。 - 导入导出:在Web应用中,提供用户上传和下载Excel文件...

    通过jxls和poi导出excel的dome

    模板中的某些区域将被标记为数据注入点,这些通常用特定的jxls指令如`@foreach`、`@if`等进行标识。 2. **导入jxls和Apache POI库**:在Java项目中,引入这两个库的依赖,这可以通过Maven或Gradle等构建工具完成。 ...

    jxls 下载 excel 的测试

    标题 "jxls 下载 excel 的测试" 涉及到的是使用 jxls 库来处理 Excel 文件的一个实际操作。jxls 是一个 Java 库,它扩展了 Apache POI 库的功能,使得在 Java 应用程序中动态地生成和填充 Excel 工作表变得简单。在...

    SpringBoot(33) 整合JXLS实现Excel导入导出

    在本教程中,我们将深入探讨如何使用SpringBoot与JXLS库进行集成,以实现Excel文件的导入和导出功能。这是一个非常实用的功能,尤其在处理大量数据时,如批量用户注册、数据迁移或者数据分析等场景。让我们一起探索...

    jxls实现的excel导出功能,支持03以上版本

    - **jxls**:这是一个核心工具,它扩展了Apache POI库,提供了一种声明式的方式来操作Excel模板,使得你可以专注于数据处理,而不是复杂的Excel对象模型。jxls支持多种操作,包括迭代、条件判断、公式计算等。 - **...

    jxls 基于模版导出excel

    2. **效率**:由于使用模板,jxls能够在处理大量数据时保持高效,避免了手动操作Excel的繁琐和低效。 3. **易用性**:通过Freemarker模板,非技术人员也能参与到模板设计中,降低了开发成本。 **应用场景** jxls...

    Excel报表导出,复杂Excel模板导出(带单元格合并),jxls2

    在Excel模板设计方面,`jxls2`支持多种复杂操作,如单元格的合并,这对于创建多行标题、合并数据区域等需求非常有用。通过使用特定的指令和标签,开发者可以在模板中定义合并的范围和样式,使得导出的Excel报表具有...

    jxls导excel所需的所有jar包

    JXLS(Java Excel Library)是一个强大的工具,它允许开发者使用简单的模板来处理Excel工作表,实现数据的填充和读取。本篇文章将详细探讨JXLS库及其所需的jar包,帮助开发者更好地理解和使用这一工具。 首先,我们...

    使用xls或xlsx模板(jxls语法)导出Excel并下载的Demo

    jxls是一个Java库,它扩展了Apache POI库的功能,允许我们使用简单的语法(类似于JSP标签)在Excel模板中进行数据绑定和复杂的转换。通过这种方式,我们可以预先设计好Excel模板,然后用Java代码填充数据,生成动态...

Global site tag (gtag.js) - Google Analytics