Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。
今天突然翻到了以前的一个测试,好像也是从哪里拷贝修改改过的,注释里有个IBM的链接 http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10,贴上来当作一个入门参考资料吧。
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.HeaderFooter;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* @author cjj 2008-12-22 参考:
* http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10
*
*
*/
public class ExcelUtils
{
/**
* 读取Excel文件的内容
*
* @param file
* 待读取的文件
* @return
*/
public static String readExcel(final File file)
{
final StringBuffer sb = new StringBuffer();
Workbook wb = null;
try
{
//构造Workbook(工作薄)对象
wb = Workbook.getWorkbook(file);
}
catch (final BiffException e)
{
e.printStackTrace();
}
catch (final IOException e)
{
e.printStackTrace();
}
if (wb == null) return null;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
final Sheet[] sheet = wb.getSheets();
if (sheet != null && sheet.length > 0)
{
//对每个工作表进行循环
for (int i = 0; i < sheet.length; i++)
{
//得到当前工作表的行数
final int rowNum = sheet[i].getRows();
for (int j = 0; j < rowNum; j++)
{
//得到当前行的所有单元格
final Cell[] cells = sheet[i].getRow(j);
if (cells != null && cells.length > 0)
{
//对每个单元格进行循环
for (int k = 0; k < cells.length; k++)
{
//读取当前单元格的值
final String cellValue = cells[k].getContents();
sb.append(cellValue + "\t");
}
}
sb.append("\r\n");
}
sb.append("\r\n");
}
}
//最后关闭资源,释放内存
wb.close();
return sb.toString();
}
/**
* 生成一个Excel文件
*
* @param fileName
* 要生成的Excel文件名
*/
public static void writeExcel(final String fileName)
{
WritableWorkbook wwb = null;
//格式化
final WritableCellFormat totalFormat = new WritableCellFormat();
try
{
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
//格式化剧中
totalFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
}
catch (final IOException e)
{
e.printStackTrace();
}
catch (final WriteException e)
{
e.printStackTrace();
}
if (wwb != null)
{
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
final WritableSheet ws = wwb.createSheet("sheet1", 0);
//下面开始添加单元格
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5; j++)
{
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
final Label labelC = new Label(j, i, "这是第" + (i + 1) + "行,第" + (j + 1) + "列", totalFormat);
try
{
//将生成的单元格添加到工作表中
ws.addCell(labelC);
}
catch (final RowsExceededException e)
{
e.printStackTrace();
}
catch (final WriteException e)
{
e.printStackTrace();
}
}
}
try
{
//把 单元格(column, row)到单元格(column1, row1)进行合并。
ws.mergeCells(6, 0, 6, 3);
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
}
catch (final IOException e)
{
e.printStackTrace();
}
catch (final WriteException e)
{
e.printStackTrace();
}
}
}
/**
* 搜索某一个文件中是否包含某个关键字
*
* @param file
* 待搜索的文件
* @param keyWord
* 要搜索的关键字
* @return
*/
public static boolean searchKeyWord(final File file, final String keyWord)
{
boolean res = false;
Workbook wb = null;
try
{
//构造Workbook(工作薄)对象
wb = Workbook.getWorkbook(file);
}
catch (final BiffException e)
{
return res;
}
catch (final IOException e)
{
return res;
}
if (wb == null) return res;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
final Sheet[] sheet = wb.getSheets();
boolean breakSheet = false;
if (sheet != null && sheet.length > 0)
{
//对每个工作表进行循环
for (int i = 0; i < sheet.length; i++)
{
if (breakSheet) break;
//得到当前工作表的行数
final int rowNum = sheet[i].getRows();
boolean breakRow = false;
for (int j = 0; j < rowNum; j++)
{
if (breakRow) break;
//得到当前行的所有单元格
final Cell[] cells = sheet[i].getRow(j);
if (cells != null && cells.length > 0)
{
boolean breakCell = false;
//对每个单元格进行循环
for (int k = 0; k < cells.length; k++)
{
if (breakCell) break;
//读取当前单元格的值
final String cellValue = cells[k].getContents();
if (cellValue == null) continue;
if (cellValue.contains(keyWord))
{
res = true;
breakCell = true;
breakRow = true;
breakSheet = true;
}
}
}
}
}
}
//最后关闭资源,释放内存
wb.close();
return res;
}
/**
* 往Excel中插入图片
*
* @param dataSheet
* 待插入的工作表
* @param col
* 图片从该列开始
* @param row
* 图片从该行开始
* @param width
* 图片所占的列数
* @param height
* 图片所占的行数
* @param imgFile
* 要插入的图片文件
*/
public static void insertImg( final WritableSheet dataSheet,
final int col,
final int row,
final int width,
final int height,
final File imgFile)
{
final WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
/**
* 向Excel中加入页眉页脚
*
* @param dataSheet
* 待加入页眉的工作表
* @param left
* @param center
* @param right
*/
public static void setHeader( final WritableSheet dataSheet,
final String left,
final String center,
final String right)
{
final HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(left);
hf.getCentre().append(center);
hf.getRight().append(right);
//加入页眉
dataSheet.getSettings().setHeader(hf);
//加入页脚
//dataSheet.getSettings().setFooter(hf);
}
//测试
public static void main(final String[] arts)
{
//测试写
ExcelUtils.writeExcel("test.xls");
if (false)
{
//测试插入页眉页脚
try
{
//创建一个工作薄
final WritableWorkbook workbook = Workbook.createWorkbook(new File("test.xls"));
//待插入的工作表
final WritableSheet dataSheet = workbook.createSheet("加入页眉", 0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");
workbook.write();
workbook.close();
}
catch (final IOException e)
{
e.printStackTrace();
}
catch (final WriteException e)
{
e.printStackTrace();
}
}
if (false)
{
//测试插入图片
try
{
//创建一个工作薄
final WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/testxls"));
//待插入的工作表
final WritableSheet imgSheet = workbook.createSheet("Images", 0);
//要插入的图片文件
final File imgFile = new File("D:/png");
//图片插入到第二行第一个单元格,长宽各占六个单元格
insertImg(imgSheet, 0, 1, 6, 6, imgFile);
workbook.write();
workbook.close();
}
catch (final IOException e)
{
e.printStackTrace();
}
catch (final WriteException e)
{
e.printStackTrace();
}
}
}
}