Java操作Excel文件

刚好公司项目中需要用到java来操作excel,稍微花了点时间整理下,权当做个笔记吧!

一、将数据写入Excel文件:

用List<String> lst保存要写入Excel文件的数据

/**
	 * 生成一个Excel文件
	 * 
	 * @param fileName 要生成的Excel文件名
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public static void writeExcel(String fileName , List<String> lst){
		WritableWorkbook wwb = null;
		try {
			// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
			wwb = Workbook.createWorkbook(new File(fileName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (wwb != null) {
			// 创建一个可写入的工作表
			// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
			WritableSheet ws = wwb.createSheet("各类型文件大小统计表", 0);
			Label label1 = new Label(0,0,"文件类型");
			Label label2 = new Label(1,0,"文件大小(G)");
			Label label3 = new Label(2,0,"使用次数");
			
			//将值添加到单元格中
			try {
				ws.addCell(label1);
				ws.addCell(label2);
				ws.addCell(label3);
			} catch (RowsExceededException e1) {
				e1.printStackTrace();
			} catch (WriteException e1) {
				e1.printStackTrace();
			}
			
			// 下面开始添加单元格
			for (int i = 0; i < lst.size(); i++) {
				String s[] = lst.get(i).split(",");
				for (int j = 0; j < s.length; j++) {
					// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
					Label labelC = new Label(j, i+1, s[j]);
					try {
						// 将生成的单元格添加到工作表中
						ws.addCell(labelC);
					} catch (RowsExceededException e) {
						e.printStackTrace();
					} catch (WriteException e) {
						e.printStackTrace();
					}
				}
			}
			try {
				// 从内存中写入文件中
				wwb.write();
				// 关闭资源,释放内存
				wwb.close();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (WriteException e) {
				e.printStackTrace();
			}
		}
	}
二、从Excel中读出数据

从Excel文件中直接读出数据并以字符串形式返回数据。

/**读取Excel文件的内容  
	 * @param file  待读取的文件  
	 * @return  
	 */  
	public static String readExcel(String inPath){   
	    StringBuffer sb = new StringBuffer();   
	    File file = new File(inPath);
	    Workbook wb = null;   
	    try {   
	        //构造Workbook(工作薄)对象   
	        wb=Workbook.getWorkbook(file);   
	    } catch (BiffException e) {   
	        e.printStackTrace();   
	    } catch (IOException e) {   
	        e.printStackTrace();   
	    }   
	       
	    if(wb==null)   
	        return null;   
	       
	    //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   
	    Sheet[] sheet = wb.getSheets();   
	       
	    if(sheet!=null&&sheet.length>0){   
	        //对每个工作表进行循环   
	        for(int i=0;i < sheet.length; ++i){
	            //得到当前工作表的行数   
	            int rowNum = sheet[i].getRows();   
	            for(int j=0;j < rowNum; ++j){
	                //得到当前行的所有单元格
	                Cell[] cells = sheet[i].getRow(j);   
	                if(cells!=null&&cells.length>0){
	                    //对每个单元格进行循环
	                    for(int k=0;k < cells.length; ++k){
	                        //读取当前单元格的值   
	                        String cellValue = cells[k].getContents();   
	                        sb.append(cellValue+"\t");   
	                    }   
	                }   
	                sb.append("\r\n");   
	            }   
	            sb.append("\r\n");   
	        }   
	    }   
	    //最后关闭资源,释放内存   
	    wb.close();   
	    return sb.toString();   
	}  

三、在某个Excel文件中查找是否包含某一个关键字

/**
	 * 搜索某一个文件中是否包含某个关键字
	 * @param file 待搜索的文件
	 * @param keyWord 要搜索的关键字
	 * @return
	 */
	public static boolean searchKeyWord(File file, String keyWord) {
		boolean res = false;

		Workbook wb = null;
		try {
			// 构造Workbook(工作薄)对象
			wb = Workbook.getWorkbook(file);
		} catch (BiffException e) {
			return res;
		} catch (IOException e) {
			return res;
		}

		if (wb == null)
			return res;

		// 获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
		Sheet[] sheet = wb.getSheets();

		boolean breakSheet = false;

		if (sheet != null && sheet.length > 0) {
			// 对每个工作表进行循环
			for (int i = 0; i < sheet.length; ++i) {
				if (breakSheet)
					break;

				// 得到当前工作表的行数
				int rowNum = sheet[i].getRows();

				boolean breakRow = false;

				for (int j = 0; j < rowNum; ++j) {
					if (breakRow)
						break;
					// 得到当前行的所有单元格
					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;
							// 读取当前单元格的值
							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中插入图片图标
插入图片的实现很容易,参看以下代码:

	/**
	 * 往Excel中插入图片
	 * 
	 * @param dataSheet
	 *            待插入的工作表
	 * @param col
	 *            图片从该列开始
	 * @param row
	 *            图片从该行开始
	 * @param width
	 *            图片所占的列数
	 * @param height
	 *            图片所占的行数
	 * @param imgFile
	 *            要插入的图片文件
	 */
	public static void insertImg(WritableSheet dataSheet, int col, int row,
			int width, int height, File imgFile) {
		WritableImage img = new WritableImage(col, row, width, height, imgFile);
		dataSheet.addImage(img);
	}
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:

try {
    		//创建一个工作薄
			WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
			//待插入的工作表
			WritableSheet imgSheet = workbook.createSheet("Images",0);
			//要插入的图片文件
			File imgFile = new File("D:/1.png");
			//图片插入到第二行第一个单元格,长宽各占六个单元格
			insertImg(imgSheet,0,1,6,6,imgFile);
			workbook.write();
			workbook.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (WriteException e) {
			e.printStackTrace();
		}  
 但是jxl只支持png格式的图片,jpg格式和gif格式都不支持。

五、插入页眉页脚
一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚

/**
	 * 向Excel中加入页眉页脚
	 * 
	 * @param dataSheet
	 *            待加入页眉的工作表
	 * @param left
	 * @param center
	 * @param right
	 */
	public static void setHeader(WritableSheet dataSheet, String left,
			String center, String right) {
		HeaderFooter hf = new HeaderFooter();
		hf.getLeft().append(left);
		hf.getCentre().append(center);
		hf.getRight().append(right);
		// 加入页眉
		dataSheet.getSettings().setHeader(hf);
		// 加入页脚
		// dataSheet.getSettings().setFooter(hf);
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值