springMVC创建excel模板

白天不懂YE的黑 发布于 2014/12/10 17:42
阅读 957
收藏 0

@那位先生 你好,想跟你请教个问题:我看了您的springMVC导出excel并弹出下载框的文章,写的非常详细,我现在需要用springMVC创建一个excel模板,只需要列名,不需要数据,请问该如何实现?

加载中
0
那位先生_
那位先生_

嗯,如果创建模版只是保存到文件中的话,可以这样做:

你将前台传过来的列名赋值给DownloadAct.download()方法中的String columnNames

然后将其传入到ExcelUtil.createWorkBook方法中

在这个方法里,把最后那个for循环去掉(用来填充数据的),差不多就可以了


我大致的修改了一下,没运行过,你试试


public String download(HttpServletRequest request,HttpServletResponse response) throws IOException{
        String fileName="excel文件";
        String columnNames[]=;//从前台传过来的列名
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ExcelUtil.createWorkBook(columnNames).write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response参数,可以打开下载页面
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
        ServletOutputStream out = response.getOutputStream();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(out);
            byte[] buff = new byte[2048];
            int bytesRead;
            // Simple read/write loop.
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (final IOException e) {
            throw e;
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
        return null;
    }

 public static Workbook createWorkBook(String columnNames[]) {
        // 创建excel工作簿
        Workbook wb = new HSSFWorkbook();
        // 创建第一个sheet(页),并命名
        Sheet sheet = wb.createSheet("sheet1");
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for(int i=0;i<columnNames.length;i++){
            sheet.setColumnWidth((short) i, (short) (35.7 * 150));
        }
 
        // 创建第一行
        Row row = sheet.createRow((short) 0);
 
        // 创建两种单元格格式
        CellStyle cs = wb.createCellStyle();
        CellStyle cs2 = wb.createCellStyle();
 
        // 创建两种字体
        Font f = wb.createFont();
        Font f2 = wb.createFont();
 
        // 创建第一种字体样式(用于列名)
        f.setFontHeightInPoints((short) 10);
        f.setColor(IndexedColors.BLACK.getIndex());
        f.setBoldweight(Font.BOLDWEIGHT_BOLD);
 
        // 创建第二种字体样式(用于值)
        f2.setFontHeightInPoints((short) 10);
        f2.setColor(IndexedColors.BLACK.getIndex());
 
//      Font f3=wb.createFont();
//      f3.setFontHeightInPoints((short) 10);
//      f3.setColor(IndexedColors.RED.getIndex());
 
        // 设置第一种单元格的样式(用于列名)
        cs.setFont(f);
        cs.setBorderLeft(CellStyle.BORDER_THIN);
        cs.setBorderRight(CellStyle.BORDER_THIN);
        cs.setBorderTop(CellStyle.BORDER_THIN);
        cs.setBorderBottom(CellStyle.BORDER_THIN);
        cs.setAlignment(CellStyle.ALIGN_CENTER);
 
        // 设置第二种单元格的样式(用于值)
        cs2.setFont(f2);
        cs2.setBorderLeft(CellStyle.BORDER_THIN);
        cs2.setBorderRight(CellStyle.BORDER_THIN);
        cs2.setBorderTop(CellStyle.BORDER_THIN);
        cs2.setBorderBottom(CellStyle.BORDER_THIN);
        cs2.setAlignment(CellStyle.ALIGN_CENTER);
        //设置列名
        for(int i=0;i<columnNames.length;i++){
            Cell cell = row.createCell(i);
            cell.setCellValue(columnNames[i]);
            cell.setCellStyle(cs);
        }
        return wb;
    }






那位先生_
那位先生_
回复 @白天不懂YE的黑 : 这个不清楚,用的比较少
白天不懂YE的黑
要对第一列(性别)的内容设置成下拉框:男、女,第二列(时间)格式设置成“yyyy-mm-dd”,该怎么设置?
那位先生_
那位先生_
回复 @白天不懂YE的黑 : 这个我就不清楚了,你可以看看Workbook 的API,看看有没有设置只读属性的方法
白天不懂YE的黑
您好,按照这个方法下载的模板为什么是受保护的?我只想让第一行的列名不可编辑,其他地方要能够编辑,该怎么处理?
返回顶部
顶部