JAVA操作Excel参考

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

	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值