JAVA 读取Excel表格内容并修改

J2EE 码拜 8年前 (2017-05-02) 4456次浏览
大家好,最近遇到一个问题,需要用java去读取excel中某一列得数据,
然后对这一列的数据进行修改.
(例如读取B1单元格内容是“张三”本人想改成“李四”)
从网上搜索了一下,说可以用poi或jxl。可由于时间紧迫,来不及去仔细得看帮组文档。请各位大牛指点一下!拜谢!
最好是给一个例子
解决方案

50

本人之前做过这个,使用jxl来操作Excel直接给你源码吧:

	/**
	 * 判断文件能否存在,存在修改,不存在创建并添加数据
	 * 
	 * @param route
	 *            包名+路径
	 */
	@SuppressWarnings("null")
	public void saveZkfp() {
		File file = new File(fileRoute);
		PrintWriter out = null;
		try {
				// 将输出的编码改为utf-8
				getResponse().setContentType("text/html;charset=utf-8");
				out = getResponse().getWriter();
				// 判断zkfp.xls文件能否存在,不存在则创建zkfp.xls文件,存在则进行修改
				if (!file.exists() && !file.isDirectory()) {
					// Excel表格不存在,创建Excel表格并添加数据
					// 添加表以及字段
					if (createExcel(fileRoute, userKzfp, userName)) {
						out.print(userKzfp + userno1);
						// out.print("添加成功");
					}
				} else {
					// 文件已存在,添加用户信息,不创建Excel表格
					// 添加扫描指纹的时间
					if (this.savwUser(fileRoute, userKzfp, userName)) {
						out.print(userKzfp + userno1);
						// out.print("添加成功");
					}
				}
		} catch (IOException e) {
			// e.printStackTrace();
			out.print("操作失败" + "--" + e);
		}
	}
	/**
	 * 创建Excel表格并添加数据
	 * 
	 * @param numberno
	 *            编号
	 * @param route
	 *            路径+包名
	 * @param name
	 *            姓名
	 */
	public Boolean createExcel(String fileno, String route, String name) {
		try {
			// 打开文件
			WritableWorkbook book = Workbook.createWorkbook(new File(fileno));
			// 生成名为“第一页”的工作表,参数0表示这是第一页
			WritableSheet sheet1 = book.createSheet("用户表", 0);
			WritableSheet sheet2 = book.createSheet("时间表", 1);
			// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
			// 以及单元格内容为test
			// 创建用户表的字段
			Label label11 = new Label(0, 0, "序号");
			Label label12 = new Label(1, 0, "编号");
			Label label13 = new Label(2, 0, "指纹");
			Label label14 = new Label(3, 0, "姓名");
			// 创建时间表的字段
			Label label21 = new Label(0, 0, "序号");
			Label label22 = new Label(1, 0, "员工姓名");
			Label label23 = new Label(2, 0, "上班");
			Label label24 = new Label(3, 0, "下班");
			// 将定义好的单元格添加到工作表中
			// 将用户表的字段绑定到用户表上
			sheet1.addCell(label11);
			sheet1.addCell(label12);
			sheet1.addCell(label13);
			sheet1.addCell(label14);
			// 将时间表的字段绑定到时间表上
			sheet2.addCell(label21);
			sheet2.addCell(label22);
			sheet2.addCell(label23);
			sheet2.addCell(label24);
			// 获取行
			int length1 = sheet1.getRows();
			int length2 = sheet2.getRows();
			this.userno1 = "keluo" + length1;
			// 添加数据
			// 为用户表添加数据
			jxl.write.Number user11 = new jxl.write.Number(0, length1, length1);
			Label user12 = new Label(1, length1, "keluo1");
			Label user13 = new Label(2, length1, route + userno1 + ".tpl");
			Label user14 = new Label(3, length1, name);
			// 为时间表添加数据
			jxl.write.Number createDate1 = new jxl.write.Number(0, length2,
					length2);
			Label createDate2 = new Label(1, length2, name);
			Label createDate3 = null;
			Label createDate4 = null;

			// 当前时间和10:00:00比较,假如当前时间小于10:00:00则返回-1
			if (compare_date(df2.format(new Date()), isTime) == -1) {
				//上班
				createDate3 = new Label(2, length2, df.format(new Date()));
				createDate4 = new Label(3, length2, null);
			} else {
				//下班
				createDate3 = new Label(2, length2, null);
				createDate4 = new Label(3, length2, df.format(new Date()));
			}
			sheet1.addCell(user11);
			sheet1.addCell(user12);
			sheet1.addCell(user13);
			sheet1.addCell(user14);
			sheet2.addCell(createDate1);
			sheet2.addCell(createDate2);
			sheet2.addCell(createDate3);
			sheet2.addCell(createDate4);
			// 写入数据并关闭文件
			book.write();
			book.close();
			return true;
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}
	}
	/**
	 * 添加用户信息
	 * 
	 * @param numberno
	 * @param route
	 * @param name
	 */
	public Boolean savwUser(String fileno, String route, String name) {
		try {
			// --
			// -- 添加一个用户指纹信息 --
			// --
			// 打开文件
			Workbook book = Workbook.getWorkbook(new File(fileno));
			// 获得第一个工作表对象
			Sheet sheet1 = book.getSheet(0);
			// 获得第一个工作表对象
			Sheet sheet2 = book.getSheet(1);
			// 获取行
			int length1 = sheet1.getRows();
			int length2 = sheet2.getRows();
			// 根据book创建一个操作对象
			WritableWorkbook wbook = Workbook.createWorkbook(new File(fileno),
					book);
			// 得到一个工作对象
			WritableSheet sh1 = wbook.getSheet(0);
			WritableSheet sh2 = wbook.getSheet(1);
			userno1 = "keluo" + length1;
			// 创建用户表数据
			jxl.write.Number user11 = new jxl.write.Number(0, length1, length1);
			Label user12 = null;
			// 比较指纹获取用户编号
			for (int i = 0; i < length1; i++) {
				Cell a1 = sh1.getCell(3, i);
				// 此处是获取单个单元格的数据
				String sa2 = a1.getContents();
				if (name.equals(sa2)) {
					// Cell a1=sheet.getCell(0,i);
					// 此处是获取单个单元格的数据
					Cell a2 = sh1.getCell(1, i);
					user12 = new Label(1, length1, a2.getContents());
					break;
				}
			}
			if (user12 == null) {
				user12 = new Label(1, length1, "keluo" + length1);
			}
			// Label user12 = new Label(1, length1 , "keluo" + length1);
			Label user13 = new Label(2, length1, route + userno1 + ".tpl");
			Label user14 = new Label(3, length1, name);
			// 将用户表数据添加到用户表上
			sh1.addCell(user11);
			sh1.addCell(user12);
			sh1.addCell(user13);
			sh1.addCell(user14);
			// 创建时间表数据
			jxl.write.Number label0 = new jxl.write.Number(0, length2, length2);
			Label label = new Label(1, length2, name);
			//添加时间
			Label createDate3 = null;
			Label createDate4 = null;

			// 当前时间和10:00:00比较,假如当前时间小于10:00:00则返回-1
			if (compare_date(df2.format(new Date()), isTime) == -1) {
				//上班
				createDate3 = new Label(2, length2, df.format(new Date()));
				createDate4 = new Label(3, length2, null);
			} else {
				//下班
				createDate3 = new Label(2, length2, null);
				createDate4 = new Label(3, length2, df.format(new Date()));
			}

			// 将时间表数据添加到时间表上
			sh2.addCell(label0);
			sh2.addCell(label);
			sh2.addCell(createDate3);
			sh2.addCell(createDate4);
			wbook.write();
			wbook.close();
			return true;
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}
	}
	/*
	 * 添加用户信息并添加一天相应的指纹信息
	 */
	@SuppressWarnings("null")
	public void addUserZkfpDate() {
		PrintWriter out = null;
		try {
			// 将输出的编码改为utf-8
			getResponse().setContentType("text/html;charset=utf-8");
			out = getResponse().getWriter();
			String usersno = getRouteUserNo(fileRoute, userKzfp);
			if (usersno != null) {
				if (saveZkfpDate(usersno, fileRoute)) {
					out.print("打卡成功,谢谢");
				} else {
					out.print("打卡失败,请重新输入指纹!");
				}
			} else {
				out.print("打卡失败,请重新输入指纹!");
			}
		} catch (IOException e) {
			out.print("打卡失败,错误为:" + "--" + e);
		}
	}
	/**
	 * 添加扫描指纹的时间
	 * 
	 * @param userno
	 * @param zkfp
	 */
	public Boolean saveZkfpDate(String userno, String zkfp) {
		try {
			Workbook book = Workbook.getWorkbook(new File(zkfp));
			// 获得第一个工作表对象
			Sheet sheet = book.getSheet(1);
			// 获取行
			int length = sheet.getRows();
			// 根据book创建一个操作对象
			WritableWorkbook wbook = Workbook.createWorkbook(new File(zkfp),
					book);
			// 得到一个工作对象
			WritableSheet sh = wbook.getSheet(1);
			jxl.write.Number label0 = new jxl.write.Number(0, length, length);
			Label label = new Label(1, length, userno);

			//添加时间
			Label createDate3 = null;
			Label createDate4 = null;
			// 当前时间和10:00:00比较,假如当前时间小于10:00:00则返回-1
			if (compare_date(df2.format(new Date()), isTime) == -1) {
				//上班
				createDate3 = new Label(2, length, df.format(new Date()));
				createDate4 = new Label(3, length, null);
			} else {
				//下班
				createDate3 = new Label(2, length, null);
				createDate4 = new Label(3, length, df.format(new Date()));
			}
			//Label createDate = new Label(2, length, df.format(new Date()));
			sh.addCell(label0);
			sh.addCell(label);
			sh.addCell(createDate3);
			sh.addCell(createDate4);
			wbook.write();
			wbook.close();
			return true;
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}
	}
	/*
	 * 根据指纹模板获取用户编号
	 */
	public static String getRouteUserNo(String fileRoute, String zkfp) {
		// 用户的编号
		String uno = null;
		try {
			Workbook book = Workbook.getWorkbook(new File(fileRoute));
			// 获得第一个工作表对象
			Sheet sheet = book.getSheet(0);
			// 获取行
			int len = sheet.getRows();
			// 比较指纹获取用户编号
			for (int i = 0; i < len; i++) {
				Cell a1 = sheet.getCell(2, i);
				// 此处是获取单个单元格的数据
				String sa2 = a1.getContents();
				if (zkfp.equals(sa2)) {
					// Cell a1=sheet.getCell(0,i);
					// 此处是获取单个单元格的数据
					Cell a2 = sheet.getCell(3, i);
					uno = a2.getContents();
					System.out.println(uno);
					break;
				} else {
					uno = null;
				}
			}
			book.close();
			return uno;
		} catch (Exception e) {
			System.out.println(e);
			return null;
		}
	}
	/*
	 * 日期时间比较(data1、data2)
	 * return data1<tata2   -1
	 * return data1>tata2   1
	 * return +1/-1
	 */
	public int compare_date(String DATE1, String DATE2) {
		DateFormat df = new SimpleDateFormat("hh:mm:ss");
		try {
			Date dt1 = df.parse(DATE1);
			Date dt2 = df.parse(DATE2);
			if (dt1.getTime() > dt2.getTime()) {
				// System.out.println("dt1 在dt2前");
				return 1;
			} else if (dt1.getTime() < dt2.getTime()) {
				// System.out.println("dt1在dt2后");
				return -1;
			} else {
				return 0;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return 0;
	}

你弄一个HTML和action,上面这代码修改几个关键点可以直接使用


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JAVA 读取Excel表格内容并修改
喜欢 (0)
[1034331897@qq.com]
分享 (0)