`

JAVA操作Excel参考

    博客分类:
  • Java
阅读更多

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

	}
}
 
分享到:
评论

相关推荐

    java操作excel,函数计算

    java是不能提供java调用excel里的函数的,所以我提供这个例子,让大家参考,必须导入jxl.jar包哦!

    JAVA实现excel的导出.zip

    用Java语言采用接口设计模式、代理设计模式、工厂设计模式实现对excel中的表实现基本的...使用Java内置的poi jar包实现excel的操作,使用工厂模式、DAO设计模式等,思想很简单,可供设计模式参考,包括代码+文档+jar包

    Java操作Excel和Word

    从网络上搜索到的一套简单的操作Excel,Word的源码,作为参考使用

    java操作excel 学习资料、jxl.jar、自编参考代码

    Java Excel 是一开放源码项目,通过它Java 开发人员可以读取Excel 文件的内容、创建新的Excel 文件、更新已经存在的Excel 文件。使用该API 非Windows操作系统也可以通过...jxl 是一个韩国人写的java 操作excel 的工具。

    java操作excel的方法

    主要介绍了java操作excel的方法,实例分析了java针对excel文件的读写、打开、保存等操作技巧,需要的朋友可以参考下

    利用java操作Excel文件的方法

    以下是对利用java操作Excel文件的方法进行了详细的介绍,需要的朋友可以过来参考下

    Java实现Excel导入导出数据库的方法示例

    主要介绍了Java实现Excel导入导出数据库的方法,结合实例形式分析了java针对Excel的读写及数据库操作相关实现技巧,需要的朋友可以参考下

    java导出TXT和Excel文件

    TXT文件导出只用到流操作。导出Excel文件利用apache的poi第三方包,可在阿帕奇官网下载(最新版本为3.8,支持office2010)。解压文件后,只需要把项目导入到eclipse,再将hibernate.cfg.xml里连接Oracle的URL和...

    Java语言实现Excel的导出

    使用Java内置的poi jar包实现excel的操作,使用工厂模式、DAO设计模式等,思想很简单,可供设计模式参考,包括代码

    java-excel设置背景水印程序包.rar

    针对excel操作添加背景水印的jar,下载后解压取里面的jar包使用,因为资源存在并且收费,所以针对性的压缩下供大家参考使用。

    poi 操作excel案例 直接运行 适合参考

    这是一款以java为主,poi为辅的开发案例,解压附加后可以直接运行,适合伸手党!

    java读写excel文件实现POI解析Excel的方法

    在日常工作中,我们常常会进行Excel文件读写操作,这篇文章主要介绍了java读写excel文件实现POI解析Excel的方法,实例分析了java读写excel的技巧,非常具有实用价值,需要的朋友可以参考下

    Java对Excel表格的操作.DOC.zip

    参考使用,欢迎下载

    一个简易的POI操作EXCEL表页面打印格式的java方法类

    java POI 如何操作EXECL表的打印页面设置,应用较少,但用好了可收到“一键预览打印的格式效果”,各打印页面要素设置方法汇集于这里,亲测成功,方法齐全,共大家参考。

    Java 添加、读取和删除 Excel 批注的操作代码

    主要介绍了Java 添加、读取和删除 Excel 批注的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Excel相關操作方法

    网上搜集的,java操作Excel的一些方式方法,供参考学习

    Java使用poi操作excel实例解析

    主要为大家详细介绍了Java使用poi操作excel的简单实例,感兴趣的小伙伴们可以参考一下

    Java实现的Excel列号数字与字母互相转换功能

    主要介绍了Java实现的Excel列号数字与字母互相转换功能,涉及java针对Excel相关数值与字符串操作技巧,需要的朋友可以参考下

    Java Excel透视表相关操作实现代码

    主要介绍了Java Excel透视表相关操作实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java使用POI操作excel文件

    本文主要介绍了java使用POI操作excel文件,实现批量导出和导入的方法。具有很好的参考价值。下面跟着小编一起来看下吧

Global site tag (gtag.js) - Google Analytics