zoukankan      html  css  js  c++  java
  • jxl导出excel

    第一次要做这个导出功能,看了下同事之前写的都是用jxl这个api,网上也大体看了下,转载点东西记录下。

    一、API系列

           Jxl的API主要有三个包,jxl,jxl.format,jxl.write.如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离此API吧.

    一个excel文件由一个工作簿组成,一个工作簿又由n个工作表组成.每个工作表又由多个单元格组成.对应于Jxl中的结构为

    读文件(包jxl)

    写文件(包jxl.write)

    说明

    Workbook 

    WritableWorkbook

    工作簿

    Sheet

    WritableSheet

    工作表

    Cell/Image/Hyperlink

    WritableCell/WritableImage//WritableHyperlink

    单元格/图像/超链接

            单元格(此处指文本单元格,图像及链接和单元格做为一个层次)分为好多种,所以在API的设计中将Cell作为一个接口而存在.

           对应的jxl中的结构为:

    读文件(包jxl)

    写文件(包jxl.write)

    说明

    Cell

    WritableCell

    单元格

    BooleanCell

    Boolean

    布尔值单元格

    DateCell

    DateTime

    时间单元格

    ErrorCell

     

    形式错误的单元格

    LabelCell

    Label

    文本单元格

    NumberCell

    Number

    数字单元格

    FormualCedll

    Formual

    公式单元格

     

    Blank

    空格单元格

    BooleanFormualCell

     

    布尔公式单元格

    DateFormualCell

     

    时间公式单元格

    ErrorFormualCell

     

    错误公式单元格

    StringFormualCell

     

    文本公式单元格

    NumberFormualCell

     

    数字公式单元格

    而有的时候,我们可能将几个单元格作为一个整体来处理,在API中对应的则是:

        jxl.Range 

        虽然数据是电子表格的核心,但是同时其也需要一些辅助类 比如文件格式设置,工作表设置与显示效果.单元格设置与显示效果等.按照其层次,则依次有以下接口或类.

    读文件(包jxl)

    写文件(包jxl.write)

    说明

    WorkbookSettings

    WorkbookSettings(包jxl)

    设置workbook属性的bean

    SheetSettings

    SheetSettings(包jxl)

    设置具体sheet的属性的bean(比如表头表底等)

    HeaderFooter

    HeaderFooter(包jxl)

    表示表头表底类

    HeaderFooter.Contents

    HeaderFooter.Contents(包jxl)

    具体表头表底设置

    CellFeatures

    WritableCellFeautres

    表格内容相关设置(验证)

    CellReferenceHelper

     

    得到引用单元格相关属性

    CellType

     

    表格相关类型

    CellView

    CellView(包jxl)

    表格视图相关设置

    CellFormat

    WritableCellFormat

    表格显示样式设置

     

    BoldStyle

    边框枚举

     

    DateFormat

    时间格式

     

    DateFormats

    时间格式枚举

     

    NumbreFormat

    数据格式

     

    NumbreFormats

    数字模式枚举

     

    WritableFont

    字体设置

     

    WriteableFont.Fontname

    静态字体内部类

    最后,关于Jxl.format包.此包主要是一些与具体样式有关的接口和枚举.不进行具体描述.第一部分完.

    (二)应用

           在进行实践前,我们需要对excel有一个大致的了解,excel文件由一个工作簿(Workbook)组成,工作簿由工作表(sheet)组成,每个工作表又由很多单元格(cell)组成. 工作簿有自己的特征,同样工作表,单元格也一样.从大局上了解了excel文件,对于我们更好的使用jxl是有一定的帮助的.具体请查看(一)API

     在jxl中其大概的层次是这样的 

    名称

    属性

    Workbook

    WorkbookSettings

    Sheet

    SheetSettings

    Cell

    CeLlFormat CellFeatures CellView CellType


    Jxl读excel:

    得到工作簿的方法主要有四个:

           getWorkbook(File file)

           getWorkbook(File file,WorkSettings ws)

           getWorkbook(InputStream is)

           getWorkbook(InputStream is,WorkSettings ws)

    参数有两个:

    第一个参数是必须的:文件或输入流,

    第二个参数:工作簿ws是作为读出来的excel的一些约定,如地区,编码等.

    如果文件错误或格式错误,将会抛出BiffException或IOException.

     代码段: 

    Workbook wb=null;

    try

    {

    wb = Workbook.getWorkbook(excelFile);

    wb.close();

    }

    catch(BiffException ex){

           //转换错误

    }catch(IOException ex){

           //IO错误

    }

    以上如果一切正常的话,将得到此excel文件的工作簿.接下来我们就可以通过此文件簿得到其他的东西了.以下是得到工作表有关的方法

     int getNumberOfSheets()//工作表个数

    Sheet getSheet(String  name);//得到此对应名称的工作表

    Sheet getSheet(int index);//得到此序列号的工作表

    Sheet[] getSheets();//得到工作表数组

    String[] getSheetNames();//得到工作表名称数组

     示例代码如下:

    Sheet sheet;

    if(wb.getNumberOfSheets()>0)

    {

           sheet = wb.getSheet(0);

    }

    以下的方法除非特别目的,否则用到的地方不多.

    Range[] finaName(String name);//得到此名称的表格区

    Cell findCellByName(String name);//得到此名称的Cell

    Cell getCell(String loc)

    String[] getRangeNames();

    与文件是否可写有关的

    boolean isProected();

     得到了工作簿文件的某个工作表时.

    对于工作表而言其主要的内容就是单元格了.

    //根据内容查看

    Cell findCell(Pattern pattern,int firstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)

    Cell findCell(String content)

    Cell findCell(String content,omt forstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)

    LabelCell findLabelCell(String contents)

     //根据位置得到

    Cell getCell(int col,int row)

    Cell getCell(String loc)//loc的格式为A3/B1/C3其相同于

    getCell(CellReferenceHelper.getColumn(loc0,CellReferenceHelper.getRow(loc)),所以相对而言其性能没有Cell getCell(int col,int row)快

     //单元格数组

    Cell[] getRows(int row)//当前行单元格数组

    Cell[] getCols(int col)//当前列单元格数组

     //特殊单元格数组

    //超链接表格

    Hyperlink[] getHyperlinks();//超链接数组

    //区域表格

    Range[] getMergedCells();//区域单元格数组

    //图像表格

    Int getNumberOfImages()//拥有图片数

    Image getDrawing(int index)//对应序号的图片

     //工作表或多个表格一些自我属性

    String getName()//工作表名

    int getRows()//行数

    int getCols()//列数

    SheetSettings getSettings()//工作表设置

    CellView getColumnView(int col)//此列的表格视图

    CellView getRowView(int row)//此行的表格视图

     以下是与单元格有关的一些操作:

    CellFeatures getCellFeatures()//主要是与表格内容有关的一些性质如验证等

    CellFormat getCellFormat()//主要是表格外在表现格式有关的一些性质.

    int getColumn()//所在列

    int getRow()//所在行

    String getContents();//内容

    boolean  isHidden();//可见否

    CellType getType();//表格类型 如果不确定表格如果转换则可以使用此方法来确定表格类型.

     以下我们讲述如何写excel文件.

    写文件分为两种情况 一种是新建一种则是更新.

    新建excel文件

    新建excel文件很简单:

    //文件

    WritableWorkbook createWorkbook(File file) //无形式的创建一个excel文件

    WritableWorkbook createWorkbook(File file Workbook in)

    //以in一样的格式创建一个excel文件,其初始内容与in文件相同(更新文件可以用到此方法)

    WriteableWorkbook createWorkbook(File file,WorkSetting ws)//以ws的设定创建文件

    WritableWorkbook createWorkbook(File file,Workbook in,WorkSetting ws)

    //以ws的设定创建一个与in文件相同的文件

     //流

    WritableWorkbook createWorkbook(OutputStream os)

    WritableWorkbook createWorkbook(OutputStream os Workbook in)

    WriteableWorkbook createWorkbook(OutputStream os,WorkSetting ws)

    WritableWorkbook createWorkbook(OutputStream os,Workbook in,WorkSetting ws)

    代码示例:

    WritableWorkbook wrb;

    WriteableWorkbook wrbin;

    try

    {

    wrb =  Workbook.createWorkbook(targetfile);

    wrbin = Workbook.createWorkbook(targetfile,wb);

    }

    catch (IOexception e)

    {

    //IO错误

    }

    当创建好工作簿时,我们就需要新建工作表了

    WritableSheet createSheet(String name,int index);

    WritableSheet wrs  = wrb.createSheet(“demo”,0);

    //创建一个名为demo的工作表,其为工作簿的第一个工作表.

    接下来我们就可以进行其他操作了

    添加文本类单元格:

    Label label = new Label(0,0,””);

    wrb.addCell(label);

    //添加数据单元格

    Number number = new Number(0,3,1234);

    wrb.addCell(number);

    //添加时间单元格

    DateTime dt = new DateTime(0,4,new Date());

    Wrb.addCell(dt);

    //添加公式单元格

    Fornual formual = new Formual(0,11,”Sum(A1:A9)”);

    wrb.addCell(formual);

    添加超链接类单元格

    WirtableHyperlink wrlink =

     new WritableHyperlink(0,1,0,1,new URL(“www.emlog.net/fei”),”emlog”);

    wrb.addHyperlink(wrlink);

    //添加图像

    WritableImage wrimage=new WritableImage(1,5,10,10,new File(imageFilepath));

    wrb.addImage(wrimage);

    //注意,API中注明只支持png文件,然而我用其他格式的图片,通过将其后缘改为png也能放到excel文件中.果然,在查看其具体源代码时,发现作者只是检测了文件的后缀名,如果不对 给出警告,并没有从图像文件的具体格式进行检测.

         当然,表格中的数据算是表格的核心部分,但是同时API也提供了大量的其他方法来丰富表格的显示.在此,大家具体在使用过程中进行运用就行.

    //最后,写完表格后,不要忘记进行写操作,也就是常说的保存

    wrb.write()

    wrb.close();保存完后关闭相应资源是一个合格的程序员应该做的.

    接下来,我们就来讲述写文件的另一方面:更新文件.有时候,并不仅仅只是需要新写文件,可能需要对已有文件进行更新.这时候我们可以这么来实现.

    Workbook wb= Workbook.getWorkbook(modifyFile);

    WritableWorkbook wrb = Workbook.createWorkbook(modifyFile, wb);

     以上就实现了得到一个已存在的文件的可修改副本.

    //得到第一个工作表

    WritableSheet wrs = wrb.getSheet(0);

    //得到A0单元格

    Cell cell = Wrs.getCell(0,0);

    //对单元格格式进行判断

    If (cell.getType()==CellType.LABEL){

           Label label=(Label) cell;

           label.setString(“u r modified.”);

    }//modify end

     //save excel

    wrb.write();

    wb.close();

    wrb.close();

    以上就简单的完成了一次excel文件的修改.API中还提供了复制工作表,复制单元格等操作,大家可以通过查询API来了解其具体的用法.我们可以从作者提供的包中得到很多关于如何使用API的示例.此处不献丑了.jxl官文网站:http://www.andykhan.com/jexcelapi/index.html

  • 相关阅读:
    Zookeeper系列(二)特征及应用场景
    Scala学习笔记(三)类层级和特质
    zookeeper系列(一)安装
    Scala学习笔记(二)表达式和函数
    Spring笔记(四)SpingAOP
    Spring笔记(三)AOP前篇之动态代理
    Scala学习笔记(一)数据类型
    Linux内核系列设备模型(一) Kobject与Kset
    Spring笔记(二)Core层
    Linux内核系列之Block块层(一)
  • 原文地址:https://www.cnblogs.com/zhxiaomiao/p/1785000.html
Copyright © 2011-2022 走看看