【项目实战】导出多个Exce文件l到制定目录

//Controller层:/*start---------------------------------------导出Excel接口[需要3个参数]-------------------------------------------------------------*/    

    /**
     * 功能描述:【导出Excel接口】
     * 创建者:shiyanjun
     * @param columns    表头
     * @param querySql    查询SQL
     * @param filePath    文件目录
     * @param request
     * @param response
     */
    @RequestMapping(value = "exportExcelApi", method = RequestMethod.GET)
    @ResponseBody
    public void exportExcelApi(    @RequestParam (value = "columns",defaultValue = "")String columns,
                                @RequestParam(value = "querySql",defaultValue = "") String querySql,
                                @RequestParam(value = "filePath",defaultValue = "") String filePath,
                                HttpServletRequest request,HttpServletResponse response) {

        String fileName = "档案信息";//文件名称
        columns = "ID,EHR_ID,EHR_CODE,INNER_CODE,PERSON_NAME,GENDER";//模拟表头
        querySql = "SELECT ID,EHR_ID,EHR_CODE,INNER_CODE,PERSON_NAME,GENDER FROM EHR_BASE EB WHERE EB.GENDER = ‘1‘";//模拟查询SQL
        String basePath = ApplicationContextUtils.getBasePath();//获取项目根路径
        filePath = basePath + "exportExcelApi\\";
        String dateName = "20140220\\";//日期文件夹
        String tabName = "EHR\\";//表名文件夹
        filePath = filePath + dateName + tabName;
        try {
            exportApiService.importExcelApi(querySql, columns, fileName, filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

/*end---------------------------------------导出Excel接口[需要3个参数]-------------------------------------------------------------*/
/*start---------------------------------------导出Excel接口[需要3个参数]-------------------------------------------------------------*/
//Service层

    /**
     * 功能描述:【导出Excel接口】
      * @param querySql
     * @param columnsStr
     * @param fileName
     * @param outStream
     * @throws Exception
     */
    public void importExcelApi(String querySql,String columnsStr,String fileName,String filePath)throws Exception{
        FileOutputStream outStream = null;
        //根据SQL语句查询要导出的数据
        List<Map<String,Object>> rowData = jdbcTemplate.queryForList(querySql);
        //要导出的表头
        List<ExportColumnDto> columns=new ArrayList<ExportColumnDto>();
        if(columnsStr != null){
            String[] arr = columnsStr.split(",");
            if(arr != null){
                for (String str : arr) {
                    if(str != null){
                        columns.add(new ExportColumnDto(str, str));
                    }
                }
            }
        }

        int count = rowData.size();//数据总条数
        int rows = 1500;//每个Excel文件中要显示的数据条数
        int num = 1;//初始化要导出的Excel文件数

        //根据count和rows来计算实际导出的文件个数
        if(count >= rows){
            if(count % rows == 0){
                num = count/rows;
            }else{
                num = count/rows + 1;
            }
        }
        List<Map<String,Object>> rowDataSub = null;//从rowData中取出指定条数(rows)的数据存到rowDataSub中

        File file = new File(filePath);
        //如果文件夹不存在则创建
        if(!file.exists() && !file.isDirectory()){
//            System.out.println("//不存在");
            file.mkdirs();
        }/* else {
            System.out.println("//目录存在");
        }*/

        for (int i = 0; i < num; i++) {
            try {
                outStream = new FileOutputStream(filePath + (i+1) + ".xls");//创建文件输出流,指定导出的文件路径
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            if(i == (num - 1)){
                rowDataSub = rowData.subList(i*rows, count);//最后一个文件
            }else{
                rowDataSub = rowData.subList(i*rows, (i+1)*rows);
            }

            try {
                ExportApiService.printExcelApi(columns, rowDataSub, fileName, outStream);//导出Excel
            } catch (Exception e) {
                logger.error("导出Excel异常", e);
            } finally {
                try {
                    if (outStream != null) {
                        outStream.flush();
                        outStream.close();
                    }
                } catch (Exception e1) {
                }
            }
        }

    }

    /**
     * 【自定义查询导出到Excel】
     * @param columns List<ExportColumnDto> 列设置集合
     * @param rowData 数据集合
     * @param filename 自定义查询名称
     * @param filePath 导出文件临时存放路径
     * @return
     */
    public static void printExcelApi(List<ExportColumnDto> columns,List<Map<String,Object>> rowData,String fileName,FileOutputStream outStream)throws Exception{
        if(rowData == null || rowData.size() < 1) throw  new RuntimeException("数据集合为空");
        else if(columns == null || columns.size() < 1) throw  new RuntimeException("导出列集合集合为空");
        else{
            WritableWorkbook writableWorkbook=Workbook.createWorkbook(outStream); // 创建工作薄
            WritableSheet writableSheet = writableWorkbook.createSheet(fileName, 0);  // 创建工作表
            //设置标题格式
            WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
            WritableCellFormat headerFormat = new WritableCellFormat(headerFont);
//                headerFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
//                headerFormat.setAlignment(Alignment.CENTRE);//水平对齐
            headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            //设置表头格式
            WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
            WritableCellFormat titleFormat = new WritableCellFormat(titleFont);
//                titleFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
//                titleFormat.setAlignment(Alignment.CENTRE);
            WritableFont dateFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
            //设置显示数据格式
            WritableCellFormat dataFormat = new WritableCellFormat(dateFont);
//                dataFormat.setAlignment(Alignment.CENTRE);
            dataFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            writableSheet.mergeCells(0, 0, columns.size()-1, 0); // 合并第一行的单元格(合并了titleList.size 个单元格)
            //添加标题
            writableSheet.addCell(new Label(0,0,fileName,headerFormat));//第一个0 表示 列  ,第二个0 表示行, headerFormat 格式化EXCEL
            //添加title
            String descript="";
            for(int i=0;i<columns.size();i++){
                descript=columns.get(i).getDescription();
                writableSheet.addCell(new Label(i,1,descript,titleFormat));
            }
            //填充数据
            Object value=null;
            String showValue="";
            String name="";
            Method method=null;

          //初始化字段转换函数
            Map<String,Method> methodCache=new HashMap<String,Method>();
            Class convert=FieldConvert.class;
            for(int j=0;j<columns.size();j++){
                 String convertName=columns.get(j).getConvertName();
                 try{
                     method=convert.getMethod("convert"+convertName, String.class);
                     if(null != method) methodCache.put(convertName, method);
                 }catch(NoSuchMethodException ne){}
            }

            for(int k=0;k<rowData.size();k++){
                for(int j=0;j<columns.size();j++){
                    name=columns.get(j).getName();
                    value=rowData.get(k).get(name);
                    showValue=value == null ? "":String.valueOf(value);
                    if("".equals(showValue.trim()) || "-1".equals(showValue.trim()) ){
                        showValue="不详";
                    }else{
                        String convertName=columns.get(j).getConvertName();
                        if(methodCache.containsKey(convertName)){
                            showValue=methodCache.get(convertName).invoke(convert, value).toString();
                        }
                    }
                    writableSheet.addCell(new Label(j,k+2,showValue,dataFormat));
                }
            }

            writableWorkbook.write();
            writableWorkbook.close();
        }

    }

/*end---------------------------------------导出Excel接口[需要3个参数]-------------------------------------------------------------*/
时间: 2024-10-09 21:19:08

【项目实战】导出多个Exce文件l到制定目录的相关文章

【java项目实战】dom4j解析xml文件,连接Oracle数据库

简介 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方,我们还是看一下官方给出的解释.如下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT等语言的库.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准. 特点 dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例

【SSH网上商城项目实战13】Struts2实现文件上传功能

上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说.为此,这篇文章详细介绍一下Struts2实现文件上传的功能. 1. 封装文件信息 我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件.文件类型和文件名.针对我们要传的图片,我们新建一个Model如下: public class FileImage { private File file; private String contentType; private String fi

项目--简单导出CSV文件

//导出 protected void BtnOutPut_Click(object sender, EventArgs e) { //角色 InitialRoles(); DataTable dt = DBClass.GetDataTable(string.Format(@"SELECT * FROM {0} Order By SN desc", View(Where))); StringWriter sw = new StringWriter(); //4S店不能看到总部价格等相关

【无私分享:ASP.NET CORE 项目实战(第七章)】文件操作 FileHelper

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在程序设计中,我们很多情况下,会用到对文件的操作,在 上一个系列 中,我们有很多文件基本操作的示例,在Core中有一些改变,主要是我们常用的Server.MapPath()不存在了,不知道后续的版本会不会有,在这里,我们只能自己封装方法去实现.今天,我们就对一些基本的操作写了一个 FileHelper 类,供大家探讨.在此要感谢以为不愿意透漏姓名的大神的帮助:@YINYEJUN 获取文件的绝对路径  在以前的操作中,这个应

Android项目实战(三十一):异步下载apk文件并安装(非静默安装)

原文:Android项目实战(三十一):异步下载apk文件并安装(非静默安装) 前言: 实现异步下载apk文件 并 安装.(进度条对话框显示下载进度的展现方式) 涉及技术点: 1.ProgressDialog   进度条对话框  用于显示下载进度 2.AsyncTask         异步任务的使用    耗时操作不能再主线程中进行      安卓开发_浅谈AsyncTask 3.File                   文件相关操作    将文件的字节数据生成文件 4.自动打开安装应用操

基于Hadoop离线大数据分析平台项目实战

基于Hadoop离线大数据分析平台项目实战  课程学习入口:http://www.xuetuwuyou.com/course/184 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介: 某购物电商网站数据分析平台,分为收集数据.数据分析和数据展示三大层面.其中数据分析主要依据大数据Hadoop生态系统常用组件进行处理,此项目真实的展现了大数据在企业中实际应用. 课程内容 (1)文件收集框架 Flume ①Flume 设计架构.原理(三大组件) ②Flume 初步使

项目实战,LANMP+NGINX+SQUID

项目用到的服务: LAMP+nginx+squid+代理MYSQL+rsync 搭建LAMP平台,是目前非常流行的Web开发平台,成本低廉,扩展能力好,灵活,安全性高, 深受企业和管理人员的喜爱,容易形成整体的系统结构     nginx实现了整体网络的负载均衡,还以搭建存放一些静态网页,提高客户端对静态网页的访问请求时间     最后通过squid做整个网络的代理人,提高网站的访问都提高速度(缓冲服务),并且提高网络的安全性     myslq主主结构为整体网络数据作实时备份,然后通过mysl

Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器

最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外的. 周末用了2天时间,研究一下官方的例子和雨松的相关博客2篇,总算是搞定了这件事情,开心! 痛苦的前传: Unity3D导出为XCode工程后,有如下任务需要做 Plist 文件中 <key>CFBundleDevelopmentRegion</key> 中文 <string&

【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebFor

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的Demo需求. 按照既定的要求,我们的API