java调Excel

来源:互联网 发布:关于远离网络的演讲稿 编辑:程序博客网 时间:2024/05/17 19:21

 

具体的需求:在jsp页面上显示从数据库中取出的行列集,然后下面一个按钮,当点击按钮时直接调出Excel文件,excel文件中的内容和jsp页面上的内容一样。并且要求对excel中的内容的字体,字号,等进行格式化。

解决此问题,首先连库,输出

 

package cn.ityc.data;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConn {
    
    
private static Connection conn;
    
private Statement stmt;
    
private ResultSet rs;
    
private Connection DBConn(){
        
try {
            Class.forName(
"com.mysql.jdbc.Driver").newInstance();
            conn    
=    DriverManager.getConnection("jdbc:mysql://localhost:3306/excel","root","111111");
        }
 catch (InstantiationException e) {
            e.printStackTrace();
        }
 catch (IllegalAccessException e) {
            e.printStackTrace();
        }
 catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 catch (SQLException e) {
            e.printStackTrace();
        }

        
return conn;
    }

    
public static DBConn getInstance(){
        DBConn dbconn    
=     new DBConn();
        
return dbconn;
    }

    
public boolean isExist(String sql){
        
boolean isExist    =    false;
        
try {
            Connection conn    
=     DBConn.getInstance().DBConn();
            Statement stmt    
=    conn.createStatement();
            rs                
=    stmt.executeQuery(sql);
            
if(rs.next()){
                isExist    
=    true;
            }

        }
 catch (SQLException e) {
            e.printStackTrace();
        }

        
return isExist;
    }

    
public boolean update(String sql){
        
boolean isUpdate    =    false;
        
try {
            conn    
=     DBConn.getInstance().DBConn();
            stmt    
=    conn.createStatement();
            
int num    =    stmt.executeUpdate(sql);
            
if(num>0){
                isUpdate    
=    true;
            }

        }
 catch (SQLException e) {
            e.printStackTrace();
        }

        
return isUpdate;
    }

    
public ResultSet query(String sql){
        
try {
            conn    
=     DBConn.getInstance().DBConn();
            stmt    
=     conn.createStatement();
            rs        
=    stmt.executeQuery(sql);
        }
 catch (SQLException e) {
            e.printStackTrace();
        }
        
        
        
return rs;
    }

}

我采用了jdbc,连接数据库mysql数据库

 

然后用一个Getlist.java将结果集ResultSet转化成list

 

package cn.ityc.data;

import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.ityc.struts.form.GradeForm;

public class GetList {
    
public static List<GradeForm> getData(String sql){
        List
<GradeForm> list = new ArrayList<GradeForm>();
        ResultSet rs    
=    DBConn.getInstance().query(sql);
        
try {
            
while(rs.next()){
                GradeForm gradeForm     
=    new GradeForm();
                String     name    
=     rs.getString("name");
                String  course    
=    rs.getString("course");
                BigDecimal     grade    
=    rs.getBigDecimal("grade");
                gradeForm.setName(name);
                gradeForm.setCourse(course);
                gradeForm.setGrade(grade);
                list.add(gradeForm);
            }
    
        }
 catch (SQLException e) {
            e.printStackTrace();
        }

        
return list;
    }

}

然后用一个测试输出的主方法类

 

package cn.ityc.data;

import java.util.ArrayList;
import java.util.List;

import cn.ityc.struts.form.GradeForm;



public class TestDemo {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        String sql    
=    "select * from excel";
        List
<GradeForm> list    =    (ArrayList<GradeForm>)GetList.getData(sql);
        
for(int i=0;i<list.size();i++){
            System.out.println(list.get(i).getName());
            System.out.println(list.get(i).getCourse());
            System.out.println(list.get(i).getGrade());
        }

    }

}

当然,我建的mysql的数据库是

 

-- 
--
 表的结构 `excel`
--
 

CREATE TABLE `excel` (
  `id` 
int(10NOT NULL,
  `name` 
varchar(30) collate gb2312_bin default NULL,
  `course` 
varchar(30) collate gb2312_bin default NULL,
  `grade` 
decimal(10,0default NULL,
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=gb2312 COLLATE=gb2312_bin;

-- 
--
 导出表中的数据 `excel`
--
 

INSERT INTO `excel` (`id`, `name`, `course`, `grade`) VALUES 
(
10x75736572310xe789a9e7908691),
(
20x75736572320xe789a9e7908690),
(
30x75736572330xe58c96e5ada691);

然后就可以在java的控制台进行最简单的数据库数据读取了。

那么如何将这些写入excel呢?我在网上找了半天找了一个poi的三个jar包,可以对excel就行一系列的操作

 

package cn.ityc.data;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFPrintSetup;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

import cn.ityc.struts.form.GradeForm;
public class Excel {
    
    
private String sheetName;
    
private HSSFWorkbook hwb;
    
private short rowNumber;
    
private short cellNumber;
    FileOutputStream fileOut;
    
public  void produce(){
          
try {
             fileOut 
= new FileOutputStream("aa.xls");
        }
 catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }


        hwb  
=   new  HSSFWorkbook();
        sheetName    
=    "sheet1";
        HSSFSheet sheet  
=  this.createSheet();
        HSSFRow row  
=  sheet.createRow((short)0);
        sheet.addMergedRegion(
new Region(0,(short)0,0,(short)2));// 
        HSSFCell cell1  =  row.createCell((short)0);
        HSSFCell cell2  
=  row.createCell((short)1);
        HSSFCell cell3  
=  row.createCell((short)2);
         
// 定义表头的内容
        cell1.setCellValue("姓名");
//        cell2.setCellValue("课程");
//        cell3.setCellValue("分数");
        MyHSSFCellStyle mystyle    =    new MyHSSFCellStyle();
        mystyle.setFontName(
"楷体");
        mystyle.setFontSize((
short)800);
        mystyle.setHwb(hwb);
        HSSFCellStyle style    
=    mystyle.getHSSFCellStyle();
       
// style.setWrapText(true);
        cell1.setCellStyle(style);
        cell2.setCellStyle(style);
        HSSFPrintSetup ps 
= sheet.getPrintSetup();    
        sheet.setAutobreaks(
true);   
        ps.setFitHeight((
short)800);
        ps.setFitWidth((
short)800);

        String sql
="select * from excel";
        List
<GradeForm> list    =    GetList.getData(sql);
        
         
for(int i=0;i<GetList.getData(sql).size();i++)  {
             
// 定义数据从第二行开始       
            row  =  sheet.createRow((short)i+1);
            cell1  
=  row.createCell((short)0);
            cell2  
=  row.createCell((short)1);
            cell3  
=  row.createCell((short)2);
            cell1.setCellValue(list.get(i).getName());
            cell2.setCellValue(list.get(i).getCourse());
            String grade    
=    list.get(i).getGrade()+"";
            cell3.setCellValue(grade);
             mystyle    
=    new MyHSSFCellStyle();
            mystyle.setFontName(
"楷体");
            mystyle.setFontSize((
short)300);
            mystyle.setHwb(hwb);
             style    
=    mystyle.getHSSFCellStyle();
            cell1.setCellStyle(style);
            cell2.setCellStyle(style);
        }

        
try {
              hwb.write(fileOut);
              fileOut.close();
        }
 catch (IOException e) {
            e.printStackTrace();
        }

        
try {
            Open.open(
"aa.xls");
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    
private HSSFSheet createSheet(){
        HSSFSheet sheet  
=  hwb.createSheet(sheetName);
        
return sheet;
    }

    
private HSSFRow createRow(){
        HSSFRow row    
=    this.createSheet().createRow(rowNumber);
        
return row;
    }

    
private HSSFCell createCell(){
        HSSFCell cell  
=  this.createRow().createCell(cellNumber);
        
return cell;
    }

}

其中此类用到下面的辅助的类,大家一看就会明白

 

package cn.ityc.data;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class MyHSSFCellStyle {
    
private HSSFWorkbook hwb;
    
private String fontName;
    
private short fontSize;
    
public String getFontName() {
        
return fontName;
    }

    
public void setFontName(String fontName) {
        
this.fontName = fontName;
    }


    
public short getFontSize() {
        
return fontSize;
    }

    
public void setFontSize(short i) {
        
this.fontSize = i;
    }

    
public HSSFCellStyle getHSSFCellStyle(){
         HSSFCellStyle style
=hwb.createCellStyle();
          style.setAlignment(style.ALIGN_CENTER);
          HSSFFont hf
=hwb.createFont();
          hf.setFontName(
this.getFontName());
          hf.setFontHeight(
this.getFontSize());
          style.setFont(hf);
        
return style;
    }

    
public HSSFWorkbook getHwb() {
        
return hwb;
    }

    
public void setHwb(HSSFWorkbook hwb) {
        
this.hwb = hwb;
    }

}

 

值得提一下的是下面这个Open,他是一个在windows的环境下打开文件一个方法。不能快平台。这是个缺陷

 

package cn.ityc.data;

import java.io.IOException;

public class Open {


              
public   static   void   open(String fileName)   throws   IOException   
              
{   
                     Runtime   r   
=   Runtime.getRuntime();   
                      Process   p   
=   null;   
                      String   strwinapp   
=   "excel.exe";   
                      
try   
                      
{   
                              p   
=   Runtime.getRuntime().exec("cmd /c start "+fileName);  
                      }
   
                      
catch(Exception   e)   
                      
{   
                              e.printStackTrace();   
                      }
   
              }
   
}

主要的代码就是这些。

然后我用了struts1。2来实现的

所以下面有action,form,和struts-config.xml文件

action

 

package cn.ityc.struts.action;

import java.util.List;

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

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 cn.ityc.data.Excel;
import cn.ityc.data.GetList;

public class GradeAction extends DispatchAction {


    
public ActionForward list(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        List list    
=    GetList.getData("select * from excel");
        request.getSession().setAttribute(
"list", list);
        
return mapping.findForward("showlist");
    }

    
public ActionForward excel(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        Excel ee    
=    new Excel();
        ee.produce();
        
return mapping.findForward("success");
    }

}

 

form

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package cn.ityc.struts.form;

import java.math.BigDecimal;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/** 
 * MyEclipse Struts
 * Creation date: 11-30-2007
 * 
 * XDoclet definition:
 * @struts.form name="gradeForm"
 
*/

public class GradeForm extends ActionForm {
    
/*
     * Generated fields
     
*/


    
/** grade property */
    
private BigDecimal grade;

    
/** course property */
    
private String course;

    
/** name property */
    
private String name;

    
/*
     * Generated Methods
     
*/


    
/** 
     * Method validate
     * 
@param mapping
     * 
@param request
     * 
@return ActionErrors
     
*/

    
public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) 
{
        
// TODO Auto-generated method stub
        return null;
    }


    
/** 
     * Method reset
     * 
@param mapping
     * 
@param request
     
*/

    
public void reset(ActionMapping mapping, HttpServletRequest request) {
        
// TODO Auto-generated method stub
    }


    
/** 
     * Returns the grade.
     * 
@return String
     
*/



    
/** 
     * Returns the course.
     * 
@return String
     
*/

    
public String getCourse() {
        
return course;
    }


    
/** 
     * Set the course.
     * 
@param course The course to set
     
*/

    
public void setCourse(String course) {
        
this.course = course;
    }


    
/** 
     * Returns the name.
     * 
@return String
     
*/

    
public String getName() {
        
return name;
    }


    
/** 
     * Set the name.
     * 
@param name The name to set
     
*/

    
public void setName(String name) {
        
this.name = name;
    }


    
public BigDecimal getGrade() {
        
return grade;
    }


    
public void setGrade(BigDecimal grade) {
        
this.grade = grade;
    }

}

struts-config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  
<data-sources />
  
<form-beans >
    
<form-bean name="gradeForm" type="cn.ityc.struts.form.GradeForm" />

  
</form-beans>

  
<global-exceptions />
  
<global-forwards />
  
<action-mappings >
    
<action
      attribute
="gradeForm"
      input
="/form/grade.jsp"
      name
="gradeForm"
      parameter
="method"
      path
="/grade"
      scope
="request"
      type
="cn.ityc.struts.action.GradeAction">
      
<forward name="success" path="/index.jsp" />
      
<forward name="showlist" path="/showlist.jsp" />
    
</action>

  
</action-mappings>

  
<message-resources parameter="cn.ityc.struts.ApplicationResources" />
</struts-config>

好了,马上下班了。里面需要poi的三个包和jdbc的包,如果想要的请给我wwwityc@126.com发邮件。

 

原创粉丝点击