`
晨星★~雨泪
  • 浏览: 448253 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jsp里使用java excel api实现文件下载

阅读更多
好久没有更新BLog内容了。主要是一直解决工作中遇到的一个问题,即需要把定单的产品项名细 生成一个excel文件,其实问题本身没有什么特别的技术要求,如果是生成word表格或许要采用专门的控件(顺便介绍一下,国内有个比较好的office系统控件,http://www.ntko.com/ 我试用过很好用,但需要花钱的),随便在网上搜一下就会有很多解决方案,我选择了jxl,主要是有清晰的示例代码。下载了类库和一个例子后,马上开始修改,添加,拷贝之类的工作(说实话,我主要是做维护工作的,偶尔有新的需求也是模仿已有的代码,改改即可,几乎没有什么创新内容,很惭愧在技术圈里混),原以为一天完成,结果三天才调试完,主要卡在乱码问题上,虽然现在已经通过,还是没有从根本上理解为什么,我是通过各种方式组合测试才找到答案。为了给有类似需求的网友提供借鉴,我把问题及解决思路整理出来,同时也是对自己加深印象。

   需求描述:
    用户点击OrderItemsToExcel.jsp后,直接弹出下载保存对话框,下载到本地保存。

  约束条件:
   只能用JSP实现并且不要调用java Bean,所有的代码都在jsp里完成,并且下载的文件名一定是中文名称。

  遇到的问题:
    1、 文件名乱码
    2、生成的excel文件中文内容乱码

   程序运行的环境:
      系统运行在weblogic5.1.0, jdk1.2.2, AIX 4.3.3,oracle817数据库

   因为是编码问题所以分析与编码有关的设置:
     数据库编码UTF-8
    JSP文件本身是UTF-8编码
    页面输出的charset也是UTF-8
    AIX的环境变量 LANG=Zh_CN

    在网上找了很多关于java系统的编码问题,也知道从jsp到页面显示过程中要涉及几个编码转换的过程,JSP----->java,java----->class,从数据库---java,从web服务器到浏览器,但是网上的一些方法不能用,因为我们使用的是JDK1.2.2, weblogic5.1 版本都很低,不支持新方法如:URLEncoder.encode() 只支持一个参数,不支持两个参数。现在想起来可能是网上的给出的解决方法太多把自己给搞乱了,看看我的原代码其实很简单,网上的东西只能作为参考,因为不同的运行环境可能会有不同的结果。比如说jsp参数pageEncoding不是所有的web服务器都支持的。

下面是代码,把数据库信息省略

 

<%@ page extends="tradeex.ec4.jsp.BaseJSPPage" import="java.util.*,java.text.*,java.sql.*,java.net.*" import="oracle.jdbc.driver.*,jxl.*,tradeex.ec4.util.*" contentType="text/html;charset=UTF8"%>
<%
String sorefitem
=request.getParameter("SOREFITEM");
sorefitem 
= "24326";
String sheetname 
= "productsitems";
String excelsql 
= "select oi.sorefitem,po.psuppliercompany suppliername,oi.pname productname,oi.ivendpartnumber productcode,oi.oqty quantity,oi.osellprice price,oi.pricecurrefitem currency,po.ponumber "
                  
+" from ecorders.orderitems oi,ecorders.purchaseorders po "
                  
+" where (oi.ostatus>3 or oi.ostatus=3 and oi.osubstatus=4) AND oi.sorefitem="+sorefitem
                  
+" AND oi.sorefitem=po.sorefitem and oi.osellerid=po.psupplierid" ;
int col_num = 0;

java.sql.Statement stm 
= null;
java.sql.ResultSet rs 
= null;
java.sql.Connection conn 
= null;try...{
        Class.forName(
"oracle.jdbc.driver.OracleDriver");     
        }
catch (ClassNotFoundException e) 
        
...{ System.out.println ("no exist driver");
          System.exit(
0);
         }

       
try 
       
...{    
            
            response.reset();
            response.setContentType(
"application/vnd.ms-excel;charset=UTF-8");
            response.setHeader(
"Content-Disposition" ,"attachment;filename="+new String("导出采购商明细报表Excel.xls".getBytes(),"iso-8859-1"));
                    
            OutputStream os 
= response.getOutputStream();//将 WritableWorkbook 写入到输出流
            jxl.write.WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);    //创建Excel工作表    
            jxl.write.WritableSheet ws = wwb.createSheet("sheet_1",0);                       
            col_num 
= 7;            
            jxl.write.Label label_head;    
                            
            label_head 
= new jxl.write.Label(0,0,"请购单号");    
            ws.addCell(label_head);    
            label_head 
= new jxl.write.Label(1,0,"供应商名");    
            ws.addCell(label_head);    
            label_head 
= new jxl.write.Label(2,0,"产品规格型号");        
            ws.addCell(label_head);        
            label_head 
= new jxl.write.Label(3,0,"产品编码");        
            ws.addCell(label_head);        
            label_head 
= new jxl.write.Label(4,0,"数量");        
            ws.addCell(label_head);        
            label_head 
= new jxl.write.Label(5,0,"单价");    
            ws.addCell(label_head);        
            label_head 
= new jxl.write.Label(6,0,"定单号");
            ws.addCell(label_head);
//结果集中的数据添加到excel中
             
            jxl.write.Number label_num;        
            jxl.write.Label label_str;        
            jxl.write.WritableCellFormat floatFormat;            
            
int numrow = 1;
            System.out.println(System.currentTimeMillis()
+"  welcome to hehe!!!!!!!!!!!");
            
            conn 
= java.sql.DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.180:1521:DB","system","manager");
            stm 
= conn.createStatement();    
            rs 
= stm.executeQuery(excelsql);
            
            
while(rs.next())        
            
...{    
                System.out.println(System.currentTimeMillis()
+"   welcome to while!!!!!!!!!");           
                label_num 
= new jxl.write.Number(0,numrow,rs.getInt("sorefitem"));           
                ws.addCell(label_num);                        
                label_str 
= new jxl.write.Label(1,numrow,rs.getString("suppliername"));           
                ws.addCell(label_str);                      
                label_str 
= new jxl.write.Label(2,numrow,rs.getString("productname"));           
                ws.addCell(label_str);                      
                label_str 
= new jxl.write.Label(3,numrow,rs.getString("productcode"));           
                ws.addCell(label_str);                       
                floatFormat 
= new jxl.write.WritableCellFormat (jxl.write.NumberFormats.FLOAT);                
                label_num 
= new jxl.write.Number(4,numrow,rs.getDouble("quantity"),floatFormat);               
                ws.addCell(label_num);                  
                label_num 
= new jxl.write.Number(5,numrow,rs.getDouble("price"),floatFormat);          
                 ws.addCell(label_num);           
                 label_str 
= new jxl.write.Label(6,numrow,rs.getString("ponumber"));               
                 ws.addCell(label_str);                  
                 numrow 
++;    
             }
        
              wwb.write();
              wwb.close();
              os.flush();
              os.close();             
           }
 
           
catch(java.sql.SQLException sqle)...{    
             System.out.println(
"sql error");             
             }
        
           
catch(Exception e)...{
              System.out.println(
"catch error ------");        
             e.printStackTrace();    
           }
    
          
finally...{
          System.out.println(System.currentTimeMillis()
+ "welcome to finally!!!!!!!");                    
           
if(stm != null)            
           
try...{                
              stm.close();
           }
catch(Exception fe) ...{ }            
           
if(conn != null)            
           
try...{                
           conn.close();        
           }
            
           
catch(Exception fe2)...{ }        
           }

 
%>


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1671508

分享到:
评论

相关推荐

    java excel api & 实例

    JAVA EXCEL API 简介 Java Excel 是一开放源码项目,通过它 Java 开发人员可以读取 Excel 文件的内容、...因为是使用 Java 编写的,所以我们在 Web 应用中可以通过 JSP、Servlet 来调用 API 实现对 Excel 数据表的访问

    JAVA EXCEL API简介

    Java Excel API 是一个开源项目,专门用于在Java环境中处理Excel文件。这个API使得开发者无需依赖Windows操作系统,就能在任何平台上创建、读取和修改Excel文件。由于它是用Java编写的,因此非常适合在Web应用程序中...

    基于Java Excel API的excel文件的操纵技术及其应用.pdf

    通过使用Java Excel API,可以实现excel文件的读取、写入、编辑、格式化、打印等操作,从而满足企业和个人对excel文件的各种需求。 在本文中,我们将详细介绍基于Java Excel API的excel文件的操纵技术,包括excel...

    全面挖掘Java Excel API 使用方法

    在Web应用中,通过JSP或Servlet调用Java Excel API,可以方便地实现Excel数据的动态处理。例如,你可以创建一个Servlet,接收用户请求,根据请求参数从数据库获取数据,然后利用Java Excel API生成Excel文件并返回给...

    全面挖掘Java Excel API 使用方法.pdf

    在Web应用中,Java Excel API通常与JSP和Servlet结合使用,生成Excel文件供用户下载。例如,可以通过Servlet创建一个Workbook对象,填充数据,然后将其转换为OutputStream,返回给客户端浏览器,浏览器会自动触发...

    jsp开发实现wordexcel的在线预览

    本文将深入探讨如何使用JSP技术来实现Word和Excel文档的在线预览功能,这对于许多Web应用程序来说是一项非常实用的功能,能够极大地提升用户体验。 首先,要实现在线预览,我们需要理解JSP的基础工作原理。JSP是由...

    Java+Excel+API doc

    ### Java Excel API 使用详解 #### 一、Java Excel API 概览 Java Excel API 是一个开源项目,旨在帮助 Java 开发者轻松地处理 Excel 文件。它不仅能够读取 Excel 文件内容,还可以创建新文件和更新现有文件。由于...

    全面挖掘Java Excel API 使用方法.docx

    使用Java Excel API,可以通过JSP或Servlet在Web应用中轻松操作Excel。例如,要从Excel文件读取数据表,首先需要创建一个Workbook对象。以下是一个简单的示例代码: ```java import java.io.*; import jxl.*; try ...

    JXL: Java Excel API简易教程.pdf

    在Web应用中,可以通过JSP和Servlet调用Java Excel API,使得用户能够在线操作Excel文件。例如,可以生成CSV文件,然后让浏览器以Excel格式打开,或者直接使用API在服务器端进行复杂的Excel处理,然后将结果以下载...

    JAVA EXCEL API小技巧.pdf

    Java Excel API是一个开源项目,允许开发者在Java环境中对Excel文件进行读取、创建、修改等操作,使得即使在非Windows操作系统上也能处理Excel数据。这个API适用于各种场景,包括Web应用,通过JSP和Servlet调用来...

    JAVA EXCEL API小技巧.docx

    Java Excel API是一个开源项目,允许Java开发者通过编程方式对Excel文件进行读取、创建和更新等操作,即使在非Windows操作系统上也能实现。这个API基于Java编写,因此可以在Web应用程序中,如JSP和Servlet中方便地...

    jsp关于excel的上传下载

    在Java Web开发中,JSP(JavaServer Pages)经常用于创建动态网页,而处理Excel文件的上传和下载是常见的需求,特别是在数据导入导出、报表生成等场景。本篇文章将详细探讨如何使用JSP实现Excel的上传和下载功能。 ...

    通用iframe下载excel的javascript和Java封装程序

    标题中的“通用iframe下载excel的javascript和Java封装程序”指的是一个使用JavaScript和Java技术实现的通用文件下载解决方案,特别适用于处理Excel文件下载。这个方法利用了iframe的技术来规避浏览器的安全限制,...

    JAVA使用EXCEL例程

    标题 "JAVA使用EXCEL例程" 涉及的...综上所述,这个例程展示了Java如何利用Apache POI库来处理Excel文件,同时结合JSP和Tomcat服务器实现文件上传和数据库数据的导入,是学习Java Excel操作和Web应用开发的实用示例。

    java及jsp下导出excel表格

    在Java与JSP环境下导出Excel表格,通过使用Apache POI库,我们可以轻松地创建、填充和导出Excel文件。无论是简单的数据导出还是复杂的报表生成,Apache POI都提供了强大的工具集来满足各种需求。掌握了这一技能,...

    java使用jxl打印excel报表文件

    在JSP中,你可以使用类似的逻辑,只是需要考虑如何将生成的Excel文件响应给客户端。例如,你可以创建一个Servlet来处理请求并返回Excel文件: ```java import javax.servlet.*; import javax.servlet.http.*; ...

    java中读取excel,并在jsp中以表格展现

    在Java编程环境中,读取Excel文件并将其内容在JSP(Java Server Pages)页面上以表格形式展示是一项常见的任务,特别是在处理数据导入、导出或数据可视化时。本篇文章将详细讲解如何实现这一功能,包括读取Excel文件...

    利用 JAVA 操作 EXCEL 文件

    下面将详细介绍如何使用Java Excel API进行Excel文件的基本操作。 ##### 1. 读取Excel文件数据表 首先,需要创建一个`Workbook`对象,这是Java Excel API中的核心类之一,用于表示Excel文件。可以从本地文件系统...

Global site tag (gtag.js) - Google Analytics