`
sasunlin2000
  • 浏览: 14696 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

jxl导入/导出excel

 
阅读更多

package junit.test;

 

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

 

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.write.Label;

import jxl.write.Number;

import jxl.write.WritableImage;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

 

import org.apache.commons.lang3.math.NumberUtils;

import org.junit.Test;

 

/**

 * Excel导入导出

 * 

 * @author 林计钦

 * @version 1.0 Feb 7, 2014 4:14:51 PM

 */

public class ExcelTest {

 

    /**

     * 导入(导入到内存)

     */

    @Test

    public void importExcel() {

        Workbook book = null;

        try {

            book = Workbook.getWorkbook(new File("D:/test/测试.xls"));

            // 获得第一个工作表对象

            Sheet sheet = book.getSheet(0);

            int rows=sheet.getRows();

            int columns=sheet.getColumns();

            // 遍历每行每列的单元格

            for(int i=0;i<rows;i++){

                for(int j=0;j<columns;j++){

                    Cell cell = sheet.getCell(j, i);

                    String result = cell.getContents();

                    if(j==0){

                        System.out.print("姓名:"+result+" ");

                    }

                    if(j==1){

                        System.out.print("年龄:"+result+" ");

                    }

                    if((j+1)%2==0){ 

                        System.out.println();

                    }

                }

            }

            System.out.println("========");

            // 得到第一列第一行的单元格

            Cell cell1 = sheet.getCell(0, 0);

            String result = cell1.getContents();

            System.out.println(result);

            System.out.println("========");

        } catch (Exception e) {

            System.out.println(e);

        }finally{

            if(book!=null){

                book.close();

            }

        }

    }

 

    /**

     * 导出(导出到磁盘)

     */

    @Test

    public void exportExcel() {

        WritableWorkbook book = null;

        try {

            // 打开文件

            book = Workbook.createWorkbook(new File("D:/test/测试.xls"));

            // 生成名为"学生"的工作表,参数0表示这是第一页

            WritableSheet sheet = book.createSheet("学生", 0);

            // 指定单元格位置是第一列第一行(0, 0)以及单元格内容为张三

            Label label = new Label(0, 0, "张三");

            // 将定义好的单元格添加到工作表中

            sheet.addCell(label);

            // 保存数字的单元格必须使用Number的完整包路径

            jxl.write.Number number = new jxl.write.Number(1, 0, 30);

            sheet.addCell(number);

            // 写入数据并关闭文件

            book.write();

        } catch (Exception e) {

            System.out.println(e);

        }finally{

            if(book!=null){

                try {

                    book.close();

                } catch (Exception e) {

                    e.printStackTrace();

                } 

            }

        }

    }

    

    /**

     * 对象数据写入到Excel

     */

    @Test

    public void writeExcel() {

        WritableWorkbook book = null;

        try {

            // 打开文件

            book = Workbook.createWorkbook(new File("D:/test/stu.xls"));

            // 生成名为"学生"的工作表,参数0表示这是第一页

            WritableSheet sheet = book.createSheet("学生", 0);

            

            List<Student> stuList=queryStudentList();

            if(stuList!=null && !stuList.isEmpty()){

                for(int i=0; i<stuList.size(); i++){

                    sheet.addCell(new Label(0, i, stuList.get(i).getName()));

                    sheet.addCell(new Number(1, i, stuList.get(i).getAge()));

                }

            }

            

            // 写入数据并关闭文件

            book.write();

        } catch (Exception e) {

            System.out.println(e);

        }finally{

            if(book!=null){

                try {

                    book.close();

                } catch (Exception e) {

                    e.printStackTrace();

                } 

            }

        }

    

    }

    

    /**

     * 读取Excel数据到内存

     */

    @Test

    public void readExcel() {

        Workbook book = null;

        try {

            // 打开文件

            book = Workbook.getWorkbook(new File("D:/test/stu.xls"));

            // 获得第一个工作表对象

            Sheet sheet = book.getSheet(0);

            int rows=sheet.getRows();

            int columns=sheet.getColumns();

            List<Student> stuList=new ArrayList<Student>();

            // 遍历每行每列的单元格

            for(int i=0;i<rows;i++){

                Student stu = new Student();

                for(int j=0;j<columns;j++){

                    Cell cell = sheet.getCell(j, i);

                    String result = cell.getContents();

                    if(j==0){

                        stu.setName(result);

                    }

                    if(j==1){

                        stu.setAge(NumberUtils.toInt(result));

                    }

                    if((j+1)%2==0){

                        stuList.add(stu);

                        stu=null;

                    }

                }

            }

            

            //遍历数据

            for(Student stu : stuList){

                System.out.println(String.format("姓名:%s, 年龄:%s", 

                        stu.getName(), stu.getAge()));

            }

            

        } catch (Exception e) {

            System.out.println(e);

        }finally{

            if(book!=null){

                try {

                    book.close();

                } catch (Exception e) {

                    e.printStackTrace();

                } 

            }

        }

    

    }

    

    /**

     * 图片写入Excel,只支持png图片

     */

    @Test

    public void writeImg() {

        WritableWorkbook wwb = null;

        try {

            wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));

            WritableSheet ws = wwb.createSheet("图片", 0);

            File file = new File("D:\\test\\png.png");

            //前两位是起始格,后两位是图片占多少个格,并非是位置

            WritableImage image = new WritableImage(1, 4, 6, 18, file);

            ws.addImage(image);

            wwb.write();

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            if(wwb!=null){

                try {

                    wwb.close();

                } catch (Exception e) {

                    e.printStackTrace();

                }  

            }

        }

    }

    

    private List<Student> queryStudentList(){

        List<Student> stuList=new ArrayList<Student>();

        stuList.add(new Student("zhangsan", 20));

        stuList.add(new Student("lisi", 25));

        stuList.add(new Student("wangwu", 30));

        return stuList;

    }

    

    public class Student {

        private String name;

        private int age;

 

        public Student() {

        }

 

        public Student(String name, int age) {

            super();

            this.name = name;

            this.age = age;

        }

 

        public String getName() {

            return name;

        }

 

        public void setName(String name) {

            this.name = name;

        }

 

        public int getAge() {

            return age;

        }

 

        public void setAge(int age) {

            this.age = age;

        }

    }

}

 

 

 

2、jxl常用操作
a、数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字符串、数字和日期已经能够满足一般的应用。

字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:

① WritableFont font1= new WritableFont(WritableFont.TIMES, 16, WritableFont.BOLD); 或//设置字体格式为excel支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体 _GB2312"), 12, WritableFont.NO_BOLD);
② WritableCellFormat format1=new WritableCellFormat(font1);
③ Label label=new Label(0, 0, "data 4 test", format1);

其中,
①指定了字串格式:字体为TIMES,字号16,加粗显示。
WritableFont有非常丰富的构造子函数,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。 
③处使用了Label类的构造子,指定了字串被赋予那种格式。在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//设置自动换行
format1.setWrap(true);

b、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、合并单元格
//作用是从(m,n)到(p,q)的单元格全部合并
WritableSheet.mergeCells(int m, int n, int p, int q); 
比如:

WritableSheet sheet=book.createSheet("第一页", 0); 
//合并第一列第一行到第六列第一行的所有单元格
//合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
sheet.mergeCells(0, 0, 5, 0);

c、行高和列宽
//作用是指定第i+1行的高度
WritableSheet.setRowView(int i, int height);
比如:将第一行的高度设为200

sheet.setRowView(0, 200);

//作用是指定第i+1列的宽度,
WritableSheet.setColumnView(int i,int width);
比如:将第一列的宽度设为30

sheet.setColumnView(0, 30);

d、操作图片(只支持png图片)

 

 

 

/**

     * 图片写入Excel,只支持png图片

     */

    @Test

    public void writeImg() {

        WritableWorkbook wwb = null;

        try {

            wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));

            WritableSheet ws = wwb.createSheet("图片", 0);

            File file = new File("D:\\test\\png.png");

            //前两位是起始格,后两位是图片占多少个格,并非是位置

            WritableImage image = new WritableImage(1, 4, 6, 18, file);

            ws.addImage(image);

            wwb.write();

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            if(wwb!=null){

                try {

                    wwb.close();

                } catch (Exception e) {

                    e.printStackTrace();

                }  

            }

        }

 

    }

 

 

很简单和插入单元格的方式一样,不过就是参数多了些,WritableImage这个类继承了 Draw,上面只是他构造方法的一种,最后一个参数不用说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单元格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。

 

3、注意事项
a、jxl导出excel乱码
在导出excel时,发现中文的标题乱码,试了N种编码方式,开始总是试图转为utf-8、gb2312、gbk,没想到转为iso-8859-1中文乱码的问题解决了

 

fileName = new String(fileName.getBytes(),"iso-8859-1");

response.setCharacterEncoding("gb2312");

response.reset();

response.setContentType("application/OCTET-STREAM;charset=gb2312");

response.setHeader("pragma", "no-cache");

response.addHeader("Content-Disposition", "attachment;filename=\""

+ fileName + ".xls\"");// 点击导出excle按钮时候页面显示的默认名称

 

workbook = Workbook.createWorkbook(response.getOutputStream());

分享到:
评论

相关推荐

    导入/导出excel jxl.jar

    "导入/导出Excel jxl.jar"是使用JExcelApi(通常简称为JXL)库的一个示例,这是一个开源Java库,允许开发者读取、写入和修改Excel文件。JXL.jar文件就是这个库的实现,它包含了所有必要的类和方法,使得开发者可以...

    jxl导入导出excel

    四、导出Excel数据 1. **创建工作簿** 使用`Workbook.createWorkbook(File)`方法创建一个新的工作簿: ```java WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls")); ``` 2. **创建...

    java_Jxl(导入导出Excel)

    java_Jxl(导入导出Excel) 导入导出Excel的jar包,与大家共同分享,互相学习

    java_Jxl(导入导出Excel).pdf

    Java JXL 是一个纯 Java 的API,用于导入导出Excel文件。它支持Excel 95-2000的所有版本,生成Excel 2000标准格式。该API还支持字体、数字、日期操作,并能够修饰单元格属性。另外,JXL还支持图像和图表,虽然对图形...

    java_Jxl(导入导出Excel).doc

    Java Jxl库是一个专门用于处理Excel文件的开源Java库,它允许开发者在Java应用程序中进行Excel文件的读取、创建和修改。...在实际开发中,可以根据需求灵活运用这些功能来满足各种数据导入导出的需求。

    Excel导入导出 jxl及Poi 工具类

    为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中的示例代码。通过阅读和运行这些代码,你可以更深入地了解如何在实际项目中应用jxl和Apache POI。 总的来说,jxl和Apache ...

    jxl导入导出excel完美运行demo

    本示例"jxl导入导出excel完美运行demo"提供了一个完整的实现,使得开发者能够快速理解和应用Excel处理功能。 `jxl`库是Java中广泛使用的第三方库,它支持读取和写入Excel 97-2003格式(.xls)的文件。这个库提供了...

    通过JXL使用模板导出EXCEL

    本文将深入探讨如何利用JXL库通过模板来导出Excel。 首先,JXL库(Java Excel API)是一个开源的Java库,它提供了处理Microsoft Excel文件的能力。它支持读取、写入以及修改Excel 97-2004(.xls)格式的文件。虽然...

    jxl导出excel加水印.zip

    本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `jxl`库提供了一套完整的API来操作Excel文件,包括创建新的工作簿、添加...

    jxl java导入导出excel的jar文件

    标题中提到的"jxl java导入导出excel的jar文件",指的是`jxl.jar`,这是`jxl`库的核心文件。在描述中,我们看到有两个版本的`jxl.jar`,分别对应于JDK 1.5和1.6。这是因为`jxl`库是为这些早期版本的Java设计的,因此...

    struts2整合apache的jxl导入导出excel表格

    Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...

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

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

    java使用JXL导入导出excel

    Java使用JXL库进行Excel导入导出是一种常见的技术实践,特别是在需要在Java应用程序或Web应用中处理Excel数据时。JXL是一个轻量级的库,它允许开发人员以纯Java方式读取、创建和修改Excel文件,而无需依赖于Windows...

    用Jxls导入导出Excel2003和Excel2007数据3

    本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...

    java使用jxl进行Excel导入导出

    Java 使用 JXL 进行Excel导入导出是一个常见的任务,特别是在数据处理和分析场景中。JXL 是一个 Java 库,允许开发者方便地读取、写入和操作 Excel 文件(.xls 格式)。以下是对这个主题的详细阐述: 1. **JXL 概述...

    导入导出excel文件的jar包

    完成导入/导出excel文件,java、Android都可以使用!

    jxl 实现excel导入导出

    导出Excel文件则是将数据写入到一个新的或已存在的Excel文件中。以下是一个基本的导出示例: ```java import jxl.*; import jxl.write.*; public class ExcelExporter { public static void main(String[] args) ...

Global site tag (gtag.js) - Google Analytics