`
daichangfu
  • 浏览: 264194 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java jxl操作Excel

    博客分类:
  • java
阅读更多
package com.phluency.tpgroupbuying.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class ExcelUtil {
	
	/**把数组内容变为excel格式并写到response
	 * 需要提前声明类型
	 * response.setContentType("Application/msexcel");
       response.setHeader("Content-Disposition","attachment; filename=\""+GlobalUtil.getFormatTime(null,"yyyyMMddHHmmss")+".xls\""); 
	 * @param data  包含行列的数组  
	 * @return  字节数组
	 * @author yaofuyuan
     * @createTime 2012-04-28 16:00
	 */
	public static void writeExcel(HttpServletResponse response,ArrayList<ArrayList<String>> data){   
        WritableWorkbook wwb = null;   
        OutputStream os = null;
        try {   
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
        	os = response.getOutputStream();
        	wwb =Workbook.createWorkbook(os);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        if(wwb!=null){   
            //创建一个可写入的工作表   
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
            WritableSheet ws = wwb.createSheet("sheet1", 0);   
               
            //下面开始添加单元格   
            for(int i=0,rowLen=data.size();i<rowLen;i++){   
            	ArrayList<String> row=data.get(i);
                for(int j=0,colLen=row.size();j<colLen;j++){   
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
                    Label labelC = new Label(j, i, row.get(j));   
                    try {
                        //将生成的单元格添加到工作表中 
                        ws.addCell(labelC);
                    } catch (RowsExceededException e) {   
                        e.printStackTrace();   
                    } catch (WriteException e) {   
                        e.printStackTrace();   
                    }  
                }   
            }   
            try {   
                //从内存中写入文件中   
                wwb.write();   
                //关闭资源,释放内存   
                wwb.close(); 
            } catch (IOException e) {   
                e.printStackTrace();   
            } catch (WriteException e) {   
                e.printStackTrace();   
            }   
        }   
    } 
	
	/**把数组内容写到Excel文件,写到本地文件中  
	 * @param data  包含行列的数组  
	 * @return  字节数组
	 * @author yaofuyuan
     * @createTime 2012-04-28 16:00
	 */
	public static void writeExcel(String filname,ArrayList<ArrayList<String>> data){   
        WritableWorkbook wwb = null;   
        try {   
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
        	wwb =Workbook.createWorkbook(new File(filname));   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        if(wwb!=null){   
            //创建一个可写入的工作表   
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
            WritableSheet ws = wwb.createSheet("sheet1", 0);   
               
            //下面开始添加单元格   
            for(int i=0,rowLen=data.size();i<rowLen;i++){   
            	ArrayList<String> row=data.get(i);
                for(int j=0,colLen=row.size();j<colLen;j++){   
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
                    Label labelC = new Label(j, i, row.get(j));   
                    try {
                        //将生成的单元格添加到工作表中 
                        ws.addCell(labelC);
                    } catch (RowsExceededException e) {   
                        e.printStackTrace();   
                    } catch (WriteException e) {   
                        e.printStackTrace();   
                    }  
                }   
            }   
            try {   
                //从内存中写入文件中   
                wwb.write();   
                //关闭资源,释放内存   
                wwb.close(); 
            } catch (IOException e) {   
                e.printStackTrace();   
            } catch (WriteException e) {   
                e.printStackTrace();   
            }   
        }   
    }  
	
	/**把数组内容变为excel格式并写到字节数组中 
	 * @param data  包含行列的数组  
	 * @return  字节数组
	 * @author yaofuyuan
     * @createTime 2012-04-28 16:00
	 */
	public static byte[] writeExcel(ArrayList<ArrayList<String>> data){   
        WritableWorkbook wwb = null;   
        ByteArrayOutputStream os=null;
        byte[] b=null;
        try {   
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
        	os = new ByteArrayOutputStream();
        	wwb =Workbook.createWorkbook(os);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        if(wwb!=null){   
            //创建一个可写入的工作表   
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
            WritableSheet ws = wwb.createSheet("sheet1", 0);   
               
            //下面开始添加单元格   
            for(int i=0,rowLen=data.size();i<rowLen;i++){   
            	ArrayList<String> row=data.get(i);
                for(int j=0,colLen=row.size();j<colLen;j++){   
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
                    Label labelC = new Label(j, i, row.get(j));   
                    try {
                        //将生成的单元格添加到工作表中 
                        ws.addCell(labelC);
                    } catch (RowsExceededException e) {   
                        e.printStackTrace();   
                    } catch (WriteException e) {   
                        e.printStackTrace();   
                    }  
                }   
            }   
            try {   
                //从内存中写入文件中   
                wwb.write();   
                //关闭资源,释放内存   
                wwb.close(); 
            } catch (IOException e) {   
                e.printStackTrace();   
            } catch (WriteException e) {   
                e.printStackTrace();   
            }   
        }  
        try {
        	if(os!=null){
        		b=os.toByteArray();
    			os.close();	
        	}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return b;
    }
	
	/**读取Excel文件的内容  
	 * @param file  待读取的文件  
	 * @return  ArrayList<ArrayList<String>> 包括excel里的第一个工作簿的所有行列
	 * @author yaofuyuan
     * @createTime 2012-04-28 16:00
	 */  
	public static ArrayList<ArrayList<String>> readExcel(String fileName){   
		ArrayList<ArrayList<String>> data=new  ArrayList<ArrayList<String>>();    
	    Workbook wb = null;   
	    try {   
	        //构造Workbook(工作薄)对象   
	        wb=Workbook.getWorkbook(new File(fileName));   
	    } catch (BiffException e) {   
	        e.printStackTrace();   
	    } catch (IOException e) {   
	        e.printStackTrace();   
	    }      
	    if(wb==null)   
	        return data;   
	       
	    //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   
	    Sheet[] sheet = wb.getSheets();   
	    if(sheet!=null&&sheet.length>0){   
	    	Sheet sheet0=sheet[0];
	    	//得到当前工作表的行数  
	    	int rowNum = sheet0.getRows(); 
	        for(int i=0;i<rowNum;i++){
	        	//得到当前行的所有单元格   
	        	Cell[] cells = sheet0.getRow(i);
	        	ArrayList<String> row=new ArrayList<String>();
	        	 if(cells!=null&&cells.length>0){
	        		 int cellNum=cells.length;
	        		//对每个单元格进行循环 
	        		 for(int j=0;j< cellNum;j++){
	        			//读取当前单元格的值
	        			 Cell c=cells[j];
	        			 String cellValue = cells[j].getContents();
	        			 if(c.getType() == CellType.LABEL)
	        			 {
	        				 LabelCell labelc00 = (LabelCell)c;
	        				 cellValue = labelc00.getString();
	        			 }else
	        			 if(c.getType() == CellType.NUMBER)
	        			 {
	        				 NumberCell numc10 = (NumberCell)c;
	        				 cellValue = getFormatNumber(numc10.getValue());
	        			 }else
	        			 if(c.getType() == CellType.DATE)
	        			 {
	        				 DateCell datec11 = (DateCell)c;
	        				 cellValue = getFormatTime(datec11.getDate());
	        			 }
	        			 
	        			 row.add(cellValue);
	        		 } 
	        	 } 
	        	 data.add(row);
	        }   
	       
	    }   
	    //最后关闭资源,释放内存   
	    wb.close();   
	    return data;   
	}  
    /**
     * 时间格式转换
     * @author yaofuyuan
     * @createTime 2012-04-28 16:00
     */
    public static String getFormatTime(Date logtime) {
        if (null == logtime) {
            logtime = new Date();
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = "";
        try {
            time = sdf.format(logtime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return time;
    }
    /**
     * 小数格式转换
     * @author yaofuyuan
     * @createTime 2012-04-28 16:00
     */
    public static String getFormatNumber(double n) {
    	DecimalFormat df = new DecimalFormat("#.##########");
        return df.format(n);
    }
	public static void main(String[] argv){
		
//		//测试写
//		ArrayList<ArrayList<String>> test=new ArrayList<ArrayList<String>>();
//		ArrayList<String> row=new ArrayList<String>();
//		row.add("a");
//		row.add("b");
//		test.add(row);
//		row=new ArrayList<String>();
//		row.add("a");
//		row.add("b");
//		test.add(row);
//		row=new ArrayList<String>();
//		row.add("a");
//		row.add("b");
//		test.add(row);
//		row=new ArrayList<String>();
//		row.add("a");
//		row.add("b");
//		test.add(row);
//		//writeExcel("D:/a.xls",test);
//		try {
//			FileOutputStream fos=new FileOutputStream(new File("D:/b.xls"));
//			try {
//				fos.write(writeExcel(test));
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//			try {
//				fos.close();
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//			//System.out.print(new String());
//		} catch (FileNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		//测试读
		ArrayList<ArrayList<String>> data=readExcel("D:/20120419.XLS");
		for(int i=0;i<data.size();i++){
			ArrayList<String> row1=data.get(i);
			System.out.print("|");
			for(String col1:row1){
				System.out.print(col1+"|");
			}
			System.out.println();
		}
	}
	
}
  • jxl.jar (708.7 KB)
  • 下载次数: 1
分享到:
评论

相关推荐

    Java jxl操作Excel97-2003 eclipse可运行项目实例

    这个"Java jxl操作Excel97-2003 eclipse可运行项目实例"提供了一个实用的示例,帮助开发者了解如何在Eclipse环境中使用jxl库与Excel97-2003版本的文件进行交互。 1. **jxl库介绍** jxl库是Java编程语言中的一个...

    java jxl操作excel

    这篇博客文章可能详细介绍了如何利用JXL库进行Excel操作。 1. **JXL库介绍** JXL是一个开源项目,它提供了一个Java API来处理Excel文件。它支持多种Excel操作,包括读取单元格内容、设置单元格格式、处理公式以及...

    java使用jxl打印excel报表文件

    JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...

    java jxl创建Excel

    Java中的JXL库是一个非常实用的工具,它允许开发者创建、读取和修改Microsoft Excel文件。在本例中,我们将探讨如何使用JXL库来创建一个Excel文件,并对其进行各种定制,如合并单元格、设置列和单元格的属性,包括...

    Java使用JXL操作Excel

    Java使用JXL库进行Excel操作是Java开发中常见的任务,特别是在数据处理、报表生成和数据分析等领域。JXL是一个流行的开源库,它提供了丰富的API来读取、写入和修改Microsoft Excel文件。以下是对这个主题的详细说明...

    java利用jxl生成excel文件

    Java使用JXL库生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出时。JXL是一个开源的Java库,允许我们...JXL提供了广泛的API来处理各种复杂的Excel操作,是Java环境下生成Excel文件的一个实用工具。

    JXL操作excel设置字体颜色设置单元格详解

    JXL是一个韩国人写的Java操作Excel的工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows...

    jxl导出excel加水印.zip

    `jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `...

    JXL操作EXCEL的各个类的解析.doc

    JXL 操作 EXCEL 的各个类的解析是 Java 语言中操作 Excel 文件的主要方法之一。JXL 通过提供了多种类来实现对 Excel 文件的读写操作。 首先,JXL 提供了一个抽象类 Workbook,该类相当于是一个工具类,用于生成 ...

    利用jxl操作excel文件

    `jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Excel文件(.xls格式)。本篇将详细介绍如何利用`jxl`库来操作Excel文件,并结合实例说明如何从Excel文件中提取数据并生成TXT文件。 首先,我们需要...

    java poi jxl 操作excel的小例子

    - 相比于 POI,JXL 的API更加简单易用,适合小型项目或简单的Excel操作。 接下来,我们将详细介绍如何使用这些库进行Excel操作。 ### 创建Excel文件: - 使用 POI,你可以通过创建 `Workbook` 对象开始创建新的...

    java利用jxl读取excel文件

    综上所述,`jxl`库为Java开发者提供了一个强大的工具,用于处理Excel文件。通过熟悉其API,我们可以高效地读取、解析和操作Excel数据,满足各种业务需求。不过要注意,`jxl`库只支持旧版的`.xls`格式,对于`.xlsx`新...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    java中jxl操作excel

    要使用jxl进行Excel操作,首先需要将jxl.jar文件添加到项目的classpath中。这一步骤确保了Java虚拟机能够找到并加载必要的类库。在现代IDE(如Eclipse或IntelliJ IDEA)中,这通常意味着将jar文件添加到项目构建路径...

    jxl操作excel实例,jxl jar包下载

    本文将详细介绍如何使用`jxl`库进行Excel操作,并提供一个简单的实例。 首先,`jxl.jar`是`jxl`库的主要组件,你需要将其添加到你的项目类路径中。这可以通过将`jxl.jar`放在`lib`目录下或在IDE(如Eclipse、...

    Java通过POI和JXL给Excel动态添加水印

    ### Java通过POI和JXL给Excel动态添加水印 #### 概述 在实际工作中,经常需要对敏感或重要的Excel文件进行保护措施,比如添加水印。这不仅可以增加文档的专业性,还可以作为版权保护的一种手段。本文将详细介绍...

    java操作jxl生成excel的简化jar包

    自己封装的方法,调用 XlHelper.getXl(List&lt;?&gt; voList , Object head , OutputStream ops)方法,直接返回需要的excel,而不需要再去写jxl的方法。第一个参数voList 是excel里的内容,第二个参数head是excel表头。第...

    Java操作Excel(jxl.jar)

    本篇文章将深入探讨如何使用jxl.jar库来实现Java操作Excel。 首先,jxl是一个广泛使用的Java库,它允许开发者读写Microsoft Excel文件。它的主要优势在于简单易用且功能丰富,支持多种Excel格式,包括老版本的.BIFF...

    JXL操作EXCEL 数据库导出EXCEL相关文件

    JXL是一个Java库,专门用于读取、写入和修改Excel文件,它为Java开发者提供了一种方便的方式来处理Excel数据,而无需依赖Microsoft Office套件。本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用...

Global site tag (gtag.js) - Google Analytics