Java使用jxl操作Excel文件

记录一下平时的开发中使用Java操作Excel文件的方法,包括读取Excel文件和写Excel文件,这里用到了jxl.jar包,下面上代码:

/**获取表头的格式*/
	public static WritableCellFormat getWritableHeaderCellFormat(){
		WritableFont font = new WritableFont(WritableFont.createFont("楷体"), Global.HEAD_FONT_SIZE, 
				WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE);
		WritableCellFormat headerFormat = new WritableCellFormat();
		try {
			headerFormat.setFont(font); 
			headerFormat.setBackground(Colour.YELLOW);
			headerFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
			headerFormat.setAlignment(Alignment.CENTRE);
		} catch (WriteException e) {
			e.printStackTrace();
		}
		return headerFormat;
	}
以上代码是设置单元格格式的一些方法,包括设置单元格的文字大小,字体,背景色,对齐方式等。

		try {
			WritableWorkbook wb = Workbook.createWorkbook(exportFile);
			WritableCellFormat headerFormat = getWritableHeaderCellFormat();
			WritableSheet sheet = wb.createSheet("点名", 0);
			sheet.addCell(new Label(0, 0, "学号", headerFormat));
			sheet.setColumnView(0, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(1, 0, "姓名", headerFormat));
			sheet.setColumnView(1, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(2, 0, "性别", headerFormat));
			sheet.setColumnView(2, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(3, 0, "年龄", headerFormat));
			sheet.setColumnView(3, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(4, 0, "班级", headerFormat));
			sheet.setColumnView(4, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(5, 0, "电话", headerFormat));
			sheet.setColumnView(5, 2 * Global.CELL_META_WIDTH);
			sheet.addCell(new Label(6, 0, "是否出勤", headerFormat));
			sheet.setColumnView(6, 4 * Global.CELL_META_WIDTH);
			List<StudentBean> allList = getAllStudents();
			WritableCellFormat contentFormat = getWritableContentCellFormat();
			for(int i = 0; i < allList.size(); i++){
				StudentBean bean = allList.get(i);
				String id = bean.getId();
				sheet.addCell(new Label(0, i + 1, bean.getId(), contentFormat));
				sheet.addCell(new Label(1, i + 1, bean.getName(), contentFormat));
				sheet.addCell(new Label(2, i + 1, bean.getSex(), contentFormat));
				sheet.addCell(new Label(3, i + 1, bean.getAge() + "", contentFormat));
				sheet.addCell(new Label(4, i + 1, bean.getClassName(), contentFormat));
				sheet.addCell(new Label(5, i + 1, bean.getPhone(), contentFormat));
				if(idList.contains(id)){
					//点名到了
					sheet.addCell(new Label(6, i + 1, "是", contentFormat));
				}else{
					//点名未到
					sheet.addCell(new Label(6, i + 1, "否", contentFormat));
				}
			}
			wb.write();
			wb.close();
			callBack.onExportFinish(exportFile);
		} catch (Exception e) {
			e.printStackTrace();
			callBack.onExportFailure();
		}
以上代码是往Excel文件中写入数据的一些方法,首先需要获取一个WritableWorkbook对象,然后创建sheet,再通过sheet的addCell方法添加单元格,上面的代码中,addCell方法里新建了Label对象,Label的创建需要指定行和列,这里需要注意的是Label的构造方法中,第一个参数是column,第二个参数是row,这里容易搞错。将单元格添加到sheet中之后,需要调用workbook的write方法,才能将数据写入Excel文件。

下面看读取Excel文件的一些方法:

			try {
				File f = new File(filePath);
				Workbook book = Workbook.getWorkbook(f);
				Sheet sheet = book.getSheet(0);
				int rows = sheet.getRows();//行
				int cols = sheet.getColumns();//列
				List<StudentBean> list = new ArrayList<StudentBean>();
				for(int i = 1; i < rows; i++){
					StudentBean bean = new StudentBean();
					for(int j = 0; j < cols; j++){
						//getCell(i, j),i是列,j是行
						String title = sheet.getCell(j, 0).getContents().trim();
						String con = sheet.getCell(j, i).getContents().trim();
						if("学号".equals(title)){
							bean.setId(con);
						}else if("姓名".equals(title)){
							bean.setName(con);
						}else if("性别".equals(title)){
							bean.setSex(con);
						}else if("年龄".equals(title)){
							bean.setAge(Integer.parseInt(con));
						}else if("班级".equals(title)){
							bean.setClassName(con);
						}else if("电话".equals(title)){
							bean.setPhone(con);
						}
					}
					list.add(bean);
				}
				if(list.size() > 0){
					//将数据加入数据库
					db = dbHelper.getWritableDatabase();
					String insertClassNameSql = "insert into classes(name) values (?)";
					//添加到班级表
					if(!isClassNameExist(className)){
						db.execSQL(insertClassNameSql, new Object[]{className});
					}
					String insertStuSql = "insert into stus values (?, ?, ?, ?, ?, ?)";
					for(int i = 0; i < list.size(); i++){
						StudentBean bean = list.get(i);
						if(!isIdExsit(bean.getId())){
							db.execSQL(insertStuSql, new Object[]{bean.getId(), 
									bean.getName(), bean.getSex(), bean.getAge(), 
									bean.getClassName(), bean.getPhone()});
							count++;
						}
					}
					handler.obtainMessage(MSG_IMPORT_COMPLETE).sendToTarget();
					db.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
首先还是获取workbook对象,然后获取sheet,再通过sheet获取Excel文件内容的行数和列数,然后用双重循环读取文件内容,获取某个单元格的内容使用的是sheet.getCell().getContents()方法。




你可能感兴趣的:(java,JXL,excel导入,excel导出)