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();
- }
- }
- }
- }