`
vicky_luo
  • 浏览: 18949 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

JFinal excel导入导出

阅读更多

@Before({Tx.class})
public void addCustoms() {
    List<UploadFile> customExcel=getFiles();
        if (customExcel == null || customExcel.size()==0) {
        setAttr("title", "不能导入!");
    setAttr("message", "请选择一个要导入的excel文件!");
    render(consts.templateErr);
    return;
        }
            UploadFile flie=customExcel.get(0);
            String filename=flie.getFileName();
            int index=filename.lastIndexOf(".");
            if(!".xls".equals(filename.substring(index))){
            setAttr("title", "不能导入!");
        setAttr("message", "请选择execl类型文件!");
        render(consts.templateErr);
return;
}
                Long size = flie.getFile().length();//拿到上传文件的长度
                if (size > 1024 * 1024 * 5) {
                    setAttr("title", "不能导入!");
        setAttr("message", "请选择小于5M的文件!");
        render(consts.templateErr);
        return;
                } else {
                try {
String result = this.customByExcel(flie.getFile());
                    String[] results = result.split(":");//返回哪行哪列格式有误
                    if("5000Y1".equals(result)){
                        setAttr("title", "不能导入!");
        setAttr("message", "请下载新模板!");
        render(consts.templateErr);
        return;
                    }
                    if (results.length == 1) {//导入文件操作提示
                    setAttr("title","添加成功");
                    setAttr("message", "共添加"+results[0]+"条记录!");
                    setAttr("goName", "常旅客列表");
              setAttr("goUrl", "trip/customs");
                    render(consts.templateSuccess);

                    } else {
                    setAttr("title", "报错!");
        setAttr("message", "第" + results[0] + "位常旅客,"+results[1]);
        render(consts.templateErr);
                    }
} catch (Exception e) {
System.out.println(e);
setAttr("title","添加错误");
            setAttr("message", "对不起,添加错误!");
            render(consts.templateErr);
}

                }
    }

@Before({Tx.class})
public String customByExcel(File customExcel) {
Member _member = getSessionAttr(consts.tmcSessionKey);
        Workbook wb = null;
        List<FrequenFlyer> customs=new ArrayList<FrequenFlyer>();
        int rowNum = 0;//总行数
        String sgin="succeed";//表示导入表格当中的每一行都符合模板要求
        String errorRow="",errorCol="",result="文件没有内容!";//标记错误数据在第几行  和那个字段 最终返回结果
        try {
   wb=Workbook.getWorkbook(customExcel);
} catch (Exception e) {
System.out.println(e);
setAttr("title", "提交报错!");
setAttr("message", "初始化Workbook报错!");
render(consts.templateErr);
}
            if(wb!=null){
                Sheet[] sheet=wb.getSheets();
                if(sheet != null && sheet.length > 0){
                    rowNum = sheet[0].getRows()-1;//拿到总行数
                    Cell[] cells2 = sheet[0].getRow(1);
                     //查看必填列 列名字是否和模板一致
                    if(!cells2[0].getContents().contains("姓名") ||
                            !cells2[1].getContents().contains("部门")
                            ){
                        return "5000Y1";//模板格式不正确
                    }
                    List<Department> departs=Department.dao.find("select * from T_DEPARTMENT where com_id=? and state=0 ", _member.getNumber("comid"));
                    Map<String, String> departsMap=new HashMap<String, String>();
                    for (Department department : departs) {
                    departsMap.put(department.getNumber("id").toString(), department.getStr("dname"));
}
                    for(int i=2;i<rowNum+1;i++){
                        Cell[] cells = sheet[0].getRow(i);//拿到第一个表空间的第i列的数据
                        if(cells!=null && cells.length>0){
                           
                                FrequenFlyer custom=new FrequenFlyer()
                            .set("id", "T_FREQUENTFLYER_ID.nextval")
                            .set("passname", cells[0].getContents().replace(" ", ""))//姓名
                            .set("departmentid", cells[1].getContents().replace(" ", ""))//部门
                            .set("cardtype", cells[2].getContents().replace(" ", ""))//证件类型
                            .set("cardnumber", cells[3].getContents().replace(" ", ""))//证件号码
                                          customs.add(custom);
                            }else{
                                errorCol=colIsNotEmpty(cells);
                                errorRow=(i-1)+"";
                                sgin="failure";
                                break;
                            }
                        }
                    }

                    if(sgin.equals("succeed")){//如果模板正确并且数据格式也符合要求就添加本次导入的数据
                        for(FrequenFlyer c:customs){
                        c.save();
                        }
                        result=customs.size()+"";//返回成功添加条数
                    }else {
                        result=errorRow+":"+errorCol;//返回错误行和列信息
                    }
                }
            }

        return result;
    }
//验证必填字段是否都符合要求,如果不符合要求则返回字段名称

public String colIsNotEmpty(Cell[] cells){
         if(StringUtils.isEmpty(cells[0].getContents().replace(" ", ""))){
             return  "姓名,数据格式有问题,检查是否存在空格!";
         }
         if(StringUtils.isEmpty(cells[1].getContents().replace(" ", ""))){
             return "部门,数据格式有问题,检查是否存在空格!";
         }
         return "pass";
     }
/**
  *
  * @Description 下载常旅客导入模板
  * 使用场景:常旅客EXECL导入
  * @author luoq
  *
  * @throws
  */

public void execl(){
try {
String sCurrPath = System.getProperty("java.io.tmpdir") + "\\xlsx"+ (new java.util.Date().getTime())+".xls";
DownloadExecl.createExcel(sCurrPath);
File xls=new File(sCurrPath);
renderFile(xls);

} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
renderText("导出数据报错!");
}
}
public class DownloadExecl {

public static void createExcel(String sCurrPath){

try {
//** **********创建工作簿************ *//*
WritableWorkbook workbook = Workbook.createWorkbook(new File(sCurrPath));
//** **********创建工作表************ *//*
WritableSheet sheet = workbook.createSheet("常旅客导入模板", 0);
//** **********设置页眉、页脚***************** *//*
sheet.setHeader("页眉", "", "第   &P   页,共   &N   页"); // 设置页眉
sheet.setFooter("", "", "&D   &T"); // 设置页脚
//** ****注:以上这些&P、&D等参数可以从EXCEL的宏录制取得******* *//*
//** *********设置列宽**************** *//*
sheet.setColumnView(0, 20); //姓名
sheet.setColumnView(1, 15);//部门
sheet.setColumnView(2, 25);//证件类型
//** ************设置单元格字体************** *//*
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont12 = new WritableFont(WritableFont.ARIAL, 12,WritableFont.BOLD);//加粗12号字体
WritableFont BoldFont20 = new WritableFont(WritableFont.ARIAL, 20,WritableFont.BOLD);////加粗18号字体

//** ************以下设置几种格式的单元格************ *//*
//用于台头
WritableCellFormat wcf_heading = new WritableCellFormat(BoldFont20);
wcf_heading.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_heading.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_heading.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_heading.setWrap(false); // 是否换行

// 用于标题
WritableCellFormat wcf_title = new WritableCellFormat(BoldFont12);
wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_title.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_title.setWrap(false); // 是否换行

// 用于正文
WritableCellFormat wcf_text = new WritableCellFormat(NormalFont);
wcf_text.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_text.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_text.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_text.setWrap(true); // 是否换行
// 用于跨行
WritableCellFormat wcf_merge = new WritableCellFormat(NormalFont);
wcf_merge.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_merge.setVerticalAlignment(VerticalAlignment.TOP); // 垂直对齐
wcf_merge.setAlignment(Alignment.LEFT);
wcf_merge.setWrap(true); // 是否换行
// 用于正文
NumberFormat nf = new jxl.write.NumberFormat("0.00"); //设定带小数点数字格式
WritableCellFormat wcfN = new jxl.write.WritableCellFormat(NormalFont,nf);//设定带小数数字单元格格式
wcfN.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcfN.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcfN.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_merge.setWrap(false); // 是否换行
//** ************单元格格式设置完成****************** *//*

//** ***************以下是标题************************** *//*
sheet.setRowView(0, 800); // 设置行高
sheet.setRowView(1, 500); // 设置行高
sheet.addCell(new Label(0, 0, "常旅客导入模板", wcf_heading));
sheet.mergeCells(0,0,6,0);//合并第一行的第1列到第一行15列
sheet.addCell(new Label(0, 1, "姓名(必填)", wcf_title));
sheet.addCell(new Label(1, 1, "部门(必填)", wcf_title));
sheet.addCell(new Label(2, 1, "证件类型(必填)",
//** ***************以下是内容************************** *//*
WritableFont wcf_font=(WritableFont) wcf_text.getFont();
WritableCellFormat wcf_numberfomart = new WritableCellFormat(wcf_font,NumberFormats.TEXT);//设置数字格式类型按照文本格式输出
wcf_numberfomart.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_numberfomart.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_numberfomart.setAlignment(Alignment.LEFT); // 水平对齐
wcf_numberfomart.setWrap(true); // 是否换行
sheet.addCell(new Label(0, 2,"张三", wcf_text));//姓名
    sheet.addCell(new Label(1, 2,"1", wcf_text));//部门
sheet.addCell(new Label(2, 2,"1", wcf_text));//证件类型
//--------------------------
sheet.addCell(new Label(0, 3,"李四", wcf_text));//姓名
    sheet.addCell(new Label(1, 3,"1", wcf_text));//部门
sheet.addCell(new Label(2, 3,"2", wcf_text));//证件类型
/** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
workbook.write();
/** *********关闭文件************* */

workbook.close();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics