zoukankan      html  css  js  c++  java
  • jxl将list导入到Excel中供下载

    jxl操作excel

        /**
         * 分隔符
         */
        private final static String SEPARATOR = "|";
        
        /**
         * 由List导出至指定的Sheet,带total行(最后一行)
         * @param wb   模板的workbook
         * @param sheetNum   第几个表单
         * @param targetFilePath 生成文件夹路径
         * @param l 内容list集合,以|分割的对象string集合
         * @param headInfoRows  头信息的行数
         * @param columnsLength  列数
         * @param remarkRowNumber 备注所在行
         * @param remark  备注
         * @return
         * @throws WriteException
         * @throws IOException
         * int
         */
        public static int exportExcelFromList(jxl.Workbook wb, int sheetNum,
                String targetFilePath, List<String> l, int headInfoRows,
                int columnsLength,int remarkRowNumber,String remark) throws WriteException, IOException {
            // 创建可写入的Excel工作薄对象
            WritableWorkbook wwb = null;
            int writeCount = 0;
    
            // 单元格样式
            // WritableFont bold = new
            // WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD);//设置字体种类和黑体显示,字体为Arial,字号大小为10,采用黑体显示
            WritableCellFormat normalFormat = new WritableCellFormat(
                    NumberFormats.TEXT);
            normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN,
                    jxl.format.Colour.BLACK);
            
            
            //设置字体;  
            WritableFont font = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.RED);  
            WritableCellFormat normalFormat_total = new WritableCellFormat(
                    font);
            normalFormat_total.setBorder(Border.ALL, BorderLineStyle.THIN,
                    jxl.format.Colour.BLACK);
    
            try {
                
                // 创建可写入的Excel工作薄对象
                wwb = jxl.Workbook.createWorkbook(new File(targetFilePath), wb);
                WritableSheet ws = wwb.getSheet(0);
                
                Label cellRemark = new Label(0, remarkRowNumber, remark,
                        normalFormat);
                ws.addCell(cellRemark);
    
                int row = l.size();
                int columns = columnsLength;
                String[] ary = new String[120];
                
                for (int i = 0; i < row; i++) {
                    ary = l.get(i).split("\" + SEPARATOR);
                    for (int j = 0; j < columns; j++) {
                        
                        if(i==row-1)
                        {
                            Label cell = new Label(j, i + headInfoRows, ary[j],
                                    normalFormat_total);
                            ws.addCell(cell);
                        }else
                        {
                            Label cell = new Label(j, i + headInfoRows, ary[j],
                                    normalFormat);
                            ws.addCell(cell);
                        }
                    }
                    writeCount++;
                }
                wwb.write();
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                if (wwb != null) {
                    wwb.close();
                }
    
            }
    
            return writeCount;
    
        }
        
        /**
         * 导出不需要合计行
         * @param wb
         * @param sheetNum
         * @param targetFilePath
         * @param l
         * @param headInfoRows
         * @param columnsLength
         * @param remarkRowNumber
         * @param remark
         * @return
         * @throws WriteException
         * @throws IOException
         */
        public static int exportExcelFromListNoTotal(jxl.Workbook wb, int sheetNum,
                String targetFilePath, List<String> l, int headInfoRows,
                int columnsLength,int remarkRowNumber,String remark) throws WriteException, IOException {
            // 创建可写入的Excel工作薄对象
            WritableWorkbook wwb = null;
            int writeCount = 0;
    
            // 单元格样式
            // WritableFont bold = new
            // WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD);//设置字体种类和黑体显示,字体为Arial,字号大小为10,采用黑体显示
            WritableCellFormat normalFormat = new WritableCellFormat(
                    NumberFormats.TEXT);
            normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN,
                    jxl.format.Colour.BLACK);
            
            
            //设置字体;  
            WritableFont font = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);  
            WritableCellFormat normalFormat_total = new WritableCellFormat(
                    font);
            normalFormat_total.setBorder(Border.ALL, BorderLineStyle.THIN,
                    jxl.format.Colour.BLACK);
    
            try {
                
                // 创建可写入的Excel工作薄对象
                wwb = jxl.Workbook.createWorkbook(new File(targetFilePath), wb);
                WritableSheet ws = wwb.getSheet(0);
                
                Label cellRemark = new Label(0, remarkRowNumber, remark,
                        normalFormat);
                ws.addCell(cellRemark);
    
                int row = l.size();
                int columns = columnsLength;
                String[] ary = new String[120];
                
                for (int i = 0; i < row; i++) {
                    ary = l.get(i).split("\" + SEPARATOR);
                    for (int j = 0; j < columns; j++) {
                        
                        
                            Label cell = new Label(j, i + headInfoRows, ary[j],
                                    normalFormat);
                            ws.addCell(cell);
                    }
                    writeCount++;
                }
                wwb.write();
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                if (wwb != null) {
                    wwb.close();
                }
    
            }
    
            return writeCount;
    
        }
    exportList为List<String>,生成方式为遍历每个对象并将所有属性以|串起来
            List<DetectorHistory> dfList = service.getList();   //获取对象集合
            
            List<String> exportList = new ArrayList<String>();
            StringBuffer sbList = new StringBuffer();
            if (dfList!=null&&dfList.size()>0) {
                for (DetectorHistory ele:dfList) {
                    sbList.delete(0, sbList.length());
              //加入|
    //加入属性
    ... exportList.add(sbList.toString()); } }
    controller层
            //模板所在文件夹路径
            String tempPath = req.getSession().getServletContext()
            .getRealPath(CommonValue.FileTemplatePath);
            //生成文件所在文件夹路径
    String exportFilePath = req.getSession().getServletContext()
            .getRealPath(CommonValue.ExportFilePath);
            //导出文件名
            String exportFileName = "";
            //模板文件名,事先生成好以及头文件情况
            String targetFileName = "ReportTmp_detectorHistory.xls";
            
            //生成的行数
            int operatorCount = 0; 
            
            JSONObject jsonObject = new JSONObject();
            try {
                // 文件导出
                if (exportList.size() > 0) {
                    //生成文件名
                    exportFileName = "detectorHistory" + CommonTool.getNowDateStr2()
                            + "." + targetFileName.split("\.")[1];
                    //利用模板生成Workbook
                    Workbook rw = jxl.Workbook.getWorkbook(new File(tempPath
                            + File.separator + targetFileName));
    
                    // 写入备注文件
                    String remarkInfo = "统计时间:" + CommonTool.getNowDateStr2() + "    金额单位:元";
                    
                    //rw为模板workbook,0为sheetnum,其次为导出文件路径,exportList为|分割属性的string对象集合,4为头的行数,14为列数,1为备注所在行(从0开始),remarkinfo为备注所在行的信息
                    operatorCount = ExcelHelper_ChargeSituation.exportExcelFromListNoTotal(rw,
                            0, exportFilePath + File.separator + exportFileName,
                            exportList, 4, 14, 1, remarkInfo);
    
                }
                
                jsonObject.put("operatorCount", operatorCount);  //返回操作条数
                jsonObject.put("exportFilePath", CommonValue.ExportFilePath
                        + File.separator + exportFileName);  //返回生成的文件路径
                
                if(jsonObject.get("operatorCount")!=null&&Integer.valueOf(jsonObject.get("operatorCount").toString())<=0)
                {//当生成内容条数为0时
                    jsonObject.put("rtnCode", "404");
                }else
                {
                    jsonObject.put("rtnCode", "0");
                }
            } catch (BiffException e) {
                e.printStackTrace();
            } catch (WriteException e) {
                e.printStackTrace();
            }finally{
                
            }
            
            res.resetBuffer();
            res.setContentType("text/html;charset=UTF-8");
            res.getOutputStream().write(jsonObject.toString().getBytes("utf-8"));
            res.getOutputStream().flush();
            return null; 
  • 相关阅读:
    《编写高质量代码》读书笔记一
    [转] Markdown
    皓首穷经还是及时行乐!
    有用的iOS网站地址
    [股票] 入市
    https原理 就是两次http
    数据预处理
    重新建立程序员的应对方式
    ROC曲线手画
    机器学习的总结
  • 原文地址:https://www.cnblogs.com/aeolian/p/9187658.html
Copyright © 2011-2022 走看看