利用jxl.jar导出excel表格的用法和源代码

 package edu.zzb.excel.action;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.springframework.context.ApplicationContext;

public class ExcelServlet extends HttpServlet{

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
        response.setContentType("text/html");
        response.setCharacterEncoding("gbk");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>提示</title></head>");
        out.println("<body>");
         // 声明文件域
        FileItem fileItem = null;
         // 从 HTTP servlet 获取 fileupload 组件需要的内容
        RequestContext requestContext = new ServletRequestContext(request);
         // 判断是否包含 multipart 内容,如果不包含,则不进行任何处理。
         if (ServletFileUpload.isMultipartContent(requestContext))
         {
             // 创建基于磁盘的文件工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
             // 设置直接存储文件的极限大小,一旦超过则写入临时文件以节约内存。默认为 1024 字节
            factory.setSizeThreshold(1024*1024 );
             // 创建上传处理器,可以处理从单个 HTML 上传的多个上传文件。
            ServletFileUpload upload = new ServletFileUpload(factory);
             // 最大允许上传的文件大小
            upload.setSizeMax(1024*1024);
             try{
                 // 处理上传
                List items = null ;
                items = upload.parseRequest(requestContext);
                 // 由于提交了表单字段信息,需要进行循环区分。
                 for( int i=0;i<items.size(); i++ ){
                    FileItem fi = (FileItem)items.get(i);
                     // 如果不是表单内容,取出 multipart。
                     if(!fi.isFormField()){
                        fileItem = fi;
                         // 一次只上传单个文件
                         break ;
                    }
                }
                 
                // importFromExcel(fileItem);
               Hashtable errTitleTable = importFromExcel(fileItem);
               if(! errTitleTable.isEmpty())
               {
               out.println(errTitleTable.values());                
               }
                
                
            } catch(Exception e){
                out.println("上传失败!请检查上传的文件是否为excel格式、信息是否完整完整、且大小是否超过1兆。");
                    
            }
        }
        out.println("</body>");
        out.println("</html>");
        out.flush();
        out.close();
    }

public Hashtable importFromExcel(FileItem excelFile) throws Exception
     {
    DbUtil db = null;
    Connection conn = null;
    ResultSet rs = null;
    Statement stmt=null;
    PreparedStatement preparestmt = null;
    PreparedStatement preparestmt_select = null;
    jxl.Workbook rwb = null;
    Hashtable hashtable = new Hashtable();
    int hashtableRow = 0;    
         try {           
           
           rwb = jxl.Workbook.getWorkbook(excelFile.getInputStream());
         }
         catch (Exception e){
           e.printStackTrace();
         }
                  
         try
         {
        db = new DbUtil();
        conn = db.getConnection();
        stmt = conn.createStatement();
        preparestmt_select = conn.prepareStatement("select id,name,age from user where xmsqh= ?");
        
        String xmsqh = null;
        String xmmc = null;
        String jhmc = null;
        String sqlStr = null;
        
        sqlStr = "insert into user (id,name,age)";
             sqlStr += "values(";            
             
             Sheet excelSheet = rwb.getSheet(0);
             int rowNum = excelSheet.getRows();
                    
             for(int i = 1; i < rowNum; i++)
             {
            Cell[] excelCell = excelSheet.getRow(i);
            xmsqh = excelCell[0].getContents();
            xmmc = excelCell[1].getContents();
            jhmc = excelCell[2].getContents();                            
//            if((xmsqh.equals(null)||xmsqh=="")&&!(htbh.equals(null)||htbh==""))
            if(xmsqh.equals(null)||xmsqh=="")
            {              
               hashtable.put(hashtableRow, new String("第"+i+"行导入记录失败!"));
               hashtableRow++;
               System.out.println("第"+i+"行记录导入失败!");
               continue;
            }
//            else if((htbh.equals(null)||htbh=="")&& !(xmsqh.equals(null)||xmsqh==""))
//            else if(!(xmsqh.equals(null)||xmsqh==""))
//            {
//               hashtable.put(hashtableRow, new String("第"+i+"行记录导入失败!"));
//               hashtableRow++;
//               System.out.println("第"+i+"行记录导入失败!");
//               continue;
//            }
//            else if((htbh.equals(null)||htbh=="")&& (xmsqh.equals(null)||xmsqh==""))
//            {               
//               hashtable.put(hashtableRow, new String("第"+i+"行记录导入失败!"));
//               hashtableRow++;
//               System.out.println("第"+i+"行记录导入失败!");
//               continue;
//            }
            
            //判断记录在是否已存在
            preparestmt_select.setString(1, xmsqh);
            ResultSet rs_temp = preparestmt_select.executeQuery();
            
            if(!rs_temp.next())
            {             
               String syb ="','";
               
               String SqlInsert = sqlStr + "'"+xmsqh+syb+xmmc+"')";
               System.out.println(SqlInsert);
               try
               {                
                stmt.execute(SqlInsert);
               
                System.out.println("第"+i+"行记录导入成功!");
               }catch(Exception ex)
               {               
                hashtable.put(hashtableRow, new String("第"+i+"行记录导入失败!"));
                hashtableRow++;
                System.out.println("第"+i+"行记录导入失败!");
                ex.printStackTrace();
                continue;                
               }                         
            }
            else
            {              
               hashtable.put(hashtableRow, new String("第"+i+"条记录已经存在!"));
               hashtableRow++;
               System.out.println("第"+i+"条记录已经存在!");
               continue;
            }                       
             }   
             
             return hashtable;
         }catch(Exception e)
         {
        throw e;
         }
         finally
         {
        if(rwb != null)
           rwb.close();
        if(preparestmt !=null)
           preparestmt.close();
        if(rs != null)
            rs.close();
             if(stmt != null)
            stmt.close();
             if (conn !=null)
            conn.close();         
         }   
     }
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


//response.setContentType("application/x-msdownload;charset=GB2312");        
//response.setContentType("application/vnd.ms-excel");  
//PrintWriter out = response.getWriter();
//out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
//out.println("<HTML>");
//out.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");
//out.println("<BODY>");     

//clear the response
//response.reset();   //记住要记住reset浏览器清空缓存,否则可能会出现乱码情况
StringBuffer sqlStr = new StringBuffer("select id,uname from t_user");
String sqlString=sqlStr.toString();
//
//DbUtil db = null;
//Connection conn = null;
//Statement stmt = null;
//ResultSet rs = null;
String typeName = null;
String forname = "test1111";
//get the type of project from table "applyform"
//try
//{
//db = new DbUtil();
//conn = db.getConnection();
//stmt = conn.createStatement();
//rs = stmt.executeQuery(formSql);
//
// }catch(Exception e)
//{
//e.printStackTrace();
//}
//finally
//{
// try
// {
// if(rs != null)
//   rs.close();
// if(stmt != null)
//   stmt.close();
// if(conn != null)
//   conn.close();
//  
// }catch(Exception e)
// {e.printStackTrace();}   
//}  

//name the excel file
String fileName = "test"+".xls";//String fileName = forname+".xls";   
//    response.setHeader("Content-Disposition","attachment;filename="+fileName);
    // execute output to excel file
 OutputTOExcel(sqlString,forname,typeName,response,request);
 
//out.println("</BODY>");
//out.println("</HTML>");
//out.flush();
//out.close();
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
//public void OutputTOExcel(String sqlStr,String forname,String typeName,
//         HttpServletResponse response,HttpServletRequest request)
//{
//    String targetFile="/"+"test11"+".xls";
//    String path= request.getRealPath(targetFile);  
//
//    response.reset();
//
//    response.setContentType("application/vnd.ms-excel");
//    response.setContentType("text/html");
//    PrintWriter out = null;
//    try {
//        out = response.getWriter();
//    } catch (IOException e1) {
//        // TODO Auto-generated catch block
//        e1.printStackTrace();
//    }
//    out.println("<HTML>");
    out.println("<BODY>");  
//DbUtil db = null;
//Connection conn = null;
//Statement stmt = null;
//ResultSet rs = null;
//jxl.Workbook rwb = null;
//String applicationid = null ;
//String age=null;
//
//try
//{
//db =new DbUtil();
//conn = db.getConnection();
//stmt = conn.createStatement();
//System.out.println(sqlStr);
//rs = stmt.executeQuery(sqlStr);
//OutputStream os=new FileOutputStream(path);
//
//WritableWorkbook workbook=Workbook.createWorkbook(os);//创建工作薄
//
//
ByteArrayOutputStream baos = new ByteArrayOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(baos);
//WritableSheet excelsheet = workbook.createSheet(forname, 0);
//WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);
//
name the title of excel file
try
{
label0= new Label(0, 0, "id" );
excelsheet.addCell(label0);


label1 = new Label(1, 0, "姓名");
excelsheet.addCell(label1);


label2 = new Label(2, 0, "年龄");
excelsheet.addCell(label2);


// label3 = new Label(3, 0, "时间");
// excelsheet.addCell(label3);

}catch(Exception e)
{e.printStackTrace();}
//
i is rank of the row
//int i=1;
//Label label0=null;
//Label label1=null;
//while(rs.next())
//{
// applicationid=rs.getString("id");
// typeName=rs.getString("uname");
data_projectname = rs.getString("data_projectname");
age=rs.getString("age");
add_date = rs.getString("add_date");
add_date = add_date.indexOf(" ")!=-1?add_date.substring(0,add_date.indexOf(" ")):add_date;
//    
// try
// {
//  label0= new Label(0, i, applicationid);
//  excelsheet.addCell(label0);
//  label1 = new Label(1, i, typeName);
//  excelsheet.addCell(label1);
//  workbook.write();
//  i++;
//  
// }catch(Exception e)
//     {e.printStackTrace();
//     }     
//}
//
//
//workbook.close();   
//
//
向浏览器返回文件流
//
//      
      OutputStream os = response.getOutputStream();            
      response.reset();//这个很关键,不然会出现乱码现象


      os.write(baos.toByteArray());
      os.flush();
      os.close();
//
      baos.close();
//
//      
//}catch(Exception e)
//{e.printStackTrace();}
//finally
//{
//try
//{
//if(rs != null)
// rs.close();
//if(stmt != null)
// stmt.close();
//if(conn != null)
// conn.close();
//}catch(Exception e){
// e.printStackTrace();}
//}
ChineseSimpleTime.getChTime()
//out.println("<a href='"+request.getContextPath()+"/"+"test11"+".xls' target='blank' >"+"下载</a>"+"(右键单击另存为)");

//}
public void OutputTOExcel(String sqlStr,String forname,String typeName,
         HttpServletResponse response,HttpServletRequest request)
{

response.reset();
response.setContentType("application/vnd.ms-excel");
try {
    request.setCharacterEncoding("gbk");
} catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
DbUtil db = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String applicationid = null ;

try
{
db =new DbUtil();
conn = db.getConnection();
stmt = conn.createStatement();
System.out.println(sqlStr);
rs = stmt.executeQuery(sqlStr);
OutputStream os = response.getOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(os);
WritableSheet excelsheet = workbook.createSheet(forname, 0);
int i=1;
Label label0=null;
Label label1=null;
while(rs.next())
{
applicationid=rs.getString("id");
typeName=rs.getString("uname");
try
{
label0= new Label(0, i, applicationid);
excelsheet.addCell(label0);
label1 = new Label(1, i, typeName);
excelsheet.addCell(label1);
workbook.write();
i++;
}catch(Exception e)
 {e.printStackTrace();
 }     
}
workbook.close();    
}catch(Exception e)
{e.printStackTrace();}
finally
{
try
{
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}catch(Exception e){
e.printStackTrace();}
}
}
}


以下是直接通过servlet在服务器端生成excel文件然后下载  <body>
        <form action="/excel/excel" method="get">
    <input type="submit" value="下载"/>
            <!-- 
    <a href="/excel/excelexport.jsp"> 下载</a>
    -->
    </form>
  </body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值