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