`

再次封装POI,读写EXCEL。

阅读更多
直接上code
package com.sinosoft.lis.pubfun;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

import com.sinosoft.utility.StrTool;
import com.sinosoft.utility.DBConnPool;
import java.io.*;
import java.util.*;
import java.sql.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;

public class ExportExcel {
    public static class Format{
        public ArrayList mListCell=null;
        public ArrayList mListBL = null;
        public ArrayList mListColWidth = null;
    }
    public static class Cell{
        public Cell(){}
        public int col;
        public int row;
        public int width=1;
        public int height=1;
        public boolean bBorder=false;
        public boolean bBold=false;
        public String content="";
    }

    public static class ListBlock{
        private String companyCode;
        public ListBlock(String str){companyCode = str;};

        public String[] colName=null;
        public String sql;
        public int row1=0;
        public int col1=0;
        public int row2;
        public int col2;
        public int size=0;
        public String[][] data=null;
        public boolean InitData(){
            if(sql==null||sql.equals(""))
                return false;
            Connection conn=null;
            try{
                conn=DBConnPool.getConnection();
                if (conn==null)
                {
                    System.out.println("数据库连接失败!");
                    return false;
                }
                data = exeSQL(sql,conn);
                if(data==null){
                    row2=row1;
                    col2=col1;
                    if(colName!=null){
                        row2++;
                        col2+=colName.length;
                    }
                }
                else{
                    row2=row1+data.length;
                    size=data.length;
                    if(colName!=null){
                        row2++;
                        col2=col1+colName.length;
                    }
                    else if(data.length>1){
                        col2=col1+data[0].length;
                    }
                    else
                        col2=col1;
                }
            }
            catch(Exception e){
                System.out.println(e);return false;
            }
            finally{
                try{conn.close();}catch(Exception e){};
            }
            return true;
        }
    }

    public static void AddCellToList(ArrayList list,String text,int row,int col,int width,int height,boolean bBorder,boolean bBold){
        Cell tCell = new Cell();
        tCell.row=row;
        tCell.col=col;
        tCell.bBorder=bBorder;
        tCell.bBold=bBold;
        tCell.height=height;
        tCell.width=width;
        tCell.content=text;
        list.add(tCell);
    }

    public ExportExcel() {
    }


    public boolean write(Format format,BufferedOutputStream bos)
    {
        if(format==null)
            return false;
        ArrayList listCell = format.mListCell;
        ArrayList listLB = format.mListBL;
        ArrayList listColWidth = format.mListColWidth;

        if(null==listCell && null==listLB)
            return false;
        if(null==bos)
            return false;

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");

        try{

        if(listColWidth!=null){
            for(int i=0;i<listColWidth.size();i++){
                String[] para = (String[])listColWidth.get(i);
                short nCol = (short)Integer.parseInt(para[0]);
                short nWidth = (short)Integer.parseInt(para[1]);
                sheet.setColumnWidth(nCol,nWidth);
            }
        }

        // Create a new font and alter it.
        HSSFFont fontBold = wb.createFont();
        fontBold.setFontHeightInPoints((short)10);
        fontBold.setFontName("宋体");
        fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

        HSSFFont fontNormal = wb.createFont();
        fontNormal.setFontHeightInPoints((short)10);
        fontNormal.setFontName("宋体");
        fontNormal.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

        HSSFCellStyle styleBorderBold = wb.createCellStyle();
        styleBorderBold.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        styleBorderBold.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        styleBorderBold.setBorderRight(HSSFCellStyle.BORDER_THIN);
        styleBorderBold.setBorderTop(HSSFCellStyle.BORDER_THIN);
        styleBorderBold.setFont(fontBold);

        HSSFCellStyle styleBorderNormal = wb.createCellStyle();
        styleBorderNormal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        styleBorderNormal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        styleBorderNormal.setBorderRight(HSSFCellStyle.BORDER_THIN);
        styleBorderNormal.setBorderTop(HSSFCellStyle.BORDER_THIN);
        styleBorderNormal.setFont(fontNormal);

        HSSFCellStyle styleBold = wb.createCellStyle();
        styleBold.setFont(fontBold);

        HSSFCellStyle styleNormal = wb.createCellStyle();
        styleNormal.setFont(fontNormal);

        if(listLB!=null){
            for(int iLB=0;iLB<listLB.size();iLB++){
                ListBlock currLB = (ListBlock)listLB.get(iLB);
                int startRow = currLB.row1;
                for(int i=0;currLB.colName!=null&&i<currLB.colName.length;i++){
                    int rowIndex = startRow;
                    int colIndex = currLB.col1+i;
                    HSSFRow row = sheet.getRow(rowIndex);
                    if(row==null)
                        row = sheet.createRow(rowIndex);
                    HSSFCell cell = row.getCell((short)colIndex);
                    if(cell==null)
                        cell = row.createCell((short)colIndex);
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    cell.setCellStyle(styleBorderBold);
                    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                    cell.setCellValue(currLB.colName[i]);
                }

                if(currLB.colName!=null)
                    startRow=currLB.row1+1;

                String[][] data = currLB.data;
                if(data!=null){
                    for(int i=0;i<data.length;i++){
                        for(int j=0;j<data[i].length;j++){
                            int rowIndex = startRow+i;
                            int colIndex = currLB.col1+j;

                            HSSFRow row = sheet.getRow(rowIndex);
                            if(row==null)
                                row = sheet.createRow(rowIndex);
                            HSSFCell cell = row.getCell((short)colIndex);
                            if(cell==null)
                                cell = row.createCell((short)colIndex);
                            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                            cell.setCellStyle(styleBorderNormal);
                            cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                            cell.setCellValue(data[i][j]);
                        }
                    }
                }
            }
        }


        if(listCell!=null){
            for(int i=0;i<listCell.size();i++){
                Cell currCell = (Cell)listCell.get(i);
                for(int j=currCell.row;j<currCell.row+currCell.height;j++){
                    for(int k=currCell.col;k<currCell.col+currCell.width;k++){
                        HSSFRow trow = sheet.getRow(j);
                        if(trow==null)
                            trow = sheet.createRow(j);
                        HSSFCell tcell = trow.getCell((short)k);
                        if(tcell==null)
                            tcell = trow.createCell((short)k);
                        tcell.setCellType(HSSFCell.CELL_TYPE_STRING);
                        tcell.setEncoding(HSSFCell.ENCODING_UTF_16);
                        if(j==currCell.row&&k==currCell.col)
                            tcell.setCellValue(currCell.content);
                        if(currCell.bBorder){
                            if(currCell.bBold)
                                tcell.setCellStyle(styleBorderBold);
                            else
                                tcell.setCellStyle(styleBorderNormal);
                        }
                        else{
                            if(currCell.bBold)
                                tcell.setCellStyle(styleBold);
                            else
                                tcell.setCellStyle(styleNormal);
                        }
                    }
                }
                if(currCell.height>1||currCell.width>1)
                    sheet.addMergedRegion(new Region(currCell.row,(short)currCell.col,currCell.row+currCell.height-1,(short)(currCell.col+currCell.width-1)));
            }
        }

        wb.write(bos);
        }
        catch(Exception e){
            System.out.println(e);
            return false;
        }

        return true;
    }


    public static String[][] exeSQL(String sql,String companyCode){
        String[][] retArray = null;

        Statement stmt = null;
        ResultSet rs = null;
        ResultSetMetaData rsmd = null;
        String mResult = "";
        ArrayList tempList = new ArrayList();

        System.out.println("ExportExcel.exeSQL() : " + sql.trim());
        Connection conn=null;
        conn=DBConnPool.getConnection();
        if (conn==null)
        {
          System.out.println("数据库连接失败!");
          return null;
        }

        try {
            stmt = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY );

            rs = stmt.executeQuery( StrTool.GBKToUnicode( sql ));
            rsmd = rs.getMetaData();
            int n = rsmd.getColumnCount();
            int k = 0;

            // 取得总记录数
            while( rs.next() ) {
                String[] tempRow = new String[n];
                k++;
                for( int j = 1; j <= n; j++ ) {
                    String strValue = "";
                    //根据数据类型取得数据的值
                    strValue = getDataValue( rsmd, rs, j );
                    tempRow[j-1] = strValue;
                }
                tempList.add(tempRow);
            }
            rs.close();
            stmt.close();

            if(tempList.size()>0){
            retArray = new String[tempList.size()][];
            for(int i=0;i<tempList.size();i++){
                String[] row = (String[])tempList.get(i);
                retArray[i]=row;
                //for(int j=0;j<row.length;j++){
                //    retArray[i][j] = row[j];
                //}
            }
            }
        }
        catch(Exception e) {
            e.printStackTrace();
            try{ rs.close(); stmt.close(); } catch( Exception ex ) {}
        }
        finally{
                try{conn.close();} catch( Exception ex ) {}
        }

        return retArray;
    }

    public static String[][] exeSQL(String sql,Connection conn){
        String[][] retArray = null;

        Statement stmt = null;
        ResultSet rs = null;
        ResultSetMetaData rsmd = null;
        String mResult = "";
        ArrayList tempList = new ArrayList();

        System.out.println("ExportExcel.exeSQL() : " + sql.trim());
        boolean connflag=true;
        if (conn==null)
        {
          System.out.println("数据库连接失败!");
          return null;
        }

        try {
            stmt = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY );

            rs = stmt.executeQuery( StrTool.GBKToUnicode( sql ));
            rsmd = rs.getMetaData();
            int n = rsmd.getColumnCount();
            int k = 0;

            // 取得总记录数
            while( rs.next() ) {
                String[] tempRow = new String[n];
                k++;
                for( int j = 1; j <= n; j++ ) {
                    String strValue = "";
                    //根据数据类型取得数据的值
                    strValue = getDataValue( rsmd, rs, j );
                    tempRow[j-1] = strValue;
                }
                tempList.add(tempRow);
            }
            rs.close();
            stmt.close();

            if(tempList.size()>0){
            retArray = new String[tempList.size()][];
            for(int i=0;i<tempList.size();i++){
                String[] row = (String[])tempList.get(i);
                retArray[i]=row;
                //for(int j=0;j<row.length;j++){
                //    retArray[i][j] = row[j];
                //}
            }
            }
        }
        catch(Exception e) {
            e.printStackTrace();
            try{ rs.close(); stmt.close(); } catch( Exception ex ) {}
        }
        return retArray;
    }


    public static String getDataValue( ResultSetMetaData rsmd, ResultSet rs, int i )
    {
      String strValue = "";
      try
      {
        int dataType = rsmd.getColumnType( i );
        int dataScale = rsmd.getScale( i );
        int dataPrecision =rsmd.getPrecision(i);
        if( dataType == Types.CHAR || dataType == Types.VARCHAR ) strValue = StrTool.unicodeToGBK( rs.getString( i ));
        if( dataType == Types.TIMESTAMP || dataType == Types.DATE ) strValue = (new FDate()).getString( rs.getDate( i ));
        if( dataType == Types.DECIMAL || dataType == Types.DOUBLE ) strValue = String.valueOf( rs.getDouble( i ));
        if( dataType == Types.INTEGER || dataType == Types.SMALLINT ) strValue = String.valueOf( rs.getInt( i ));
        if( dataType == Types.NUMERIC )
        {
          if( dataScale == 0 )
          {
            if (dataPrecision==0)
              strValue = String.valueOf( rs.getDouble(i));
            else
              strValue = String.valueOf( rs.getLong(i));
          }
          else{
            strValue = String.valueOf(rs.getBigDecimal(i));
            System.out.println("BigDecimal: The Numeric is = "+strValue);
          }
        }
        if(strValue == null)
            strValue = "";
        strValue = PubFun.getInt(strValue);
      }
      catch( Exception ex ){}

      return strValue;
  }


    public static void main(String[] args) {
        ExportExcel excel = new ExportExcel();
        try{
            ExportExcel.Format format = new ExportExcel.Format();
            ArrayList listCell = new ArrayList();
            ArrayList listLB = new ArrayList();
            ArrayList listColWidth = new ArrayList();
            format.mListCell=listCell;
            format.mListBL=listLB;
            format.mListColWidth=listColWidth;

            listColWidth.add(new String[]{"0","5000"});

//            ExportExcel.Cell tCell = new ExportExcel.Cell();
//            tCell.row=0;
//            tCell.col=0;
//            tCell.bBorder=true;
//            tCell.height=1;
//            tCell.width=5;
//            tCell.content="边框";
//            listCell.add(tCell);
//
//            tCell = new ExportExcel.Cell();
//            tCell.row=1;
//            tCell.col=0;
//            tCell.bBorder=false;
//            tCell.height=1;
//            tCell.width=5;
//            tCell.content="无边框";
//            listCell.add(tCell);

           // ExportExcel.ListBlock tLB = new ExportExcel.ListBlock("001");
            //tLB.colName=new String[]{"编号","姓名"};
//            tLB.sql="select * from lduser ";
//            tLB.col1=0;
//            tLB.row1=2;
//            tLB.InitData();
//            listLB.add(tLB);

            ExportExcel.ListBlock tLB1 = new ExportExcel.ListBlock("001");
//            tLB1.colName=new String[]{"集体合同号码","合同号码","被保人客户号","印刷号码","投保人客户号码","管理机构","处理机构","家庭保障号","与主被保人关系","与投保人关系","客户地址号码","客户内部号码","被保人名称","被保人性别","被保人出生日期","证件类型",
//						                          "证件号码","国籍","民族","户口所在地","婚姻状况","结婚日期","健康状况","身高","体重","学历","信用等级","银行编码","银行帐号","银行帐户名","入司日期","参加工作日期","职位","工资","职业类别","职业代码",
//												  "职业(工种)","兼职(工种)","是否吸烟标志","保险计划编码","操作员","被保人状态","入机日期","入机时间","最后一次修改日期","最后一次修改时间","核保状态","最终核保人编码","核保完成日期","核保完成时间","","被保人数目"};

			tLB1.colName=new String[]{"集体合同号码","被保人客户号","姓名","性别","出生日期","证件类型","证件号码","保险计划"};
            tLB1.sql="select Grpcontno,InsuredNo,Name,Sex,Birthday,IDType,IDNo,ContPlanCode From LCInsured where Grpcontno='140110000000041'";
            //tLB1.sql="select * From LDuser";
			tLB1.col1=0;
            //tLB1.row1=tLB.row2+10;
			tLB1.row1=0;
            tLB1.InitData();
            listLB.add(tLB1);

            File of = new File("d:\\excel.xls");
            FileOutputStream ofs = new FileOutputStream(of);
            BufferedOutputStream bos = new BufferedOutputStream(ofs);
            excel.write(format,bos);
        }
        catch(Exception e){System.out.println(e);}
        finally{}

    }

}

封装类的使用
<%@page contentType="text/html;charset=GBK" %>
<%@page import="java.util.*" %>
<%@page import="java.io.*" %>
<%@page import="com.sinosoft.lis.pubfun.*"%>
<%@page import="com.sinosoft.utility.*"%>
<%
//在此设置导出Excel的列名,应与sql语句取出的域相对应
GlobalInput tGlobalInput = new GlobalInput(); 
tGlobalInput = (GlobalInput)session.getValue("GI");   
ExportExcel.Format format = new ExportExcel.Format();
ArrayList listCell = new ArrayList();
ArrayList listLB = new ArrayList();
ArrayList listColWidth = new ArrayList();
format.mListCell=listCell;
format.mListBL=listLB;
format.mListColWidth=listColWidth;
ExportExcel.Cell tCell=null;
ExportExcel.ListBlock tLB=null;

String tManageCom = tGlobalInput.ComCode;
String SerialNo ="0000000001";
String ExportExcelSQL =request.getParameter("ExportExcelSQL");
System.out.println("Excel语句="+ExportExcelSQL);
listColWidth.add(new String[]{"0","5000"});  
String sql = ExportExcelSQL;
tLB = new ExportExcel.ListBlock("001");
tLB.colName = new String[]{"管理机构","管理机构名称","代理人编码","代理人姓名","证件类型编码","证件类型名称","证件号码","二次入司标记","入司职级","","入司标志","入司日期","离职日期","序列号"  };
tLB.sql = sql;
tLB.row1 = 0;
tLB.col1 = 0;
tLB.InitData();
listLB.add(tLB);
try
{
	  response.reset();
    response.setContentType("application/octet-stream");    
    //设置导出的xls文件名默认值
    String HeaderParam = "\""+"attachment;filename="+SerialNo+".xls"+"\"";
    System.out.println("导出文件名称:"+HeaderParam);
    response.setHeader("Content-Disposition",HeaderParam);
    OutputStream outOS = response.getOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(outOS);
    ExportExcel excel = new ExportExcel();
    excel.write(format, bos);
    bos.flush();
    bos.close();
}
catch(Exception e)
{
    System.out.println("导出Excel失败!");
 %>
 <script language="JavaScript" type="text/javascript">
 alert("导出Excel失败!");
 </script>>
 <%   
};
%>
分享到:
评论
1 楼 wanghonghui023 2010-08-19  
楼主把架包共享依稀啊啊

import com.sinosoft.utility.StrTool;  
import com.sinosoft.utility.DBConnPool;  


我的邮箱:amama_110@yahoo.com.cn  多谢

相关推荐

    POI操作Excel的封装

    在封装POI操作Excel的过程中,反射可能被用来动态地创建对象,调用方法,或访问私有成员,这使得代码更具灵活性和可扩展性。例如,可以使用反射动态地根据Excel工作表的列名创建对应的Java对象属性,或者在不知道...

    java中poi读写excel封装工具类(兼容office2003和2007等版本)

    以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍** Apache POI是一个开源项目,允许Java开发者创建、修改和显示Microsoft Office文件,包括Excel、Word和PowerPoint。它的核心...

    POI读写excel(.xls/.xlsx)的Demo

    在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入探讨如何使用Apache POI库在Java中读取和写入Excel文件。 1. **Apache POI库介绍** Apache POI 提供了 HSSF(Horrible Spreadsheet Format)和 XSSF(XML ...

    基于POI的Excel操作Java类

    为更方便的使用POI的API来操作Excel(2003)文件,对POI中针对Excel文件的读写进行了简单封装。此类中包含以下功能: 1.根据模板创建Excel文件 2.获取及更新Excel文件内容 3.创建、复制Sheet 4.设置Sheet名称 ... ...

    ExcelFunction_读写excel_读写excel_excel读写_excel读写_源码

    3. **NPOI**: NPOI是一个针对Apache POI的.NET实现,支持读写Excel(XLS和XLSX)以及Word文档。它是跨平台的,可以在.NET Core上运行,适合服务器端应用。 对于"ExcelFunction.cs"这个文件,我们可以预期它可能包含...

    一个java用POI组件读写Excel的类

    一个java用POI读写Excel的类封装了一个读取Excel数据的方法和一个写入Excel数据的方法,写入的话可从数据库读取或自己写一个List...

    POI操作EXCEL文件的简单封装

    封装POI操作Excel的过程通常包括以下几个步骤: 1. 引入依赖:在Java项目中,你需要添加Apache POI的依赖库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    poi导出excel通用类

    Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在这个场景中,我们关注的是如何使用POI来创建一个通用的、可复用的类,以便于在不同项目中快速...

    POI导出Excel表格

    Apache POI 是一个开源项目,它提供了一组API用于读写Microsoft Office格式的文件,如Excel(XLS,XLSX),Word(DOC,DOCX)和PowerPoint(PPT,PPTX)。在Excel方面,POI提供了HSSF(旧的BIFF格式,用于.xls文件...

    C++读写excel类,封装的完整,可以直接用

    在这个场景下,标题提到的“C++读写excel类”可能是指一个已经封装好的库,方便开发者直接在C++项目中进行Excel文件的操作。描述中提到这个类经过了实际使用,效果良好,适用于使用VC(Visual C++)进行Excel操作,...

    Excel POI 工具类

    10. **数据流处理**:除了处理本地文件,工具类也可能支持从网络流或内存中读写Excel,便于在Web应用中处理Excel数据。 通过使用这样的"Excel POI 工具类",开发人员可以避免重复编写相同的代码,提高代码的可维护...

    VC/MFC直接读写Excel数据

    而当我们需要在这些程序中处理Excel文件时,通常会利用MFC的扩展来直接读写Excel数据。本教程将深入讲解如何使用MFC来实现这个功能。 首先,我们需要了解Microsoft Office的自动化接口,这是读写Excel的基础。...

    spring mvc easyui-POI导出excel封装源码

    总结来说,"spring mvc easyui-POI导出excel封装源码"项目是将Spring MVC的后端处理能力与EasyUI的前端展示效果以及POI的Excel处理功能相结合,实现了一个功能强大且界面美观的Excel数据导出功能。这个项目对于需要...

    java_poi导入excel通用工具类

    - 在Excel处理方面,POI 提供了 HSSF(Horrible Spreadsheet Format)和 XSSF(XML Spreadsheet Format)两个API,分别用于读写旧版的 `.xls` 文件和较新的 `.xlsx` 文件。 - POI 提供了 Sheet、Row、Cell 等类,...

    VC++下读写EXCEL

    为了解决这些问题,可以考虑使用第三方库,如`libxl`,`Apache POI`,或者`OpenXML SDK`,它们提供了更直接且跨平台的API来读写Excel文件。 总的来说,通过理解COM组件和Excel对象模型,开发者可以在VC++环境下编写...

    Java用POI API实现对Excel表的读取与写入,包含对数据库的读写,亲测有效

    1、POI_EXCEL包下分别有两个类,一个是读取excel内容,一个是想excel写入内容 2、cn.itcast包下的所有包,是为了实现从excel写入到数据库中,和从数据库写入到excel中 注意事项: 1、需要导入maven工程 2、使用...

    java用poi解析excel2003和2007并封装成对象返回

    Apache POI是一个开源项目,提供了读写Microsoft Office格式文件的能力,包括Excel。下面我们将详细探讨如何使用POI来解析这两种不同版本的Excel文件,并将其数据封装成对象。 首先,理解Excel的文件格式差异。...

    VS2010/MFC 读写excel文件 操作类

    以下将详细讲解如何通过MFC在VS2010中实现读写Excel文件的操作。 首先,我们需要了解基础的Excel文件格式。Excel文件通常以.xlsx或.xls为扩展名,它们是基于Open XML标准的。在MFC中,我们不会直接操作这些XML文件...

    poi excel 读写 2007 springmvc

    在IT行业中,Apache POI是一个广泛使用的库,主要用于处理Microsoft Office格式的文件,尤其是Excel文档。在本场景中,我们关注的...同时,还可以考虑将数据读写操作封装成服务或工具类,提高代码的复用性和可维护性。

Global site tag (gtag.js) - Google Analytics