JavaWeb 实现Excel 的导入导出

开发环境:
myeclipse10.4

    /**
      导出Excel  文件
    */
    public String exportDictEntryData(DictionaryManagedForm fm,
            HttpServletRequest request, HttpServletResponse response) {
        String tempFile;
        // 导出为Excel数据
        try {
            //查询数据已经存在的数据
            List<DictionaryManagedDomain> dictDomainList = new ArrayList<DictionaryManagedDomain>();
            //赋值条件  
            fm.getDomain().setDictionariesId(fm.getDomain().getId());
            dictDomainList = dictionaryManagedDao.getExportDictEntryList(fm.getDomain());
            //如果未查询都数据,直接返回
            if(dictDomainList.size()==0){
                return "";
            }
            // 第一步,创建一个webbook,对应一个Excel文件
            HSSFWorkbook wb = new HSSFWorkbook();
            // 第二步,并设置excel样式
            HSSFCellStyle titleStyle = wb.createCellStyle();//表头样式
            titleStyle.setWrapText(true);//自动换行
            titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
            titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
            titleStyle.setRightBorderColor(HSSFColor.BLACK.index);//边框颜色
            titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
            titleStyle.setRightBorderColor(HSSFColor.BLACK.index);
            titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
            titleStyle.setRightBorderColor(HSSFColor.BLACK.index);
            titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
            titleStyle.setBottomBorderColor(HSSFColor.BLACK.index);

            HSSFCellStyle titleStyle1 = wb.createCellStyle();//大表头的样式1
            titleStyle1.setWrapText(true);//自动换行
            titleStyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            titleStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

            HSSFCellStyle titleStyle2 = wb.createCellStyle();//大表头的样式2
            titleStyle2.setWrapText(true);//自动换行
            titleStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            titleStyle2.setAlignment(HSSFCellStyle.ALIGN_LEFT);//水平居左

            HSSFCellStyle contentStyle = wb.createCellStyle();//数据样式
            contentStyle.setWrapText(true); //自动换行
            contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居左
            contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
            contentStyle.setRightBorderColor(HSSFColor.BLACK.index);//边框颜色
            contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
            contentStyle.setRightBorderColor(HSSFColor.BLACK.index);
            contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
            contentStyle.setRightBorderColor(HSSFColor.BLACK.index);
            contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
            contentStyle.setBottomBorderColor(HSSFColor.BLACK.index);

            HSSFFont titleFont = wb.createFont();//表头字体样式
            titleFont.setFontName("宋体");
            titleFont.setFontHeightInPoints((short) 11);//设置字体大小
            titleFont.setBoldweight((short)800);

            HSSFFont contentFont = wb.createFont();//数据字体样式
            contentFont.setFontName("宋体");
            contentFont.setFontHeightInPoints((short) 9);//设置字体大小

            HSSFFont titleFont1 = wb.createFont();//表头字体样式
            titleFont1.setFontName("宋体");
            titleFont1.setFontHeightInPoints((short) 11);//设置字体大小
            titleFont1.setBoldweight((short)800);

            titleStyle.setFont(titleFont);
            titleStyle1.setFont(titleFont1);//大表头的样式
            titleStyle2.setFont(titleFont1);//大表头的样式
            contentStyle.setFont(contentFont);

            //TODO:模板下载
            HSSFSheet tableSheet;
                tableSheet=wb.createSheet("字典项数据");
                //设置每列宽度
                tableSheet.autoSizeColumn((short) 0, true);
                tableSheet.setColumnWidth((short) 0, 20 * 256); 
                tableSheet.autoSizeColumn((short) 1, true);
                tableSheet.setColumnWidth((short) 1, 40 * 256); 
                tableSheet.autoSizeColumn((short) 2, true);
                tableSheet.setColumnWidth((short) 2, 20 * 256); 
                tableSheet.autoSizeColumn((short) 3, true);
                tableSheet.setColumnWidth((short) 3, 20 * 256); 

                //第四步:将数据放入相应的单元格
                HSSFRow targetTableRow ;
                HSSFCell targetTableCell;
                //数据行  创建第0行
                int targetTableI=0;//execl行数
                    //创建表头行
                    targetTableRow = tableSheet.createRow((int) (targetTableI));
                    targetTableCell = targetTableRow.createCell((short) 0);
                    targetTableCell.setCellValue("字典项编码");
                    targetTableCell.setCellStyle(titleStyle);

                    targetTableCell = targetTableRow.createCell((short) 1);
                    targetTableCell.setCellValue("字典项名称");
                    targetTableCell.setCellStyle(titleStyle);
                //动态插入数据
                for (int i = 0; i <dictDomainList.size(); i++) {
                    targetTableRow = tableSheet.createRow((int) i + 1);  
                         DictionaryManagedDomain  dictDomain = new DictionaryManagedDomain();
                         dictDomain = dictDomainList.get(i);
                        // 第四步,创建单元格,并设置值  
                         targetTableRow.createCell((short) 0).setCellValue(dictDomain.getDictionariesEntryCode());  
                         targetTableRow.createCell((short) 1).setCellValue(dictDomain.getDictionariesEntryName());     
                }   

            try{
                long times=System.currentTimeMillis();//为了防止多人同时操作导出,所以生成时间的临时文件
                tempFile="C://"+times+".xls";//临时路径
                FileOutputStream fout = new FileOutputStream(tempFile);
                wb.write(fout);
                fout.close();           
                System.out.println("ok..");
                return tempFile;
            }catch (Exception e){
                System.out.println("导出数据出错");
                e.printStackTrace();
                return "";
            }
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        return "";
    }

//导入Excel

/**
     * 导入新增的表格数据
     */
    @Override
    public JSONObject importDictEntryForAdd(DictionaryManagedForm fm) {

        JSONObject  importJson = new JSONObject();
        List<DictionaryManagedDomain> errorList = new ArrayList<DictionaryManagedDomain>();//存放错误信息的列表
        String flag="0";
        //获取文件路径,创建写入流
        InputStream in = null;
        try {
            in =fm.getExcelImportFile().getInputStream();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        //导入的文件
        try{
            Workbook wk = Workbook.getWorkbook(in);//定义工作空间
            Sheet[] a=wk.getSheets();
            Sheet sh = a[0];//定义工作簿
            int toRowNum = sh.getRows();//行数
            Cell dictCodeCell=null;//第一列
            Cell dictNameCell=null;//第二列
            DictionaryManagedDomain domain;
            List<String> dictEntryCodes=new ArrayList<String>();//用来判断重复的字典项编码
                List<DictionaryManagedDomain> list= new ArrayList<DictionaryManagedDomain>();
                    for(int i = 1 ; i < toRowNum ; i ++){//分行,批行导入
                        domain = new DictionaryManagedDomain();
                        dictCodeCell = sh.getCell(0, i);
                        dictNameCell = sh.getCell(1, i);

                        String dictEntryCode=dictCodeCell.getContents();//代表字典编码
                        String dictEntryName=dictNameCell.getContents();//代表字典项名称


                    if(dictEntryCode.trim() != null && !dictEntryCode.trim().equals("")){
                    if(dictEntryCodes.contains(dictEntryCode.trim())){//疾病编码重复
                        domain.setErrors("execl的第"+(i+1)+"行,字典项编码:"+dictEntryCode.trim()+",字典项名称:"+dictEntryName.trim()+",重复导入!");
                        errorList.add(domain);
                    } else {
                            domain.setDictionariesEntryCode(dictEntryCode);
                            domain.setDictionariesEntryName(dictEntryName);
                            domain.setId(fm.getDomain().getId());
                            list.add(domain);
                                }
                        }else {
                            //如果字典为空
                            domain.setErrors("execl的第"+(i+1)+"行,字典编码不能为空!");
                            errorList.add(domain);
                            }
                        }

                        //进入数据插入
                        if(list.size()==0){
                            //导入的excel为空
                            flag="-2";//导入excel无有效数据
                        }else if(list.size()>0){
                            //导入表格数据
//                          int sumNum = dictionaryManagedDao.importDictEntryInfoFromExcel(list);
                            flag = String.valueOf(list.size());
                        }
                        importJson.put("excelData", list);

                }catch(Exception e){
                    e.printStackTrace();
                    flag="0";
                }
                importJson.put("flag", flag);//导入数据行数
                importJson.put("errorList", errorList);//导入数据行数

        return importJson;
    }
参考文档:
针对不同 POI 通用导出Excel(.xls,.xlsx) http://blog.csdn.net/houxuehan/article/details/50960259
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老王学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值