zoukankan      html  css  js  c++  java
  • jxl导出,导入execl表

            response.setContentType("application/vnd.ms-excel");   //设置格式,导出文件名
            // 生成导出的文件名
            String filename = "sample_";
            SimpleDateFormat dateFormate = new SimpleDateFormat("yyMMdd_HHmmss");
            Calendar now = Calendar.getInstance();
            String nowStr = dateFormate.format(now.getTime());
            response.setHeader("Content-disposition", "attachment;filename=" + filename + nowStr + ".xls");

       /**
         * @author 邓赢
         *定制化RNA导出
         */
        @SuppressWarnings("unused")
        private void rnaSampleTemplate(HttpServletResponse response,
                List<String> idList, String language, String group)
                throws Exception {
            WritableWorkbook book = Workbook.createWorkbook(response.getOutputStream());    //创建输出流
            WritableSheet sheet = book.createSheet("sampleOperate", 0);
            
            WritableCellFormat normalFormat = new WritableCellFormat(NumberFormats.TEXT);   //创建单元格的格式
            normalFormat.setAlignment(Alignment.CENTRE);                  
            normalFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            normalFormat.setWrap(true);
            normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
            normalFormat.setBackground(Colour.IVORY);
            normalFormat.setLocked(false);// 是否锁定单元格

            // 锁定样式
            WritableCellFormat lockFormat = new WritableCellFormat(NumberFormats.TEXT);
            lockFormat.setAlignment(Alignment.CENTRE);
            lockFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
            lockFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            lockFormat.setLocked(true);                          // 是否锁定单元格,锁定之后的单元格数据将不能修改
            lockFormat.setWrap(true);
            
            // 锁定样式
            // WritableFont wfTitleLock = new WritableFont(WritableFont.ARIAL,
            // WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD, false);
            WritableCellFormat wfTitleLockFormat = new WritableCellFormat(NumberFormats.TEXT);
            wfTitleLockFormat.setAlignment(Alignment.CENTRE);
            wfTitleLockFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
            wfTitleLockFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            wfTitleLockFormat.setLocked(true);// 是否锁定单元格
            wfTitleLockFormat.setWrap(true);
            
            // 表头
            List<String> title = new ArrayList<String>();
            
            // 项目信息
            title.add("项目名称");
            title.add("项目编号");
            title.add("客户姓名");
            title.add("客户单位");
            title.add("实验室收样人");
            title.add("实验室收样日期");
            title.add("实验室检测人");
            title.add("实验室检测日期");
            title.add("报告撰写人");

            // 客户信息
            title.add("样品类型1");
            title.add("样品状态");
            title.add("物种来源");
            title.add("样品名称");
            title.add("样品编号");
            title.add("组织名称");
            title.add("组织编号");
            title.add("管数");
            title.add("浓度(ng/μL)");
            title.add("体积(μl)");
            title.add("总量(μg)");
            title.add("OD260/280");
            title.add("OD260/230");
            title.add("备注");

            //检测结果
                
            
            title.add("样品类型2");
            title.add("结果说明");
            title.add("备注");
            

            // Nanodrop                            
            title.add("检测前处理");
            title.add("检测空白参照");    
            title.add("OD260/280");
            title.add("OD260/230");
            title.add("备注");

            // Agilent 2100
            title.add("检测前处理");
            title.add("检测方法");
            title.add("检测试剂盒");
            title.add("稀释倍数(X)");
            title.add("检测浓度(ng/μL)");
            title.add("体积(μL)");
            title.add("RIN");
            title.add("28S/18S");
            title.add("5S峰");
            title.add("图谱基线");
            title.add("rRNA contamination(%)");
            title.add("片度分布");
            title.add("备注");
            title.add("样品ID");
            title.add("语言");

            
            
            // 项目信息
            sheet.mergeCells(0, 0, 8, 0);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
            sheet.addCell(new jxl.write.Label(0, 0, "项目信息", wfTitleLockFormat));

            // 客户信息
            sheet.mergeCells(9, 0, 22, 0);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
            sheet.addCell(new jxl.write.Label(9, 0, "客户信息", wfTitleLockFormat));
            
        
            sheet.mergeCells(23, 0, 45, 0);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
            sheet.addCell(new jxl.write.Label(21, 0, "检测结果", wfTitleLockFormat));
            
            //Nanodrop
            sheet.mergeCells(26, 1, 30, 1);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
            sheet.addCell(new jxl.write.Label(26, 1, "Nanodrop", wfTitleLockFormat));
            
            
            sheet.mergeCells(31, 1, 45, 1);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
            sheet.addCell(new jxl.write.Label(31, 1, "Agilent 2100", wfTitleLockFormat));
            
            
            for(int i=0; i < title.size(); i++){
                if(i < 26){
                    sheet.mergeCells(i, 1, i, 2);    // 合并单元格,参数格式(开始列,开始行,结束列,结束行)
                    sheet.addCell(new jxl.write.Label(i, 1, title.get(i), lockFormat));
                }else{
                    sheet.addCell(new jxl.write.Label(i, 2, title.get(i), lockFormat));    //列、行
                }
            }
            
            String text = null;
            Label label = null;
            List<SampleManagerMx> result = sampleManagerMxService.getSampleMxWithItem(idList);
            
            for(int i=0;i<result.size();i++){
                SampleManagerMx smm = result.get(i);
                sheet.setRowView(i + 3, 1000);    //作用是指定第i+1行的高度
                //项目名称    
                sheet.addCell(new jxl.write.Label(0, i + 3, StringUtil.ObjectToString(""), lockFormat));
                //项目编号
                sheet.addCell(new jxl.write.Label(1, i + 3, StringUtil.ObjectToString(smm.getItemNumber()), lockFormat));
                //客户姓名
                sheet.addCell(new jxl.write.Label(2, i + 3, StringUtil.ObjectToString(smm.getSampleConnMan()), lockFormat));
                //客户单位
                sheet.addCell(new jxl.write.Label(3, i + 3, StringUtil.ObjectToString(smm.getSampleConnCompany()), lockFormat));
                //实验室收样人
                sheet.addCell(new jxl.write.Label(4, i + 3, StringUtil.ObjectToString(smm.getSampleOutReMan()), lockFormat));
                //实验室收样日期
                Date sampleRDate = smm.getSampleOutTime();
                sheet.addCell(new jxl.write.Label(5, i + 3, sampleRDate == null ? "" : sampleRDate.toLocaleString(), lockFormat));
                
                sheet.addCell(new jxl.write.Label(6, i + 3, StringUtil.ObjectToString(""), normalFormat));
                sheet.addCell(new jxl.write.Label(7, i + 3, StringUtil.ObjectToString(""), normalFormat));
                sheet.addCell(new jxl.write.Label(8, i + 3, StringUtil.ObjectToString(""), normalFormat));
            
                // 样品类型1
                sheet.addCell(new jxl.write.Label(9, i + 3, StringUtil.ObjectToString(smm.getSampleType()), lockFormat));
                // 样品状态
                sheet.addCell(new jxl.write.Label(10, i + 3, StringUtil.ObjectToString(smm.getSampleSendTj()), lockFormat));
                // 物种来源
                sheet.addCell(new jxl.write.Label(11, i + 3, StringUtil.ObjectToString(smm.getSampleSpecies()), lockFormat));
                // 样品名称
                sheet.addCell(new jxl.write.Label(12, i + 3, StringUtil.ObjectToString(smm.getSampleName()), lockFormat));
                //样品编号
                sheet.addCell(new jxl.write.Label(13, i + 3, StringUtil.ObjectToString(smm.getSampleSerialNumber()), lockFormat));
                //组织名称
                sheet.addCell(new jxl.write.Label(14, i + 3, StringUtil.ObjectToString(""), lockFormat));
                //组织编号
                sheet.addCell(new jxl.write.Label(15, i + 3, StringUtil.ObjectToString(""), lockFormat));
                //管数
                //sheet.addCell(new jxl.write.Label(16, i + 3, StringUtil.ObjectToString(smm.getSampleConduit()), lockFormat));
                sheet.addCell(new jxl.write.Label(16, i + 3, smm.getSampleConduit() == null ? "1" : smm.getSampleConduit().toString(), lockFormat));
                
                //浓度(ng/μl)
                sheet.addCell(new jxl.write.Label(17, i + 3, StringUtil.ObjectToString(smm.getSampleChroma()), lockFormat));
                //体积(μl)
                sheet.addCell(new jxl.write.Label(18, i + 3, StringUtil.ObjectToString(smm.getSampleBulk()), lockFormat));
                //总量(μg)
                sheet.addCell(new jxl.write.Label(19, i + 3, StringUtil.ObjectToString(smm.getSampleCount()), lockFormat));
                //260280
                sheet.addCell(new jxl.write.Label(20, i + 3, StringUtil.ObjectToString(smm.getSampleOd260280()), lockFormat));
                //260230
                sheet.addCell(new jxl.write.Label(21, i + 3, StringUtil.ObjectToString(smm.getSampleOd260230()), lockFormat));
                // 备注
                sheet.setColumnView(22, 25); //指定第列宽度
                sheet.addCell(new jxl.write.Label(22, i + 3, StringUtil.ObjectToString(smm.getSampleMxRemarks()), lockFormat));
            
                //样品类型2
                sheet.setColumnView(23, 30); //指定第列宽度
                label = new jxl.write.Label(23, i + 3, StringUtil.ObjectToString(""), normalFormat);
                if(group.equals(GroupType.CUSTOMIZED_RNA)){    //CUSTOMIZED_RNA组
                    if(language.equals(com.genomics.ib.sampleReport.Constants.LANGUAGE_CN)){
                        label.setCellFeatures(addColumnList(ConstansCustomizedRNA.textBoxlist1));
                    }else{
                        label.setCellFeatures(addColumnList(ConstansCustomizedRNA.textBoxlist1_eng));
                    }
                }
                sheet.addCell(label);
                //结果说明
                sheet.addCell(new jxl.write.Label(24, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                
                //备注
                sheet.setColumnView(25, 25); //指定第列宽度
                sheet.addCell(new jxl.write.Label(25, i + 3, StringUtil.ObjectToString(smm.getSampleMxRemarks()), normalFormat));
                
                
                // Nanodrop(检测前处理)
                if (language.equals("chi")) {
                    text = "将样品在冰上融化后,离心并充分混匀,取适量样品进行检测。";
                }else{
                    text = " After the sample melted the ice, fully mixed and centrifuged, take appropriate samples for testing.";
                }
                
                //检测前处理
                sheet.addCell(new jxl.write.Label(26, i + 3, StringUtil.ObjectToString(text), normalFormat));
                //检测空白参照
                sheet.addCell(new jxl.write.Label(27, i + 3, "", normalFormat));
                //260280
                sheet.addCell(new jxl.write.Label(28, i + 3, StringUtil.ObjectToString(""), normalFormat));
                //260230
                sheet.addCell(new jxl.write.Label(29, i + 3, StringUtil.ObjectToString(""), normalFormat));
                // 备注
                sheet.addCell(new jxl.write.Label(30, i + 3, StringUtil.ObjectToString(""), normalFormat));
            
                
                //检测前处理
                sheet.addCell(new jxl.write.Label(31, i + 3, StringUtil.ObjectToString(text), normalFormat));
                
                //检测方法
                sheet.addCell(new jxl.write.Label(32, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //检测试剂盒
                sheet.setColumnView(33, 25); //指定第列宽度
                label = new jxl.write.Label(33, i + 3, StringUtil.ObjectToString(""), normalFormat);
                if(group.equals(GroupType.CUSTOMIZED_RNA)){    //CUSTOMIZED_RNA组
                    label.setCellFeatures(addColumnList(ConstansCustomizedRNA.textBoxlist2));
                }
                sheet.addCell(label);
                //sheet.addCell(new jxl.write.Label(33, i + 3, StringUtil.ObjectToString(smm.getSampleMxRemarks()), normalFormat));
                
                
                //稀释倍数
                sheet.addCell(new jxl.write.Label(34, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //检测浓度
                sheet.addCell(new jxl.write.Label(35, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //体积
                sheet.addCell(new jxl.write.Label(36, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //RIN
                sheet.addCell(new jxl.write.Label(37, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //28s/18s
                sheet.addCell(new jxl.write.Label(38, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //5s峰
                sheet.addCell(new jxl.write.Label(39, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //图谱基线
                sheet.addCell(new jxl.write.Label(40, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //rRNA contamination(%)
                sheet.addCell(new jxl.write.Label(41, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //片段分布
                sheet.addCell(new jxl.write.Label(42, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //备注
                sheet.setColumnView(43, 25); //指定第列宽度
                sheet.addCell(new jxl.write.Label(43, i + 3, StringUtil.ObjectToString(""), normalFormat));
                
                //样品ID
                
                //语言
                
                String sampleInfoID = (idList.get(i)==null ? "" : idList.get(i).toString());
                sheet.addCell(new jxl.write.Label(44, i + 3, sampleInfoID, lockFormat));
                sheet.addCell(new jxl.write.Label(45, i + 3, language, lockFormat));                    
            }
            
            sheet.setProtected(true);// 保护Sheet
            
            book.write();
            book.close();          //关闭输出流
        }
        

    如图所示:


      

     /**
         * @author 邓赢
         *定制化RNA导入
         */
        @SuppressWarnings("unchecked")
        private Map rnaSampleSave(Workbook wb, File fileName,
                HttpServletResponse response, HttpServletRequest request,
                String sampleGroup) throws Exception {    
            wb = Workbook.getWorkbook(fileName);
            Sheet sheet = wb.getSheet(0);
            
            Map validateResult = RNACustomizedExcelImportValidateUtil.validate(sheet, response);    //Excel导入验证
            if(validateResult!=null&&!validateResult.isEmpty()){
                return validateResult;
            }
            

        取值之前的读取execl,验证execl   在此不细说

        
            /**
             * 取得excel各单元格的数据
             */
            
            Map map = null;
            int rows = sheet.getRows();
            OperateSample  operateSample = null;
            List<String> existSampleIds = new ArrayList<String>();
            List<String> operateSampleIds = new ArrayList<String>();
            List<OperateSample> excelList = new ArrayList<OperateSample>();

            String section = (String) request.getSession().getAttribute("U_SECTION");
            String userName = (String) request.getSession().getAttribute("U_NAME");
            
            for(int i=3;i<rows;i++){
                String language = sheet.getCell(45,i).getContents().trim();
                //样品类型2
                String sampleStyleStr = sheet.getCell(23,i).getContents().trim();        
                operateSample = new OperateSample();
                
                String operateSampleId = UUID.randomUUID().toString();
                operateSample.setOperateSampleId(operateSampleId);
                
                 //样品组别
                operateSample.setSampleGroup(sampleGroup);    
                
                //实验室检测人
                operateSample.setOperateMan(sheet.getCell(6, i).getContents());    
                String date = sheet.getCell(7, i).getContents().trim();        
                
                //实验室检测日期
                operateSample.setOperateDate(DateUtil.stringToDate(date, "yyyyMMdd"));
                
                //报告撰写人
                operateSample.setReportMan(sheet.getCell(8, i).getContents());    
                
                //管数
                operateSample.setSampleConduit2100(sheet.getCell(16, i).getContents().trim());    
                
                //样品类型2
                operateSample.setSampleType(sampleStyleStr);
                
                //Nanodrop - 检测前处理
                operateSample.setNdpBeforeOperateMethod(sheet.getCell(26, i).getContents().trim());
                
                //Nanodrop - 检测空白参照
                operateSample.setNdpBlankReferce(sheet.getCell(27, i).getContents().trim());
                
                //Nanodrop OD260/280
                operateSample.setNdpOD260280(sheet.getCell(28, i).getContents().trim());
                
                //Nanodrop OD260/230
                operateSample.setNdpOD260230(sheet.getCell(29, i).getContents().trim());
                
                //Nanodrop - 备注
                operateSample.setNdpRemark(sheet.getCell(30, i).getContents().trim());    
                
                //Agilent2100/Caliper - 检测前处理
                operateSample.setBeforeOperateMethod2100(sheet.getCell(31, i).getContents().trim());    
                
                //N -- Agilent2100/Caliper - 检测方法
                operateSample.setName2100(sheet.getCell(32, i).getContents().trim());
                
                //Agilent2100/Caliper - 检测试剂盒
                operateSample.setKit2100(sheet.getCell(33, i).getContents().trim());    
                
                //Agilent2100/Caliper - 稀释倍数(×)
                operateSample.setDilutionRate2100(sheet.getCell(34, i).getContents().trim());    
                
                //Agilent2100/Caliper - 检测浓度
                String operateChroma = sheet.getCell(35, i).getContents().trim();    
                
                //Agilent2100/Caliper - 检测浓度
                operateSample.setChroma2100(operateChroma);            
                
                //Agilent2100/Caliper - 检测浓度
                operateSample.setOperateChroma(operateChroma);                                            
                
                String operateUl = sheet.getCell(36, i).getContents().trim();
                //Agilent2100/Caliper - 体积
                operateSample.setOperateUl(new BigDecimal(operateUl));    
                
                //Agilent2100 Caliper - RIN
                operateSample.setOperateRin(sheet.getCell(37, i).getContents().trim());    
                
                //28s/18s
                operateSample.setOperate28s18s(sheet.getCell(38, i).getContents().trim());    
                
                //N -- Agilent2100 Caliper - 5S峰
                operateSample.setFives2100(sheet.getCell(39, i).getContents().trim());        
                
                //N -- Agilent2100 Caliper - 图谱基线
                operateSample.setMapbase2100(sheet.getCell(40, i).getContents().trim());    
                
                //N -- Agilent2100 Caliper - 核糖体RNA比例(%)
                operateSample.setContaminationRna2100(sheet.getCell(41, i).getContents().trim());    
                
                //Agilent2100 Caliper - 片段分布
                operateSample.setInsertSize2100(sheet.getCell(42, i).getContents().trim());        
                
                //Agilent2100 Caliper - 备注    
                operateSample.setRemark2100(sheet.getCell(43, i).getContents().trim());        
                
                //样品ID
                String sampleId = sheet.getCell(44, i).getContents().trim();                            
                operateSample.setSampleInfoId(sampleId);                
                
                
                //语言
                operateSample.setLanguage(language);                                                
                
    //            double sampleCountDouble = 0;        //样品总量
                if(NumberUtils.isNumber(operateChroma) && NumberUtils.isNumber(operateSample.getDilutionRate2100())){
                    //检测浓度(ng/μL) * 稀释倍数(×) = 原液浓度(ng/μL)
                    BigDecimal a = new BigDecimal(operateChroma);
                    BigDecimal b = a.multiply(new BigDecimal(operateSample.getDilutionRate2100()));
                    b = DecimalFormatUtil.conversionNumber(4, b);
                    operateSample.setLiquidChroma(null==b?"0":b.toString());
                }
                // 总量(μg)= 原液浓度*样品体积
                if(StringUtils.isNotBlank(operateSample.getLiquidChroma()) && NumberUtils.isNumber(operateSample.getLiquidChroma())){
                    BigDecimal a = new BigDecimal(operateSample.getLiquidChroma());                                //原液浓度
                    BigDecimal b = a.multiply(operateSample.getOperateUl());                                    //总量(μg) = (原液浓度*样品体积)
                    BigDecimal sum = b.divide(new BigDecimal("1000"));                                            //总量(μg)/1000
                    //sampleCountDouble= sum.doubleValue();//吧BigDecimal转换成为double\

                    sum = DecimalFormatUtil.conversionNumber(4, sum);
                    operateSample.setOperateUg(null==sum?"0":sum.toString());
                
                }
                
                            
                operateSample.setInsertUserName(userName);                                                //当前操作人
                operateSample.setSection(section);                                                        //地区
                operateSample.setOperateResult(sheet.getCell(24, i).getContents().trim());//结果说明
                
                operateSample.setOperateRemark(sheet.getCell(25, i).getContents().trim());//备注(结果和备注都是手动输入)
                
                
                
                // Start BMS_2011_002, zane_chen, 2011-1-27
                List operateFlag = operateSampleService
                        .getOperateSampleBySampleId(sampleId);
                if (null != operateFlag && operateFlag.size() > 0) {
                    existSampleIds.add(sampleId);
                }
                operateSampleIds.add(operateSampleId);
                // End BMS_2011_002, zane_chen, 2011-1-27
                
                excelList.add(operateSample);
                
                
            }
            // 关闭Workbook流
            wb.close();

            response.setCharacterEncoding("UTF-8");
            String agent = request.getHeader("User-Agent");

            // 如果是IE浏览器
            if (agent.lastIndexOf("MSIE") >= 0) {
                response.setContentType("text/json;charset=utf-8");
            }
            
            operateSampleService.saveOperateSample(excelList);

            if (existSampleIds.size() > 0) {
                map = new HashMap();
                map.put("repeat", existSampleIds.toArray());
                map.put("operateSampleIds", operateSampleIds.toArray());
                return map;
            }        
            
            return null;
        }

    -----------------当然项目中必须得有jxl.jar  祝大家工作顺利------------------------

  • 相关阅读:
    【linux 爱好者群】程序猿的那些聊天记录
    开发技巧记录
    tcmalloc 内存分析
    mktime很慢就自己去实现一个吧
    bash变量常用技巧
    文本处理sed常用操作
    【TED】如何掌握你的自由时间
    vim粘贴代码问题
    工作方式的反思-20170319
    【one day one linux】find 用法详解小记
  • 原文地址:https://www.cnblogs.com/javawebstudy/p/2943894.html
Copyright © 2011-2022 走看看