解决方案 »

  1.   

    我之前做过这个,使用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,上面这代码修改几个关键点可以直接使用