java操作Excel

 项目中使用了Struts,现在想要导出一组数据为Excel文件,那么可以这样:(首先需要jxl.jar包,我的是jxl-2.6.jar)

 以下为导出方法:


 

写入数据的时候注意的格式


(1)添加的字体样式
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true); 
WritableFont()方法里参数说明:
这个方法算是一个容器,可以放进去好多属性
第一个: TIMES是字体大小,他写的是18
第二个: BOLD是判断是否为斜体,选择true时为斜体
第三个: ARIAL
第四个: UnderlineStyle.NO_UNDERLINE 下划线 
第五个: jxl.format.Colour.RED 字体颜色是红色的

jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);

jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);
ws.addCell(labelC); 
在Label()方法里面有三个参数
第一个是代表列数,
第二是代表行数,
第三个代表要写入的内容
第四个是可选项,是输入这个label里面的样式
然后通过写sheet的方法addCell()把内容写进sheet里面。

(2)添加带有formatting的Number对象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");


(3)添加Number对象
(3.1)显示number对象数据的格式

jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);

jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF); 
Number()方法参数说明:
前两上表示输入的位置
第三个表示输入的内容


(4)添加Boolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);


(5)添加DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
  DateTime()方法的参数说明
前两个表示输入的位置
第三个表示输入的当前时间


(6)添加带有formatting的DateFormat对象
这个显示当前时间的所有信息,包括年月日小时分秒
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);

(7)添加带有字体颜色Formatting的对象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

import="jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

(8)设置单元格样式

jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackGround(jxl.format.Colour.RED);//设置单元格的颜色为红色
wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);

 

下面是一段网友操作的例子:

我写的练习代码如下:(注意里面的图片替换成自己的就可以了)

 

import java.io.*;

import java.util.Random;

import java.util.Date;

import jxl.*;

import jxl.format.UnderlineStyle;

import jxl.write.*;

import jxl.write.Number;

import jxl.write.Boolean;

public class CreateXL

{

    public CreateXL()

    {

 

    }

    public static void main(String[] args)

    {

        //读Excel

        //CreateXL.readExcel("d:/abc.xls");

 

        //创建新的Excel

        CreateXL.writeExcel("d:/new.xls");

 

        //更新Excel

        CreateXL.updateExcel("d:/new.xls");

 

    }

    //jxl暂时不提供修改已经存在的数据表,这里通过一个小办法来达到这个目的,不适合大型数据更新!

    //这里是通过覆盖原文件来更新的.

    public static void updateExcel(String filePath)

    {

        try

        {

            Workbook rwb = Workbook.getWorkbook(new File(filePath));

            WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);//copy

            WritableSheet ws = wwb.getSheet(0);

            WritableCell wc = ws.getWritableCell(0,0);

            //判断单元格的类型,做出相应的转换

            Label label = (Label)wc;

            label.setString("The value has been modified");

            wwb.write();

            wwb.close();

            rwb.close();

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

 

    public static void writeExcel(String filePath)

    {

        try

        {

            //创建工作薄

            WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));

 

            //创建工作表

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

            //System.out.println("create ok!");

 

            //添加标签文本

            Random rnd=new Random((new Date()).getTime());

            int forNumber=rnd.nextInt(100);

            for(int i=0;i<forNumber;i++)

            {

                ws.addCell(new Number(rnd.nextInt(50),rnd.nextInt(50),rnd.nextInt(1000)));

            }

 

            //添加图片(注意此处jxl暂时只支持png格式的图片)

      //0,1分别代表x,y    2,5代表宽和高占的单元格数

      ws.addImage(new WritableImage(0,1,2,5,new File("png//cs.png")));

 

            wwb.write();

      wwb.close();

        }

        catch(Exception e)

        {

            System.out.println(e.toString());

        }

    }

    public static void readExcel(String filePath)

    {

        /**

         *后续考虑问题,比如Excel里面的图片以及其他数据类型的读取

         **/

        try

        {

            InputStream is=new FileInputStream(filePath);

            //声名一个工作薄

            Workbook rwb = Workbook.getWorkbook(is);

 

            //获得工作薄的个数

            //rwb.getNumberOfSheets();

 

            //在Excel文档中,第一张工作表的缺省索引是0

            Sheet st = rwb.getSheet("Sheet1");

 

            //通用的获取cell值的方式,getCell(int column, int row) 行和列

            int Rows=st.getRows();

            int Cols=st.getColumns();

            System.out.println("当前工作表的名字:"+st.getName());

            System.out.println("总行数:"+Rows);

            System.out.println("总列数:"+Cols);

 

            Cell c;

            for(int i=0;i<Cols;++i)

            {

                for(int j=0;j<Rows;++j)

                {

                    //getCell(Col,Row)获得单元格的值

                    System.out.print((st.getCell(i,j)).getContents()+"/t");

                }

                System.out.print("/n");

            }

            //操作完成时,关闭对象,释放占用的内存空间

            rwb.close();

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

 

你可能感兴趣的:(Excel)