JAVA中打印导入excel文件?

解决方案 »

  1.   

    如何使用POI组件操作Excel
    可以通过设置响头ContentType达到以Excel文档形式输出的目的。
    POI组件介绍
    Apache的Jakata项目POI,就可以用来操作Excel,并满足大部分需要。POI下面几个子项目,其中HSSF项目就上用来实现Excel的读写的。下面是HSSF的主页:http://jakarta.apache.org/poi/hssf/index.html.
    POI组件可以到www.apache.org下载,下载后,将jar包所有的位置加入工程的lib目录中或将jar包所有的位置加入到classpath,或者将其解压的jar包拷到Tomcat目录的common\lib目录
    最新的下载地址:http://poi.apache.org/
    (1)创建连接数据库的JavaBean的文件DBConnection.javapackage myBean;import java.sql.*;
    public class DBConnection {
    String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    String sConnStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JspSamples";

    //String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    //String sConnStr="jdbc:odbc:JspSamples";
    public DBConnection(){
    try{
    Class.forName(sDBDriver);
    }catch(ClassNotFoundException e){
    System.out.println("DBConnection()"+e.getMessage());
    }
    }
    public ResultSet execQuery(String sql){
    ResultSet rs=null;
    try{
    Connection conn=DriverManager.getConnection(sConnStr,"sa","sa");
    Statement stmt=conn.createStatement();
    rs=stmt.executeQuery(sql);
    }catch(SQLException ex){
    System.out.println("DBConnection.execQuery()"+ex.getMessage());
    }
    return rs;
    }
    }
    (2)下面的操作Excel的类会取出的前面数据库里面的所有数据,然后逐条写到Excel文件中。类的文件名POIExcel.java
    package myBean;import org.apache.poi.hssf.usermodel.*;
    import java.io.*;
    import java.sql.*;
    import myBean.DBConnection;public class POIExcel {
    private DBConnection con; public POIExcel() {
    con=new DBConnection();
    }
    //@SuppressWarnings("deprecation")
    @SuppressWarnings("deprecation")
    public void exportExcel(String name,OutputStream out){
    HSSFWorkbook wb=new HSSFWorkbook();
    HSSFSheet sheet=wb.createSheet(name);

    HSSFRow row=sheet.createRow(0);
    HSSFCell cell=row.createCell((short)0);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellValue("姓名");

    cell=row.createCell((short)1);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellValue("电子邮件");

    String sql="select name,email from db_user";
    int nRow=1;
    try{
    ResultSet rs=con.execQuery(sql);
    while(rs.next()){
    row=sheet.createRow(nRow++);
    cell=row.createCell((short)0);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellValue(rs.getString("name"));

    cell=row.createCell((short)1);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    cell.setCellValue(rs.getString("email"));
    }
    rs.close();
    }catch(SQLException e){
    System.out.println("POIExcel.exportExcel()"+e.getMessage());
    }
    try{
    wb.write(out);
    }catch(Exception e){
    System.out.println("POIExcel.exportExcel()"+e.getMessage());
    }
    }
    }
    程序首先创建一个HSSFWorkbook实例,它相当于一个Excel文件,然后创建HSSFSheet,它相当于一个Excel文件的一页。
    在创建了页对象之后,就可以向该页中添加内容了。POI将Excel文件页面中的每行用HSSFRow来表示,而每个单元格用HSFFCell对象来表示。向页面添加内容时,首先创建行,然后再创建行所包含的单元格,设置单元格的数据。向行中添加单元格时,行的列是以0开始进行索引的。
    语句cell.setEncoding(HSFFCell.ENCODING_UTF_16)用来说明单元格中的数据的编码是UTF-16,以便处理汉字,否则默认编码不能识别汉字,将会出现乱码。
    最后调用HSSFWorkbook的write方法输出添加好内容的Excel文件。
    POI提供的类和方法很丰富,远不止这里用到的,在进行实际开发时还需要参考相关的手册。
    下面是用来调用该Servlet实现POI操作并生成Excel的Servlet代码,文件名为POITest.java。
    package myBean;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import myBean.POIExcel;public class POITest extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("application/vnd.ms-excel");
    POIExcel excel=new POIExcel();
    excel.exportExcel("user",response.getOutputStream());
    }
    }
    语句response.setContentType(“application/vnd.ms-excel”);用来说明返回到客户端的数据为Excel格式。随后两句首先创建了POIExcel对象,然后调用它的exportExcel()方法输出Excel文件。
    (3)在web.xml中的配置代码:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <servlet>
        <description>EXCEL</description>
        <display-name>EXCEL</display-name>
        <servlet-name>POITest</servlet-name>
        <servlet-class>myBean.POITest</servlet-class>
      </servlet>  <servlet-mapping>
        <servlet-name>POITest</servlet-name>
        <url-pattern>/POITest</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    (4)程序的运行结果如下:
     
      

  2.   

    如何使用JXL组件操作Excel
    JXL组件介绍 
    JXL组件可从网址http://www.andykhan.com/jexcelapi/下载,下载后,将jxl.jar加入classpath,或者把jxl.jar文件拷到工程目录的lib目录下,或者拷到Tomcat安装目录下的common\lib目录下。
    读取Excel文档的思路是,先用一个输入流(InputStream)得到Excel文件,然后用JXL中的Workbook得到工作簿。用些文件时,sheet从工作簿中得到工作表,用Cell得到工作表中得某个单元格。往Excel中写入内容主要用jxl.write包中的类。总体思路如下:
    OutputStream<-WritableWorkook<-WritableSheet<-Label
    这里面Label代表的是写入Sheet的Cell位置及内容。
    InputStream->Workbook->Sheet->Cell
    就得到了Excel文件中的单元格。
    (1) 使用JXL组件实现Excel操作的确良JavaBean如下所示:JXLExcel.javapackage myBean;import java.sql.*;
    import java.io.*;
    import jxl.*;
    import jxl.write.*;
    import myBean.DBConnection;
    public class JXLExcel {

    private DBConnection con;
    public JXLExcel(){
    con=new DBConnection();
    }
    public void exportExcel(String name,OutputStream os){
    try{
    WritableWorkbook wwb=Workbook.createWorkbook(os);
    //一个是工作表的名称,另一个是工作表在工作薄中的位置
    WritableSheet ws=wwb.createSheet(name,0);
    ws.addCell(new Label(0,1,"姓名"));
    ws.addCell(new Label(1,1,"电子邮件"));

    ResultSet rs=con.execQuery("select name,email from db_user");
    int nRow=1;
    while(rs.next()){
    ws.addCell(new Label(0,nRow,rs.getString("name")));
    ws.addCell(new Label(1,nRow,rs.getString("email")));
    nRow++;
    }
    wwb.write();
    wwb.close();
    }catch(Exception e){
    System.out.println("JXLEXcel.exportExcel()"+e.getMessage());
    }
    }
    }
    (2)下面是用来调用该JavaBean实现JXL操作并生成Excel的JSP文件。文件名为JXLTest.jsp代码如下所示:
    <%@ page language="java" contentType="text/html; charset=GB2312"
        pageEncoding="GB2312"%>
    <%@ page import="myBean.JXLExcel"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
    <title>使用JXL组件操作Excel</title>
    </head>
    <body>
    <%
    response.setContentType("application/vnd.ms-excel");
    JXLExcel excel=new JXLExcel();
    excel.exportExcel("user",response.getOutputStream());
    %>
    </body>
    </html> (3)程序的运行结果如下所示:
     
      

  3.   

    这是两种JSP页面导出Excel,需要下载jar包,你自己仔细看下,根据它的步骤可以做出来的,我自己做过一遍,做出来了,加油,呵呵
      

  4.   

    我的资源里有个 java 解析 excel 到 jsp 源代码
    有个 java 解析 excel 到数据库源代码(支持 CLOB 字段,支持多种数据库)
    还有个 jsp 页面数据导出为 excel 文件源代码
    楼主可以去看看
      

  5.   

    用jxl导出大数据量时好像效率不行,我导出1000条以上的数据尽然要4秒钟,不知是我程序写的不够高效还是jxl确实效率上不行。