欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java创建excel示例(jxl使用方法)

程序员文章站 2024-02-26 13:36:04
使用该api非windows操作系统也可以通过纯java应用来处理excel数据表。因为是使用 java编写的,所以我们在web应用中可以通过jsp、servlet来调用a...

使用该api非windows操作系统也可以通过纯java应用来处理excel数据表。因为是使用 java编写的,所以我们在web应用中可以通过jsp、servlet来调用api实现对excel数据表的访问。

复制代码 代码如下:

package com.yonyou.test;

import java.io.file;
import java.io.ioexception;

import jxl.workbook;
import jxl.format.alignment;
import jxl.format.border;
import jxl.format.borderlinestyle;
import jxl.format.colour;
import jxl.format.underlinestyle;
import jxl.write.label;
import jxl.write.numberformats;
import jxl.write.writablecellformat;
import jxl.write.writablefont;
import jxl.write.writablesheet;
import jxl.write.writableworkbook;
import jxl.write.writeexception;
import jxl.write.biff.rowsexceededexception;

public class jxltable {

 private final static jxltable jxltable = new jxltable();

 public static jxltable getinstance() {
  return jxltable;
 }

 public jxltable() {
 }

 public boolean createtable(string header, string[] body, string filepath) {
  boolean createflag = true;
  writableworkbook book;
  try {
   // 根据路径生成excel文件
   book = workbook.createworkbook(new file(filepath));
   // 创建一个sheet名为"表格"
   writablesheet sheet = book.createsheet("表格", 0);
   // 设置no列宽度
   sheet.setcolumnview(1, 5);
   // 去掉整个sheet中的网格线
   sheet.getsettings().setshowgridlines(false);
   label templabel = null;
   // 表头输出
   string[] headerarr = header.split(",");
   int headerlen = headerarr.length;
   // 循环写入表头内容
   for (int i = 0; i < headerlen; i++) {
    templabel = new label(1 + i, 1, headerarr[i],
      getheadercellstyle());
    sheet.addcell(templabel);
   }
   // 表体输出
   int bodylen = body.length;
   // 循环写入表体内容
   for (int j = 0; j < bodylen; j++) {
    string[] bodytemparr = body[j].split(",");
    for (int k = 0; k < bodytemparr.length; k++) {
     writablecellformat tempcellformat = null;
     tempcellformat = getbodycellstyle();
     if (tempcellformat != null) {
      if (k == 0 || k == (bodytemparr.length - 1)) {
       tempcellformat.setalignment(alignment.centre);
      }
     }
     templabel = new label(1 + k, 2 + j, bodytemparr[k],
       tempcellformat);
     sheet.addcell(templabel);
    }
   }
   book.write();
   book.close();
  } catch (ioexception e) {
   createflag = false;
   system.out.println("excel创建失败!");
   e.printstacktrace();
  } catch (rowsexceededexception e) {
   createflag = false;
   system.out.println("excel单元设置创建失败!");
   e.printstacktrace();
  } catch (writeexception e) {
   createflag = false;
   system.out.println("excel写入失败!");
   e.printstacktrace();
  }

  return createflag;
 }

 public writablecellformat getheadercellstyle() {
  writablefont font = new writablefont(writablefont.createfont("宋体"), 10,
    writablefont.bold, false, underlinestyle.no_underline);
  writablecellformat headerformat = new writablecellformat(
    numberformats.text);
  try {
   // 添加字体设置
   headerformat.setfont(font);
   // 设置单元格背景色:表头为黄色
   headerformat.setbackground(colour.yellow);
   // 设置表头表格边框样式
   // 整个表格线为粗线、黑色
   headerformat.setborder(border.all, borderlinestyle.thick,
     colour.black);
   // 表头内容水平居中显示
   headerformat.setalignment(alignment.centre);
  } catch (writeexception e) {
   system.out.println("表头单元格样式设置失败!");
  }
  return headerformat;
 }

 public writablecellformat getbodycellstyle() {
  writablefont font = new writablefont(writablefont.createfont("宋体"), 10,
    writablefont.no_bold, false, underlinestyle.no_underline);
  writablecellformat bodyformat = new writablecellformat(font);
  try {
   // 设置单元格背景色:表体为白色
   bodyformat.setbackground(colour.white);
   // 设置表头表格边框样式
   // 整个表格线为细线、黑色
   bodyformat
     .setborder(border.all, borderlinestyle.thin, colour.black);
  } catch (writeexception e) {
   system.out.println("表体单元格样式设置失败!");
  }
  return bodyformat;
 }

 public static void main(string[] args) {
  string header = "no,姓名,性别,年龄";
  string[] body = new string[4];
  body[0] = "1,欧阳锋,男,68";
  body[1] = "2,黄药师,男,67";
  body[2] = "3,洪七公,男,70";
  body[3] = "4,郭靖,男,32";
  string filepath = "e:/test.xls";
  jxltable testjxl = jxltable.getinstance();
  boolean flag = testjxl.createtable(header, body, filepath);
  if (flag) {
   system.out.println("表格创建成功!!");
  }
 }
}

分步讲解:

读取excel文件

要读取excel文件首先应该建立一个wordbook:

复制代码 代码如下:

workbook wb=workbook.getworkbook(file file);
workbook wb=workbook.getworkbook(inputstream is);

然后就可以获得它的工作表

复制代码 代码如下:

sheet[] sheets=wb.getsheets();            //获得所有工作表
sheet sheet=wb.getsheet(0);               //表示获得第一个工作表。

最后就可以获得对某工作表的某些单元格的值:

复制代码 代码如下:

cell cell=sheet.getcell(0,0);          //获得第一列 第一行的数据。第一个参数为列
string value=cell.getcontents();    //获得该单元格的字符串形式的值
string type=cell.gettype();           //获得该单元格的数据类型。

关闭workbook工作流
当你完成对excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的 过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

复制代码 代码如下:

wb.close();

注意:只有完成对该excel的操作后才可以关闭,关闭后在调用如sheet s=wb.getsheet(0)会为null的。

常用的方法介绍

workbook类提供的方法
1. int getnumberofsheets()
获得工作薄(workbook)中工作表(sheet)的个数,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
int sheets = rwb.getnumberofsheets();

2. sheet[] getsheets()
返回工作薄(workbook)中工作表(sheet)对象数组,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
sheet[] sheets = rwb.getsheets();


sheet接口提供的方法

1. string getname()
获取sheet的名称,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
jxl.sheet rs = rwb.getsheet(0);
string sheetname = rs.getname();

2. int getcolumns()
获取sheet表中所包含的总列数,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
jxl.sheet rs = rwb.getsheet(0);
int rscolumns = rs.getcolumns();

3. cell[] getcolumn(int column)
获取某一列的所有单元格,返回的是单元格对象数组,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
jxl.sheet rs = rwb.getsheet(0);
cell[] cell = rs.getcolumn(0);

4. int getrows()
获取sheet表中所包含的总行数,示例:

复制代码 代码如下:

jxl.workbook rwb = jxl.workbook.getworkbook(new file(sourcefile));
jxl.sheet rs = rwb.getsheet(0);
int rsrows = rs.getrows();

5. cell[] getrow(int row)