zoukankan      html  css  js  c++  java
  • 数据导出/下载

    工具类:

    import java.io.IOException;
    import java.net.URLEncoder;
    
    import sun.misc.BASE64Encoder;
    
    public class FileUtils {
            /**
             * 下载文件时,针对不同浏览器,进行附件名的编码
             * 
             * @param filename
             *            下载文件名
             * @param agent
             *            客户端浏览器
             * @return 编码后的下载附件名
             * @throws IOException
             */
            public static String encodeDownloadFilename(String filename, String agent)
                    throws IOException {
                if (agent.contains("Firefox")) { // 火狐浏览器
                    filename = "=?UTF-8?B?"
                            + new BASE64Encoder().encode(filename.getBytes("utf-8"))
                            + "?=";
                    filename = filename.replaceAll("
    ", "");
                } else { // IE及其他浏览器
                    filename = URLEncoder.encode(filename, "utf-8");
                    filename = filename.replace("+"," ");
                }
                return filename;
            }
    }
    /**
         * @Description: 查询所有分区数据,使用附件形式下载
         * @return
         * @throws Exception
         *      
         */
        @Action("subareaAction_exportXls")
        public String exportXls() throws Exception {
            List<SubArea> list = subAreaService.findAll();
            //通过POI将数据写入excel文件
            HSSFWorkbook workbook = new HSSFWorkbook();  //空白的excel文件
            //创建标签页
            HSSFSheet sheet = workbook.createSheet("第一页分区数据");
            //创建行
            //创建标题行
            HSSFRow headRow = sheet.createRow(0);
            //创建单元格
            headRow.createCell(0).setCellValue("分区编号");
            headRow.createCell(1).setCellValue("关键字");
            headRow.createCell(2).setCellValue("辅助关键字");
            headRow.createCell(3).setCellValue("起始号");
            headRow.createCell(4).setCellValue("中止号");
            headRow.createCell(5).setCellValue("省市区");
            //创建数据行
            for (SubArea subArea : list) {
                HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
                dataRow.createCell(0).setCellValue(subArea.getId());
                dataRow.createCell(1).setCellValue(subArea.getKeyWords());
                dataRow.createCell(2).setCellValue(subArea.getAssistKeyWords());
                dataRow.createCell(3).setCellValue(subArea.getStartNum());
                dataRow.createCell(4).setCellValue(subArea.getEndNum());
                dataRow.createCell(5).setCellValue(subArea.getArea().getName());
            }
            //文件名的中文问题解决(导入工具类):
            String fileName = "分区数据.xls";
            HttpServletRequest request = ServletActionContext.getRequest();
            String agent = request.getHeader("User-Agent");
            fileName = FileUtils.encodeDownloadFilename(fileName, agent);
            
            //文件下载:一个流 两个头(文件MIME类型;文件打开方式(浏览器内部打开inline;附件形式下载--attachment)
            //从Servers项目下的web.xml中找xls对应的文件类型,比如搜索xls
            HttpServletResponse response = ServletActionContext.getResponse();
            response.setHeader("content-type", "application/vnd.ms-excel");
            response.setHeader("content-disposition", "attachment;fileName="+fileName);
            workbook.write(response.getOutputStream());
            return NONE;
        }
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/javaxiaoxin/p/7447469.html
Copyright © 2011-2022 走看看