`
caihorse
  • 浏览: 144679 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

excel导入导出通用

    博客分类:
  • java
阅读更多

 show.isp文件

 <%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<script> 
function selectAll(obj) 
{ 
for(var i = 0;i<obj.elements.length;i++) 
if(obj.elements[i].type == "checkbox") 
obj.elements[i].checked = true; 
} 
function selectOther(obj) 
{ 
for(var i = 0;i<obj.elements.length;i++) 
if(obj.elements[i].type == "checkbox" ) 
{ 
if(!obj.elements[i].checked) 
obj.elements[i].checked = true; 
else 
obj.elements[i].checked = false; 
} 
} 
</script>
<%
		     int pageno = ((Integer)request.getAttribute("pageno")).intValue();
		     int totalpage = ((Integer)request.getAttribute("totalpage")).intValue();
		 %>
<html>

	<body>
	     
		<form action="loadfile.do" method="post" enctype="multipart/form-data">
			<table><tr><td><input type="file" name="file" size="20"></td><td>
			<input type="submit" value="上传"></td></tr>
		</form>
		<form action="<%=request.getContextPath()%>/address.do?method=exportExcel"
		    method="post" >
			<table><tr><td><input type="submit" name="import"  value="IMPORT"></td><td>
			 </td></tr>
		</form>
		</table>
	   
	</body>
</html>

 

 

调用 loadfile.jsp文件

<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="com.jspsmart.upload.*"%>
<%
//@ page import="com.suntek.devmanager.web.SysParam"
%>
<%@ page import="java.io.*"%>
<jsp:useBean id="smartUpload" scope="page"
	class="com.jspsmart.upload.SmartUpload" />
<%
	request.getSession().removeAttribute("FileInputStream");
	String contract_id = "", add_flag = "";
	try {
		//    SmartUpload smartUpload = new SmartUpload();
		smartUpload.initialize(pageContext);
		//最大上传文件小于四兆
		smartUpload.setTotalMaxFileSize(4096000);
		//上载文件
		smartUpload.upload();
		//取得上载的文件

		com.jspsmart.upload.File lo_File = smartUpload.getFiles().getFile(0);
		byte[] fileContent = new byte[(int) lo_File.getSize()];
		for (int k = 0; k < (int) lo_File.getSize(); k++) {
			fileContent[k] = lo_File.getBinaryData(k);
		}
		InputStream fs = null;
		if (!lo_File.isMissing()) {
			//取得上载的文件的文件名
			fs = new ByteArrayInputStream(fileContent);
			//将文件写到数据库中
		}
	
		request.getSession().setAttribute("InputStream", fs);
		//得到文件名
	} catch (Exception e) {
		e.printStackTrace();
		return;
	}
%>
<html>
	<head>
		
		<script language="javascript">
function Window_Onload()
{
  document.all.manager.submit();
 // window.returnValue = "true";
 // top.close();
}
</script>
		<title>有问题请和我联系</title>
	</head>
	<body leftmargin="0" topmargin="0" class="DialogOuter"
		onload="return Window_Onload();">
		<form action="<%=request.getContextPath()%>/address.do?method=addExcel"
		 			method="post" name="manager">
		</form>
		<br>
		<br>
		<br>
		<br>
		<div align="center">
			系统正在上传数据,请稍候!!
		</div>
	</body>
</html>

 

 

 action文件

 
package com.yourcompany.struts.action;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.jaxen.function.ext.LowerFunction;

import com.dao.Service;
import com.db.Conn;
import com.tb.Factory.DaoFactory;
import com.tb.hibernate.Address;
import com.yourcompany.struts.form.AddressForm;

/**
 * MyEclipse Struts Creation date: 05-16-2008
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/address" name="addressForm" input="/form/address.jsp"
 *                scope="request" validate="true"
 */
public class AddressAction extends DispatchAction {
	/*
	 * Generated Methods
	 */
 
	 
	public  ActionForward addExcel(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		//AddressForm addressForm = (AddressForm) form;
		 try {
			 InputStream is = (InputStream) request.getSession().getAttribute("InputStream");
		     //InputStream is = new FileInputStream("c://Address.xls");
			 Connection conn = Conn.Conn().getconn();
			 Service.service().importexcel(is,conn, "ADDRESS",5);//
			
		}catch (Exception e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} 
		 
		return mapping.findForward("index");
	}
	public ActionForward exportExcel(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		 Connection conn = Conn.Conn().getconn();
		 response.reset();
		 response.setCharacterEncoding("GBK");
		 response.setContentType("Application/msexcel;charset=gbk");
		 response.setHeader("Content-disposition","attachment; 导出数据.xls");
		 WritableWorkbook book = null;
		 try {
			 book = Workbook.createWorkbook(response.getOutputStream());
			 WritableSheet sheet = book.createSheet("数据", 0);
			 
			 Label label = new Label(1, 1, "1234");
			 sheet.addCell(label);
				
			 book.write();
			 book.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 // Service.service().exportexcel(conn, "ADDRESS");//
		return null;
	}
}

 

调用的service文件

package com.dao;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import com.db.Conn;
import com.tb.hibernate.Address;

/**
 * @author Administrator
 *
 */ 
/**
 * @author Administrator
 *
 */
public class Service {
	private static Service service = new Service();
	public static Service service(){
		if(service == null){
			return new Service();
		}else{
			return service;
		}
	}
	/**
	 * @author Administrator
	 *获得table 表的字段类型或者字段名
	 *column_name,data_type
	 */
   public List getTypeNameOrColumnName(Connection conn, String tableName,String arg){
	   Statement ps = null;
	   ResultSet rs = null;
	   List<String> list = new ArrayList<String>();
	   String sql="select "+arg+" from user_tab_columns where  table_name like '"+tableName+"'";
	   try {
		ps = conn.createStatement();
		rs = ps.executeQuery(sql);
	    while(rs.next()){
	    	list.add(rs.getString(arg));
	    }
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	   return list;
   }
   /**
    * @author Administrator
    * 将导入的excle插入到table中
    */
   public boolean insertTable(Connection conn, String tableName,  List<String> list,int colNum){
	    PreparedStatement ps = null;
	   
		try {
            String  columnName="";	
            List<String> columnList = getTypeNameOrColumnName(conn,"ADDRESS","column_name");
            for(int i=0;i<colNum+1;i++){
               columnName += columnList.get(i);
               columnName +=",";
            }
            columnName = columnName.substring(0,columnName.length()-1);
			conn.setAutoCommit(false);
			for(int j=0; j< list.size();j++){
				String sql="insert into  "+tableName+"("+columnName+") values(seq_a.nextval,"+list.get(j)+")";
				ps = conn.prepareStatement(sql);
				ps.addBatch();
				if (j % 100 == 0 ) {
					ps.executeBatch();
					conn.commit();
				}else{
					ps.executeBatch();
					conn.commit();
				}
			}
			conn.setAutoCommit(true);
		}catch (Exception e) {
			// TODO: handle exception
	    	 e.printStackTrace();
		}
	   return true;
   }
   
   /**
    * 
    * @param is excel文件流
    * @param conn 数据连接
    * @param tableName 表名
    * @param colNum excel中数据列数
    */
   public void importexcel(InputStream is,Connection conn, String tableName, int colNum){
	  try{
	     jxl.Workbook rwb = Workbook.getWorkbook(is);
		 Sheet[] sheets = rwb.getSheets(); // 
		 List<String> list = Service.service().getTypeNameOrColumnName(conn,tableName,"data_type");
		 int nullCol = list.size()-colNum; //后面不用复制的项数
		 List<String> listarray = new ArrayList<String>();
		 for(int i=0; i<sheets.length; i++){
			 Sheet sheet = sheets[i];
			    //k代表数据所在的行
			      for(int k=0; k<sheet.getRows(); k++){
			         Address address = new Address();
			         StringBuffer str = new StringBuffer();
			           for(int m=0;m<list.size()-nullCol;m++){
			        	// for(int m=0;m<colNum;m++){
			        	   Cell  cel1= sheet.getCell(m,k);//列,行, 
			        	   //将数据根据不同数据类型拼接为串
			        	   if(list.get(m+1).toUpperCase().indexOf("NUMBER")>-1 ||list.get(m+1).toUpperCase().indexOf("INT")>-1){//
			        		  if(!"".equals(cel1.getContents())){
			        		    str.append(cel1.getContents()); 
			        		  }else{
			        			  str.append(0); 
			        		  }
			        		  //DATE、DATETIME、TIME、TIMESTAMP to_date('2002-02-28','yyyy-mm-dd') 
			        	   }else if(list.get(m+1).toUpperCase().indexOf("DATE")>-1||list.get(m+1).toUpperCase().indexOf("TIMESTAMP")>-1
			        			    ||list.get(m+1).toUpperCase().indexOf("DATETIME")>-1||list.get(m+1).toUpperCase().indexOf("TIME")>-1){
			        		   String strdate ="";
			        		   if(!"".equals(cel1.getContents())){
			        		      strdate = "to_date('"+cel1.getContents()+"','yy-mm-dd')";
			        		   }
			        		   str.append(!"".equals(cel1.getContents())?strdate:"NULL");
			        	   }else{
			        		   str.append("'");
			        		   str.append(!"".equals(cel1.getContents())?cel1.getContents().trim():cel1.getContents());
			        		   str.append("'");
			        	   }
			        	   str.append(",");
			           }
			           listarray.add(str.toString().substring(0, str.toString().length()-1));
				 }
		 }
		 Service.service().insertTable(conn,tableName,listarray,colNum);
	  }catch(Exception e){
		  e.printStackTrace();
	  }
   }
}
 

 导出excle

 

  //long eid = Long.parseLong(request.getParameter("eid").toString());
  String path = request.getSession().getServletContext().getRealPath(
    "/"
    +new Date().getTime()+"test.xls");
  OutputStream os = new FileOutputStream(path);
  WritableWorkbook wwb = null;   
       
        try {   
            wwb = Workbook.createWorkbook(os);
          
        } catch (IOException e) {   
            e.printStackTrace();   
           
        }   
        if(wwb!=null){
          //创建一个可写入的工作表   
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
            WritableSheet ws = wwb.createSheet("工作表名称", 0);  
           
            String[] arrname = {"订单编号","客户姓名", "移动电话","办公电话", "EMAIL", "订单金额" }; 
            writesheet(ws,arrname,0);
            List list = new ArrayList();
            long eid = 0;
            List<ListTail>  listtail =  new ListTailDao().getListTailinfo(eid);
            for(int i=0;i<listtail.size();i++){
             String [] arr = {listtail.get(i).getListid()+"",listtail.get(i).getCustomer()+"",
               listtail.get(i).getCphone()+"",listtail.get(i).getCtel()+"",
               listtail.get(i).getCemail()+"",listtail.get(i).getListprice()+""};
             
             writesheet(ws,arr,1+i);
            }
            //下面开始添加单元格
          
           
            try {   
                //从内存中写入文件中   
                wwb.write();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }finally{
              wwb.close();
              os.close();
             
            }
        }
        downfile(path,response);
        java.io.File myDelFile = new java.io.File(path);
        myDelFile.delete();

    return null;
  /*response.setContentType("text/html;charset=utf-8");  
  response.setHeader("Cache-Control", "no-cache");  
  System.out.println("**************");
  response.getWriter().write("9874");
  return null;*/
 }
    public void writesheet( WritableSheet ws,String [] arr,int rowsize){
        for(int colsize=0;colsize<arr.length;colsize++){
            Label labelC = new Label(colsize,rowsize,arr[colsize]);
           try {
     ws.addCell(labelC);
    } catch (RowsExceededException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (WriteException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
          }
    }
    public void downfile(String path,HttpServletResponse response) throws Exception{
     BufferedInputStream bis = null;
     BufferedOutputStream bos = null;
     OutputStream fos = null;
     InputStream fis = null;
     String filepath = servlet.getServletContext().getRealPath("/" + path);
     File uploadFile = new File(path);
     fis = new FileInputStream(uploadFile);
     bis = new BufferedInputStream(fis);
     fos = response.getOutputStream();
     bos = new BufferedOutputStream(fos);
     try{
          response.setContentType("application/ms-excel;charset=utf-8");
          response.setHeader("Content-Disposition", "attachment;filename=" +
                             URLEncoder.encode(path, "utf-8"));
          int bytesRead = 0;
          byte[] buffer = new byte[8192];
          while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
              bos.write(buffer, 0, bytesRead);
          }
         } catch (Exception e){
          e.printStackTrace();
         }finally{
          bos.flush();
          fis.close();
          bis.close();
          fos.close();
          bos.close();
         }
    }

分享到:
评论
1 楼 lord_is_layuping 2010-01-16  
 

想法不错,我也做了一个通用的,可以聊聊吗

qq:540625404
msn: hlygood@live.cn

相关推荐

    JAVA中excel导入导出通用方法

    JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...

    excel导入导出通用组件

    这是一个利用poi封装的excel导入导出通用组件,详细用法请访问:http://fuyangrong.top/2018/01/29/excel导入导出通用组件/

    多功能通用Excel导入导出数据

    标题 "多功能通用Excel导入导出数据" 描述的是一个针对Excel数据处理的工具或库,它已经被二次封装,简化了导入导出操作。用户只需引入指定的jar包,并通过一行代码即可实现数据的导入和导出功能。描述中强调了其...

    C#通用Excel导入导出工具类

    本篇文章将深入探讨“C#通用Excel导入导出工具类”的实现原理及应用,主要涉及的技术点包括反射、特性以及如何创建一个高效的Excel导入导出解决方案。 首先,我们要理解反射在C#中的作用。反射是一种强大的机制,它...

    易语言EXCEL快速导入导出

    本示例将详细介绍如何利用易语言进行EXCEL快速导入导出的操作。 首先,我们需要了解易语言中与Excel相关的基础组件和函数。易语言提供了一个名为“通用数据访问组件”的模块,其中包含了读取和写入Excel文件所需的...

    通用的Excel导入导出

    在这个“通用的Excel导入导出”项目中,我们看到作者创建了一个类来实现这个功能,让我们详细了解一下相关的知识点。 1. **Apache POI**:这是Apache软件基金会的一个开源项目,它提供了一组API,专门用于读写...

    Excel导入导出 Excel导入 Excel导出

    "Excel导入导出"这一主题涵盖了如何将数据从外部源引入Excel以及如何将Excel数据导出到其他应用程序或格式。以下是对这一主题的详细解释: 1. **Excel导入**: - **CSV文件导入**:CSV(Comma Separated Values)...

    excel通过配置实现导入导出和校验

    这样,不同模块或功能只需要调用这个通用工具,即可实现Excel的导入导出和校验,提高了代码的复用性。 6. **异常处理**:在实现这些功能时,还需要考虑异常处理机制。例如,当导入数据失败时,应当提供清晰的错误...

    java导入导出通用模板

    总结起来,Java导入导出通用模板是利用自定义注解提供元数据,通过反射实现动态操作,结合Java POI库处理Excel文件,以实现数据的灵活导入和导出。这种模板化的设计模式在Java开发中具有广泛的应用价值,尤其是在...

    UAP标准导入导出功能 UAP标准导入导出功能

    尤其是在企业级应用系统中,如NC65这样的企业管理软件,UAP(通用应用平台)提供了标准化的导入导出功能,使得数据管理更为高效便捷。本文将深入解析UAP标准导入导出功能的相关处理规则、基本操作示例及其拓展应用。...

    java通用的导入导出excel工具

    本工具是基于Java反射机制实现的通用Excel导入导出类,它提供了便捷的方式来读取和写入Excel文件,适用于多种场景。下面我们将深入探讨这个工具的工作原理、使用方法以及相关的Java Excel处理知识。 1. **Java反射...

    Java poi 实现excel导入导出

    在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...

    通用导入导出excel 类

    。net通用导入导出 excel 类,返回datatable

    一个通用从数据库导出excel、excel导入数据库组件所用到的jar包

    标题中的“一个通用从数据库导出excel、excel导入数据库组件所用到的jar包”指的是一个Java开发的工具,主要用于数据的导入导出操作。这个工具可以方便地将数据库中的数据导出为Excel格式,同时也可以将Excel文件中...

    C#_WinForm下Excel导入导出

    C# WinForm 下 Excel 导入导出 C# WinForm 下 Excel 导入导出是指在 Windows 窗体应用程序中使用 C# 语言实现 Excel 文件的导入和导出功能。这种功能在实际应用中非常重要,因为 Excel 文件是一种通用的数据交换...

    Excel导入导出数据库小工具源码

    标题“Excel导入导出数据库小工具源码”指的是一个编程工具,它的主要功能是协助用户在Excel电子表格和各种数据库之间进行数据的导入与导出。这个工具对于数据处理、分析或者需要频繁交换数据的场景非常有用,尤其...

    通用excel导入/导出 (poi)

    在这个"通用excel导入/导出 (poi)"的示例中,我们主要关注的是Excel文件的处理,特别是如何利用POI库进行数据的导入和导出。下面将详细介绍这个过程中的关键知识点。 首先,让我们了解一下Apache POI。它是Apache...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    基于Aspose的简单通用C#Excel导入导出

    在IT行业中,数据处理是一项至...总的来说,基于Aspose的C# Excel导入导出实现是一个实用的工具,它能够提高开发效率,使得数据处理变得更加便捷。无论是数据分析、报表生成还是数据交换,都能够利用此类工具高效完成。

    Excel导入导出数据库小工具

    【Excel导入导出数据库小工具】是一款基于C/S(客户端/服务器)架构的应用程序,它主要功能是方便用户将Excel数据高效地导入到数据库中,同时也能从数据库中导出数据到Excel文件。这款工具是C#编程语言实现的,为IT...

Global site tag (gtag.js) - Google Analytics