Chinaunix首页 | 论坛 | 博客
  • 博客访问: 486065
  • 博文数量: 111
  • 博客积分: 3146
  • 博客等级: 中校
  • 技术积分: 939
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-07 11:23
个人简介

Nathing

文章分类

全部博文(111)

文章存档

2016年(2)

2015年(1)

2014年(31)

2012年(2)

2011年(9)

2010年(36)

2009年(30)

我的朋友

分类: Java

2010-11-07 13:56:45

利用java操作Excel,有个开源的东东-jxl.jar,可以到下载。
下面列出他的一些编程接口:
作用
Workbook 表示只读的Excel工作簿和构造Workbook的工厂类
WritableWorkbook 可写的Excel工作簿
Sheet 工作簿内的只读工作表
WritableSheet 工作簿内的可写工作表
Cell 单元格的接口,读出单元格的信息
WritableCell 可写单元格的接口
Label 内容为字符类型的Cell,可读可写
Number 内容为数字类型的Cell,可读可写
DateTime 内容为日期类型的Cell,可读可写
Boolean 内容为布尔量的Cell,可读可写
Formula 内容为公式类型的Cell,可读可写
CellFormat 读出单元格格式化信息
WritableCellFormat 设定单元格的格式化信息
Font 字体的接口,读出字体的信息
WritableFont 可以设定字体信息


一.读取Excel文件内容


  //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
  Workbook wb = Workbook.getWorkbook(File file);
  // 获得第一个工作表对象
  Sheet sheet = book.getSheet(0);
  // 得到第一列第一行的单元格
  Cell cell1 = sheet.getCell(0 ,0);

  // 获得第所以工作表对象
  Sheet[] sheet = wb.getSheets();
  //得到当前工作表的行数
  int rowNum = sheet[0-sheet.length].getRows();
  //得到当前行的所有单元格
  Cell[] cells = sheet[0-sheet.length].getRow(0-rowNum);
  //读取当前单元格的值
  String cellValue = cells[0-cells.length].getContents();
  //最后关闭资源,释放内存
  wb.close();


二.写入Excel文件

提示
不仅可以将workbook写入到文件中,也可以将workbook写入到一个输出流中,这样就可以通过web方式来让用户下载Excel文件。写入到输出流,要调用工厂方法Workbook.createWorkbook(OutputStream os)

//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
WritableWorkbook wwb = Workbook.createWorkbook(new File(String fileName));
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工
作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
//下面开始添加单元格
for(int i=0;i<10;i++){
    for(int j=0;j<5;j++){
        //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
        Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
        try {
            //将生成的单元格添加到工作表中
            ws.addCell(labelC);


try {
    //从内存中写入文件中
    wwb.write();
    //关闭资源,释放内存
    wwb.close();


三.修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,
其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:

// Excel获得文件
Workbook wb = Workbook.getWorkbook( new File( " test.xls " ));
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb);
// 添加一个工作表
WritableSheet sheet = book.createSheet( " 第二页 " , 1 );
sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " ));
book.write();
book.close();


四.添加页眉页脚

/**
     * 向Excel中加入页眉页脚
     *
     * @param dataSheet
     * 待加入页眉的工作表
     * @param left
     * @param center
     * @param right
     */

    public static void setHeader(WritableSheet dataSheet, String left,
            String center, String right)
    {
        HeaderFooter hf = new HeaderFooter();
        hf.getLeft().append(left);
        hf.getCentre().append(center);
        hf.getRight().append(right);
        // 加入页眉
        dataSheet.getSettings().setHeader(hf);
        // 加入页脚
        dataSheet.getSettings().setFooter(hf);
    }


五.往Excel中插入图片图标

/**
     * 往Excel中插入图片
     *
     * @param dataSheet
     * 待插入的工作表
     * @param col
     * 图片从该列开始
     * @param row
     * 图片从该行开始
     * @param width
     * 图片所占的列数
     * @param height
     * 图片所占的行数
     * @param imgFile
     * 要插入的图片文件
     */

    public static void insertImg(WritableSheet dataSheet, int col, int row,
            int width, int height, File imgFile)
    {
        WritableImage img = new WritableImage(col, row, width, height, imgFile);
        dataSheet.addImage(img);
    }


六.格式化

    //指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出
    WritableFont font1 = new WritableFont(WritableFont.TIMES, 16,WritableFont.BOLD);

    //使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述
    WritableCellFormat format1 = new WritableCellFormat(font1);

    // 把水平对齐方式指定为居中
    format1.setAlignment(jxl.format.Alignment.CENTRE);  

    // 把垂直对齐方式指定为居中
    format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
  
    //使用了Label类的构造子,指定了字串被赋予那种格式
    Label label = new Label(0, 0, "data 4 test", format1);


    //合并单元格
    //(m,n)到(p,q)的单元格全部合并
    WritableSheet.mergeCells(int m,int n,int p,int q);

    //行高和列宽
    //指定第i+1行的高度
    WritableSheet.setRowView(int i,int height);
    //指定第i+1列的宽度
    WritableSheet.setColumnView(int i,int width);

    //格式化数字
    //NumberFormats表示数字格式,预定了几种格式,象NumberFormats.INTEGER表示取整,NumberFormats.FLOAT表示小数去两位。也可以自己定义数字格式。
    WritableCellFormat integerFormat = new WritableCellFormat (NumberFormats.INTEGER);
    Number number2 = new Number(0, 4, 3.141519, integerFormat);
    sheet.addCell(number2);

    WritableCellFormat floatFormat = new WritableCellFormat (NumberFormats.FLOAT);
    Number number3 = new Number(1, 4, 3.141519, floatFormat);
    sheet.addCell(number3);

    NumberFormat fivedps = new NumberFormat("#.#####");
    WritableCellFormat fivedpsFormat = new WritableCellFormat(fivedps);
    Number number4 = new Number(2, 4, 3.141519, fivedpsFormat);
    sheet.addCell(number4);

    //也可以定义具有某种字体的数值格式:
    WritableCellFormat fivedpsFontFormat = new WritableCellFormat(times16font, fivedps);
    Number number5 = new Number(3, 4, 3.141519, fivedpsFontFormat);
    sheet.addCell(number5);

    //格式化日期
    //DateFormat表示日期格式。
    Date now = Calendar.getInstance().getTime();
    DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
    WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat);
    DateTime dateCell = new DateTime(0, 6, now, dateFormat);
    sheet.addCell(dateCell);


阅读(4058) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~