`

jxl

 
阅读更多
Java生成和操作Excel文件


package demo.dcn.vo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class Excel {
	/**
	 * @param args
	 * Excel读写程序
	 * @throws IOException 
	 * @throws BiffException 
	 */
	public static void main(String[] args) throws BiffException, IOException {
		writeExcel();
		readExcel();
	}
	public static void readExcel() throws BiffException, IOException{
		List list = new ArrayList();
		Workbook rwb =null;
		Cell cell = null;
		InputStream stream = new FileInputStream("E:\\xml\\x.xls");//创建一个输出流
		rwb = Workbook.getWorkbook(stream); //获取Excel文件对象
		Sheet sheet = rwb.getSheet(0);//获取文件的指定工作表 默认的第一个
		for(int i=0;i<sheet.getRows();i++){//行数(表头的目录不需要,从1开始
			String[] str = new String[sheet.getColumns()];   //创建一个数组 用来存储每一列的值
			for(int k=0;k<sheet.getColumns();k++){
				//获取第i行,第k列的值
				cell = sheet.getCell(k,i);
				str[k] = cell.getContents();
				//把刚获取的列存入list
			     list.add(str);
			}
		}
		for(int i=0;i<list.size();i++){
			  String[] str = (String[])list.get(i);
			  for(int j=0;j<str.length;j++){
				  System.out.println(str[j]);
			  }
		  }
	}
	
	/**
	 * 写excel文件
	 */
	public static void writeExcel(){
		 String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};
		 try{
			 
	            long start = System.currentTimeMillis(); // 获得开始时间  
	            String filePath = "d:\\testJXL.xls";     // 输出的excel的路径   
	            WritableWorkbook wwb;      // 创建Excel工作薄   
	            OutputStream os = new FileOutputStream(filePath);  
	            wwb=Workbook.createWorkbook(os); // 新建立一个jxl文件,即在d盘下生成testJXL.xls    
	            WritableSheet sheet = wwb.createSheet("产品清单", 0);   // 添加第一个工作表并设置第一个Sheet的名字 
	            Label label;
	            
	            for(int i=0;i<title.length;i++){   
	                // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z   
	                // 在Label对象的子对象中指明单元格的位置和内容   
	                label = new Label(i,0,title[i]); 
	                label = new Label(i, 0, title[i], getHeader());
	                // 将定义好的单元格添加到工作表中   
	                sheet.addCell(label);   
	            } 
	            // 下面是填充数据   
	             /*   
	              * 保存数字到单元格,需要使用jxl.write.Number 
	              * 必须使用其完整路径,否则会出现错误 
	             * */ 
	           // 填充产品编号   
	            jxl.write.Number number = new jxl.write.Number(0,1,20071001);   
	            sheet.addCell(number);
	            // 填充产品名称   
	             label = new Label(1,1,"金鸽瓜子");   
	            sheet.addCell(label); 
	            /* 
		            * 定义对于显示金额的公共格式 
		              * jxl会自动实现四舍五入 
		             * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45 
		             * */ 
		            jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#,###.00");   
		            jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf); 
		            // 填充产品价格   
		            jxl.write.Number nb = new jxl.write.Number(2,1,200000.45,wcf);   
		            sheet.addCell(nb);   
		            // 填充产品数量   
		             jxl.write.Number numb = new jxl.write.Number(3,1,200);   
		            sheet.addCell(numb);
		            /* 
		              * 定义显示日期的公共格式 
		            * 如:yyyy-MM-dd hh:mm 
		             * */ 
		           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
		            String newdate = sdf.format(new java.util.Date());   
		            // 填充出产日期   
		            label = new Label(4,1,newdate);   
		            sheet.addCell(label);   
		            // 填充产地   
		             label = new Label(5,1,"陕西西安");   
		            sheet.addCell(label);   
		            /* 
		             * 显示布尔值 
		             * */ 
		            jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);   
		            sheet.addCell(bool);   
		             /* 
		             * 合并单元格 
		             * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的 
		              * 表示将从第x+1列,y+1行到m+1列,n+1行合并 
		             *   
		             * */ 
		            sheet.mergeCells(0,3,2,3);   
		            label = new Label(0,3,"合并了三个单元格");   
		            sheet.addCell(label);
		            /* 
		              *   
		              * 定义公共字体格式 
		              * 通过获取一个字体的样式来作为模板 
		             * 首先通过web.getSheet(0)获得第一个sheet 
		             * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体   
		            * */ 
		            CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();   
		            WritableCellFormat wc = new WritableCellFormat();   
		            // 设置居中   
		             wc.setAlignment(Alignment.CENTRE);   
		             // 设置边框线   
		           wc.setBorder(Border.ALL, BorderLineStyle.THIN);   
		            // 设置单元格的背景颜色   
		           wc.setBackground(jxl.format.Colour.RED);   
		            label = new Label(1,5,"字体",wc);   
		           sheet.addCell(label);   
		 
		            // 设置字体   
		           jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);   
		            WritableCellFormat font = new WritableCellFormat(wfont);   
		            label = new Label(2,6,"隶书",font);   
		             sheet.addCell(label);   
		               
		          // 写入数据   
		           wwb.write();   
		            // 关闭文件   
		            wwb.close();   
		           long end = System.currentTimeMillis();   
		            System.out.println("----完成该操作共用的时间是:"+(end-start)/1000); 
		 }catch(Exception e){
			 System.out.println("---出现异常---");   
             e.printStackTrace();
		 }
	}
	
	
	/**
	  * 设置头的样式
	  * @return
	  */
	 public static WritableCellFormat getHeader(){
	  WritableFont font = new  WritableFont(WritableFont.TIMES, 10 ,WritableFont.BOLD);//定义字体
	  try {
	   font.setColour(Colour.BLUE);//蓝色字体
	  } catch (WriteException e1) {
	   // TODO 自动生成 catch 块
	   e1.printStackTrace();
	  }
	  WritableCellFormat format = new  WritableCellFormat(font);
	  try {
	   format.setAlignment(jxl.format.Alignment.CENTRE);//左右居中
	   format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//上下居中
	   format.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK);//黑色边框
	   format.setBackground(Colour.YELLOW);//黄色背景
	  } catch (WriteException e) {
	   // TODO 自动生成 catch 块
	   e.printStackTrace();
	  }
	  return format;
	 }
	
	
	
}
 public static boolean writeExcel(OutputStream os, List<String> columns, List<Map<String, Object>> objData) {
        // 创建可以写入的Excel工作薄(默认运行生成的文件在tomcat/bin下 )
        WritableWorkbook wwb=null;
        try {
            wwb=Workbook.createWorkbook(os);
            WritableSheet sheet=wwb.createSheet("First Sheet", 0);
            // 开始写入第一行(即标题栏)
            for(int i=0; i < columns.size(); i++) {
                // 用于写入文本内容到工作表中去
                Label label=null;
                // 在Label对象的构造中指明单元格位置(参数依次代表列数、行数、内容 )
                label=new Label(i, 0, columns.get(i));
                // 将定义好的单元格添加到工作表中
                sheet.addCell(label);
            }
            // 循环写入表中数据
            if(objData.isEmpty()) {
                return false;
            } else {
                for(int i=0; i < objData.size(); i++) {
                    // 转换成map集合{activyName:测试功能,count:2}
                    Map<String, Object> map=(Map<String, Object>)objData.get(i);
                    // 循环输出map中的子集:既列值
                    for(int j=0;j<columns.size();j++){
                        for(Map.Entry<String, Object> entry : map.entrySet()) {
                            // ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)
                            if(entry.getKey()==columns.get(j)){
                                sheet.addCell(new Label(j, i + 1, String.valueOf(entry.getValue())));
                            }
                        }
                    }
                    
                }
            }
            // 写入数据
            wwb.write();
            // 关闭文件
            wwb.close();
            // 关闭输出流
            os.close();
        } catch(Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

/**
     * 向客户端下载文件,弹出下载框.
     * @param response(HttpServletResponse)
     * @param file(需要下载的文件)
     * @param isDel(下载完成后是否删除该文件)
     * @throws IOException
     */
    public static void exportFile(HttpServletResponse response, File file, boolean isDel)  {
        OutputStream out=null;
        InputStream in=null;
        try {
            // 获得文件名
            String filename=URLEncoder.encode(file.getName(), "UTF-8");
            // 定义输出类型(下载)
            response.setContentType("application/force-download");
            response.setHeader("Location", filename);
            // 定义输出文件头
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);
            out=response.getOutputStream();
            in=new FileInputStream(file.getPath());

            byte[] buffer=new byte[1024];
            int i=-1;
            while((i=in.read(buffer)) != -1) {
                out.write(buffer, 0, i);
            }
            in.close();
            out.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
        if(isDel) {
            // 删除文件,删除前关闭所有的Stream.
            file.delete();
        }
    }

    /**
     * 创建文件名和临时文件
     * @throws IOException
     */
    public static File createFile(String name) {
        // 创建当前日子
        Date date=new Date();
        // 格式化日期
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        // 格式化日期(产生文件名)
        String filename=sdf.format(date);
        // 创建文件
        File f=new File(name + filename + ".xls");
        try {
            f.createNewFile();
        } catch(IOException e) {
            e.printStackTrace();
        }
        return f;
    }




分享到:
评论

相关推荐

    jxl api说明文档

    《JXL API详解》 JXL,全称为Java Excel API,是一个开源的Java库,用于读写Microsoft Excel文件。此API提供了丰富的功能,使得在Java应用程序中处理Excel数据变得非常简便。然而,需要注意的是,本说明文档并不...

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

    确保正确导入`jxl`相关的包,如`jxl.write.WritableWorkbook`、`jxl.read.BiffRecord`等。 接下来,让我们看一个简单的读写Excel文件的实例。在这个例子中,我们将创建一个名为`Test.java`的文件,用于演示如何使用...

    jxl创建下拉列表

    ### jxl创建下拉列表知识点解析 #### 一、jxl概述 jxl 是一个用于读写Microsoft Excel 文件的Java库。它支持多种版本的Excel文件格式,包括.xls(Excel 97-2003)等。jxl库允许开发者在Java应用程序中创建、修改和...

    jxl.jar完整包

    《使用Java的jxl库创建并格式化Excel文件详解》 在Java开发中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成等领域。jxl库为Java提供了便利的方式来读写Excel文件,无需Microsoft Office的支持。...

    java利用jxl读取excel文件

    `jxl`库是一个广泛使用的第三方库,它允许开发者轻松地读取、写入和修改Excel文件。本篇文章将深入探讨如何利用`jxl.jar`包来实现这一功能。 首先,确保你已经正确地将`jxl.jar`文件添加到你的项目类路径中。这可以...

    jxl模版生成excel

    "jxl模版生成excel" 指的是使用JExcelAPI(简称jxl)这个Java库来创建基于模板的Excel文件。JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可...

    jxl-2.6.10.jar包

    《jxl库详解:2.6.10版本在Java中的Excel操作》 在Java编程领域,处理Excel数据是一项常见的任务,而jxl库则为此提供了强大的解决方案。本文将深入探讨jxl-2.6.10.jar包,它是jxl库的一个版本,特别关注其在读写...

    jxl及jxlApi

    Java语言在处理Excel文档时,通常会借助第三方库,其中最为流行的就是jxl库。jxl不仅提供了读取Excel文件的能力,还支持创建和修改Excel文件,极大地简化了开发者的工作。本文将深入探讨jxl库及其API的使用,帮助你...

    java jxl的jar包 官方下载版

    Java中的JXL库是一个强大的工具,专为处理Excel文件而设计。这个官方下载版的`jxl.jar`包含了处理Excel工作簿、工作表、单元格等所有必要的功能,使得Java开发者能够轻松地读取、写入和修改Excel数据。本文将深入...

    jxl.jar使用文档

    jxl.jar 通过java操作excel表格的工具类库 支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。...

    jxl-2.6.12.jar 操作excle

    《使用jxl-2.6.12.jar操作Excel:详解与实践》 在Java编程领域,处理Excel数据是一项常见的任务。为此,开发者们通常会借助于特定的库,其中,jxl是一个广泛使用的开源库,它允许Java程序读取、写入以及修改Excel...

    jxl导出excel加水印.zip

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

    POI与JXL的实战性能对比

    ### POI与JXL实战性能对比分析 #### JXL与POI概述 在日常工作中,尤其是在处理Excel文件时,我们通常会面临选择合适的Java库来完成任务的问题。JXL和POI是两个广泛使用的库,它们各有优势和局限性。 **JXL...

    jxl.zip_excel_jxl_jxl.biff.drawing.dg_jxl.biff.drawingdg

    《深入解析JXL:Java与Excel的不解之缘》 在IT行业中,处理Excel数据是一项常见的任务,无论是数据导入、导出还是分析,都离不开与Excel的交互。JXL库作为一个强大的工具,为Java开发者提供了方便快捷的方式来读取...

    jxlAPI(jxl完整的API)

    **jxlAPI(jxl完整的API)** jxl是一个Java库,用于读写Microsoft Excel文件。这个库在处理Excel数据时提供了丰富的功能,无需依赖于Microsoft Office套件。jxl API使得开发者能够在纯Java环境中创建、修改和读取...

    java使用jxl打印excel报表文件

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

    使用jxl.jar在Android中操作Excel表格

    这里我们将深入探讨如何使用jxl.jar库在Android环境中操作Excel表格,特别是处理隐藏表的情况。 首先,jxl是一个Java库,它允许我们以编程方式读取和写入Microsoft Excel文件。由于Android系统基于Java,因此可以...

    jxl对excel添加水印(含有setWaterMarkImage方法).zip

    `jxl`库是一个广泛使用的开源库,它允许开发者用Java读取、写入和修改Excel文件。在这个特定的场景中,我们将探讨如何利用`jxl`库为Excel文件添加水印,特别关注`setWaterMarkImage`方法。 首先,`jxl`库不直接提供...

    Excel导入导出 jxl及Poi 工具类

    这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入了解jxl库。jxl是一个开源的Java库,专门设计用于读写Excel文件。它支持多种操作,如创建新的工作簿、...

Global site tag (gtag.js) - Google Analytics