精华内容
下载资源
问答
  • 偶将最近写了两个导出excel的方法,第一个是面向过程的思路,就是在指定的单元格写入指定的值,如下: /** *负责数据导入到EXCEL * * @param realPath * EXCEL表格存放的绝对路径 * @param sheetname * * @param ...

    偶将最近写了两个导出excel的方法,第一个是面向过程的思路,就是在指定的单元格写入指定的值,如下:
    /**
    *负责数据导入到EXCEL
    *
    * @param realPath
    * EXCEL表格存放的绝对路径
    * @param sheetname
    *
    * @param xLocation
    * EXCEL表格的行索引,从1开始
    * @param yLocation
    * EXCEL表格的列索引,从1开始
    * @param value
    * 需要导入的数据
    *
    */
    public void modifyExcel(String realPath,String sheetname,int xLocaion,int yLocation,String value){
    POIFSFileSystem fs=null;
    HSSFWorkbook wb=null;
    try {
    File file=new File(realPath);
    if(file.exists()){
    fs = new POIFSFileSystem(new FileInputStream(realPath));
    wb=new HSSFWorkbook(fs);
    HSSFSheet s=wb.getSheetAt(0);
    //函数处理时横纵坐标从索引0开始
    HSSFRow row=s.getRow(xLocaion-1);              
    HSSFCell cell=null;
    if(row!=null){
    cell=row.getCell(yLocation-1);
    if(cell==null){
    cell=row.createCell(yLocation-1);
    }
    }else{
    row=s.createRow(xLocaion-1);
    cell=row.createCell(yLocation-1);
    }

    cell.setCellValue(value);

    }else{
    wb=new HSSFWorkbook();
    HSSFSheet s=wb.createSheet();
    wb.setSheetName(0, sheetname);
    HSSFRow row=s.createRow(xLocaion-1);
    HSSFCell cell=row.createCell(yLocation-1);
    cell.setCellValue(value);
    }
    FileOutputStream fos=new FileOutputStream(realPath); 
    wb.write(fos);
    fos.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();

     
    }

    第二种就是运用了对象,以对象为单位写入数据,即一个对象的所有属性在一行列出,有多少个对象就有多少行,此方法比较适用于个人信息导出之类的应用,至于导出属性的顺序问题在导出对象的实体类内部改动下即可:
    /**
    *负责数据导入到EXCEL
    *
    * @param realPath
    * EXCEL表格存放的绝对路径
    * @param sheetname
    *
    * @param users
             *                              需要导出到excel表的对象数组
    */
    public  void outputExcel(String realPath,String sheetname,UserModel[] users){
    FileOutputStream fos;
    try {
    File file=new File(realPath);

    fos = new FileOutputStream(file, true);
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet s=wb.createSheet();
    wb.setSheetName(0, sheetname);
    HSSFRow[] rows=new HSSFRow[users.length];
    HSSFCell[][] cells=new HSSFCell[20][20];
    for (int i=0; i<users.length;i++) { // 相当于excel表格中的总行数
    PropertyDescriptor[] descriptors=getAvailablePropertyDescriptors(users[i]);
    rows[i]=s.createRow(i);
    for (int j=0; descriptors!=null&&j<descriptors.length;j++) {
    java.lang.reflect.Method readMethod = descriptors[j]
    .getReadMethod();
    cells[i][j]=rows[i].createCell(j);
    Object value=readMethod.invoke(users[i], null);
    cells[i][j].setCellValue(value.toString());

    }

    }
    wb.write(fos);
    fos.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }

    }

    展开全文
  • java动态导出Excle模板

    2019-11-26 12:26:37
    实际开发中很多时候都需要导出Excle模板文件,而且是根据不同的需求需要导出不同的模板,在这里简单记录一下使用java实现普通的动态Excle模板导出功能。 1.添加maven依赖: <dependency> <groupId>...

    实际开发中很多时候都需要导出Excle模板文件,而且是根据不同的需求需要导出不同的模板,在这里简单记录一下使用java实现普通的动态Excle模板导出功能。

    1.添加maven依赖:

    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi</artifactId>
    			<version>3.8</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml</artifactId>
    			<version>3.8</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml-schemas</artifactId>
    			<version>3.8</version>
    		</dependency>
    
    1. 编写导出工具类:
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.Font;
    import org.apache.poi.ss.usermodel.RichTextString;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.ss.util.CellRangeAddressList;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFDataValidation;
    import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint;
    import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFRichTextString;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class ExcelDownloadUtil {
    
        /**
         * 标题单元格默认长度
         */
        private static final int DEFAULT_COLUMN_SIZE = 20;
    
        /**
         * EXCEL含有下拉列表默认受影响行数
         */
        private static final int SELECT_HEIGHT = 300;
    
        /**
         * 用于动态生成导出模板
         * 
         * @param response 用于下载
         * @param sheetName 工作表空间名称
         * @param columnNames
         * @param title Excle模板标题,不需要则传null
         * @throws Exception
         */
        public static void getExcelTitleTemplate(HttpServletResponse response, String sheetName,
            List<Map<String, Object>> columnNames, String title) throws Exception {
            Workbook workBook = new XSSFWorkbook();
            // 生成一个表格
            Sheet sheet = workBook.getSheet(sheetName);
            if (sheet == null) {
                sheet = workBook.createSheet(sheetName);
            }
            // 最新Excel列索引,从0开始
            int lastRowIndex = sheet.getLastRowNum();
            if (lastRowIndex > 0) {
                lastRowIndex++;// 如果已经存在了工作表空间则从下一行开始
            }
            if (!StringUtils.isBlank(title)) {
                // 如果需要合并单元格显示一个大的title
                Row titleRow = sheet.createRow(lastRowIndex);
                //参数说明:1.起始行号 2.终止行号 3.起始列号 4.终止列号
                //这个需要实际情况自定义,我这里测试就写死0 0 0 4 了
                CellRangeAddress region = new CellRangeAddress(0, 0, 0, 4);
                sheet.addMergedRegion(region);// 合并单元格
                Cell cellTiltle = titleRow.createCell(0);
                // 设置样式
                cellTiltle.setCellStyle(createCellHeadStyle(workBook, false));
                // 单元格设置值
                cellTiltle.setCellValue(title);
                lastRowIndex++;
            }
    
            // 设置表格默认列宽度
            sheet.setDefaultColumnWidth(DEFAULT_COLUMN_SIZE);
            // 产生表格表头列标题行
            Row row = sheet.createRow(lastRowIndex);
            for (int i = 0; i < columnNames.size(); i++) {
                Map<String, Object> map = columnNames.get(i);
                Cell cell = row.createCell(i);
                // 设置单元格类型
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                // 设置单元格样式
                cell.setCellStyle(createCellHeadStyle(workBook, (boolean)map.get("isSpecial")));
                // 填充表头文本
                RichTextString text = new XSSFRichTextString((String)map.get("columnname"));
                cell.setCellValue(text);
                String[] selectValue = (String[])map.get("selectValue");
                // 如果需要有下拉列表则显示
                if (selectValue != null && selectValue.length != 0) {
                    // 准备下拉列表数据
                    CellRangeAddressList regions = new CellRangeAddressList(1, SELECT_HEIGHT, i, i);
                    // 创建下拉列表数据
                    XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet);
                    XSSFDataValidationConstraint dvConstraint =
                        (XSSFDataValidationConstraint)dvHelper.createExplicitListConstraint(selectValue);
                    XSSFDataValidation validation = (XSSFDataValidation)dvHelper.createValidation(dvConstraint, regions);
                    validation.setSuppressDropDownArrow(true);
                    validation.setShowErrorBox(true);
                    sheet.addValidationData(validation);
                }
            }
            OutputStream outputStream = response.getOutputStream();
            workBook.write(outputStream);// HSSFWorkbook写入流,下载
            outputStream.flush();// 刷新流
            outputStream.close();// 关闭流
    
        }
    
        /**
         * 创建单元格表头样式
         *
         * @param workbook 工作薄
         * @param bgColorYellow true-背景使用黄色
         * @return
         */
        private static CellStyle createCellHeadStyle(Workbook workbook, boolean bgColorYellow) {
            CellStyle style = workbook.createCellStyle();
            // 设置边框样式
            style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
            style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
            style.setBorderRight(XSSFCellStyle.BORDER_THIN);
            style.setBorderTop(XSSFCellStyle.BORDER_THIN);
            // 设置对齐样式
            style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            // 生成字体
            Font font = workbook.createFont();
            // 表头样式
            style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            // 如果是true,则显示黄色背景色
            style.setFillForegroundColor(bgColorYellow ? HSSFColor.YELLOW.index : HSSFColor.GREY_25_PERCENT.index);
            font.setFontHeightInPoints((short)12);
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
            // 把字体应用到当前的样式
            style.setFont(font);
            return style;
        }
    
        /**
         * 得到有效的Excel文件列有效数据
         * 
         * @param xianShiList
         * @param biTianList
         * @param jiGouId
         * @return
         */
        public static List<Map<String, Object>> getColumnNames(List<String> xianShiList, List<String> biTianList,
            String condition) {
            List<Map<String, Object>> columnNames = new ArrayList<Map<String, Object>>();
            Map<String, Object> resultMap = null;
            List<String> selectValues = null;
            boolean validaBiTianList = biTianList != null && !biTianList.isEmpty();
            for (int i = 0, len = xianShiList.size(); i < len; i++) {
                resultMap = new HashMap<String, Object>();
                // 得到下载的字段名称
                String columnName = xianShiList.get(i);
                // 判断该字段是否是字典类型,如果是字典类型的字段则需要显示下拉列表
                // 我这里用了一个枚举类涵盖所有的可能涉及的下载字段,每次判断一下是否需要获取字典值
                FieldEnum field = FieldEnum.getFieldEnum(columnName);
                if (field != null) {
                    resultMap.put("columnname", columnName);
                    // 判断字段是否是必填字段
                    if (validaBiTianList && biTianList.contains(columnName)) {
                        resultMap.put("isSpecial", true);// 如果是必填则标识为true
                    } else {
                        resultMap.put("isSpecial", false);
                    }
                    if (field.isZiDian()) {// 如果是字典值
                        // 获取字典内容
                        // ZiDianEntity ziDian = ZiDianUtil.getZiDian(columnName, condition);
                        // List<ZiDianZhiEntity> ziDianZhiEntityList = ziDian.getZiDianZhiList();
                        selectValues = new ArrayList<>();
                        // 添加字典值到下拉列表
                        /*for (int j = 0, lenx = ziDianZhiEntityList.size(); j < lenx; j++) {
                            selectValues.add(ziDianZhiEntityList.get(j).getZiDianZhi());
                        }*/
                        // 这里为了测试直接写死了
                        selectValues.add("男");
                        selectValues.add("女");
                        selectValues.add("未知");
                        resultMap.put("selectValue", selectValues.toArray(new String[selectValues.size()]));
                    }
                    columnNames.add(resultMap);
                }
            }
    
            return columnNames;
        }
    
        /**
         * 得到EXCEL模板下载时的显示字段
         * 
         * @param condition
         * @return
         * @throws Exception
         */
        public static List<String> listXianShiField(String condition) throws Exception {
            List<String> resultList = listExcelField("EXCEL下载时显示字段", condition);
            resultList = resultList != null && resultList.size() != 0 ? resultList
                : Arrays.asList(new String[] {"姓名", "身份证号", "性别", "联系电话", "联系地址"});
            return resultList;
        }
    
        /**
         * 得到EXCEL模板下载时的必填字段
         * 
         * @param jiGouId
         * @return
         * @throws Exception
         */
        public static List<String> listBiTianField(String jiGouId) throws Exception {
            List<String> resultList = listExcelField("EXCEL必填字段", jiGouId);
            resultList =
                resultList != null && resultList.size() != 0 ? resultList : Arrays.asList(new String[] {"姓名", "性别"});
            return resultList;
        }
    
        /**
         * 通过设置名称获取显示list集合
         * 
         * @param sheZhiMingCheng
         * @param condition
         * @return
         * @throws Exception
         */
        public static List<String> listExcelField(String sheZhiMingCheng, String condition) throws Exception {
            List<String> list = null;
            // 可以从数据库中动态获取,或者从程序中动态拼接出想要导出的字段
            //do something
            return list;
        }
    }
    

    枚举类补充:

    public enum FieldEnum {
        /**
         * 姓名
         */
        XING_MING("姓名", false),
        /**
         * 身份证号
         */
        SHEN_FEN_ZHENG_HAO("身份证号", false),
    
        /**
         * 性别
         */
        XING_BIE("性别", true),
    
        /**
         * 婚姻状况
         */
        HUN_YING_ZHUANG_KUANG("婚姻状况", true),
    
        /**
         * 联系人
         */
        LIAN_XI_REN("联系人", false),
        /**
         * 联系电话
         */
        LIAN_XI_DIAN_HUA("联系电话", false),
        /**
         * 联系地址
         */
        LIAN_XI_DI_ZHI("联系地址", false);
    
        /* 省略其他可能的属性 */
    
        private String name;
    
        private boolean isZiDian;
    
        private FieldEnum(String name, boolean isZiDian) {
            this.name = name;
            this.isZiDian = isZiDian;
        }
    
        /**
         * 通过name获取枚举类
         * 
         * @param name
         * @return
         */
        public static FieldEnum getFieldEnum(String name) {
            FieldEnum[] values = FieldEnum.values();
            for (int i = 0; i < values.length; i++) {
                if (values[i].getName().equals(name)) {
                    return values[i];
                }
            }
            return null;
        }
    
        public String getName() {
            return name;
        }
    
        public boolean isZiDian() {
            return isZiDian;
        }
    
    }
    

    3.实现下载:

    /**
         * 下载动态模板
         * 
         * @param request
         * @param response
         */
        @RequestMapping(value = "/downloadDongTaiMuBan.do")
        public void downloadDongTaiMuBan(HttpServletRequest request, HttpServletResponse response) {
            try {
                // 这里只是模仿一种条件,真正的条件需要根据实际情况传入
                String condition = request.getRequestURL().toString();
                System.out.println(condition);
                // 根据条件从数据库动态获取需要导出的EXCEL字段
                List<String> xianShiList = ExcelDownloadUtil.listXianShiField(condition);
                if (xianShiList != null && !xianShiList.isEmpty()) {
                    // 根据条件从数据库动态获取必填的EXCEL字段
                    List<String> biTianList = ExcelDownloadUtil.listBiTianField(condition);
                    // 文件名编码,解决乱码问题
                    String fileName = "登记.xlsx";
                    String userAgentString = request.getHeader("User-Agent");
                    String browser = UserAgent.parseUserAgentString(userAgentString).getBrowser().getGroup().getName();
                    if (browser.equals("Chrome") || browser.equals("Internet Exploer") || browser.equals("Safari")) {
                        fileName = URLEncoder.encode(fileName, "utf-8").replaceAll("\\+", "%20");
                    } else {
                        fileName = MimeUtility.decodeText(fileName);
                    }
                    // 设置请求
                    response.setCharacterEncoding("UTF-8");
                    response.setContentType("application/x-download");
                    response.addHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName));
                    response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
                    response.addHeader("Pragma", "no-cache");
                    response.addHeader("Expires", "0");
    
                    final String sheetName = "第一分组";// 设置EXCEL默认工作表空间名称
                    // 处理EXCEL字段,标识出需要必填的字段,有下拉列表的字段,获取下拉列表的值
                    List<Map<String, Object>> columnNames =
                        ExcelDownloadUtil.getColumnNames(xianShiList, biTianList, condition);
                    if (columnNames != null && !columnNames.isEmpty()) {
                        ExcelDownloadUtil.getExcelTitleTemplate(response, sheetName, columnNames, "登记信息");
                    }
    
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("生成下载动态模板异常!", e);
            }
    
        }
    

    4.效果预览:
    在这里插入图片描述
    通过以上代码就简单实现Excle模板动态导出功能啦。

    展开全文
  • /** * * Discription:[导出excel] * * * @param response * @param list 要导出的数据集合 * @param fileName * @param sheetName * @throws Exception */ public static void exportXls(HttpServletResponse re...

    /** *

    * Discription:[导出excel] *

    *  * @param response * @param list 要导出的数据集合 * @param fileName * @param sheetName * @throws Exception */ public static void exportXls(HttpServletResponse response, List list, String fileName, String sheetName) throws Exception { if (list == null || list.size() == 0) { return; } // 获取总行数 int rowNum = list.size(); // 获得总列数 int cellNum = list.get(0).length; // 创建Excel文档 HSSFWorkbook hwb = new HSSFWorkbook(); // sheet对应一个工作页 HSSFSheet sheet = hwb.createSheet(sheetName); for (int i = 0; i < rowNum; i++) { // 创建一行 HSSFRow row = sheet.createRow(i); // 插入一行数据 for (int j = 0; j < cellNum; j++) { HSSFCell cell = row.createCell(j); cell.setCellValue(list.get(i)[j]); } } // 创建文件输出流,准备输出电子表格 ByteArrayOutputStream os = new ByteArrayOutputStream(); hwb.write(os); byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); 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; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (IOException e) { throw e; } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } }
    展开全文
  • java 导出excle

    2018-09-27 09:37:53
    后来想着在用户管理中添加一个导出功能,所以就上网查了资料,实现了简单的导出功能,在这里记录下自己的过程。 1、在java项目中引入导出功能需要的jar包  poi-3.9.jar  poi-examples-3.9.jar  poi-exc...

    最近自己着手写了一个前后端分离的后台管理系统(主要是写着玩,java还是熟悉一点,所以前后端均是自己写),后端使用的Java SpringMVC。后来想着在用户管理中添加一个导出功能,所以就上网查了资料,实现了简单的导出功能,在这里记录下自己的过程。

    1、在java项目中引入导出功能需要的jar包

      poi-3.9.jar

      poi-examples-3.9.jar

      poi-excelant-3.9.jar

      poi-ooxml-3.9.jar

      poi-ooxml-schemas-3.9.jar

      poi-scratchpad-3.9.jar

     

      项目中使用的是maven结构,所以在pom.xml文件中添加如下部分:

      

     

    2、domain实体类-SysUser.java

     

    3、生成Excel文件的工具类-ExcelUtil.java

    Table of Contents

    1、在java项目中引入导出功能需要的jar包

    2、domain实体类-SysUser.java

    3、生成Excel文件的工具类-ExcelUtil.java

    4、controller层-SysUserController.java

    5、前端部分

    6、效果-导出的文件


    package com.lin.utils;
    
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.Font;
    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * 生成Excel文件的工具类
     * @author libo
     */
    public class ExcelUtil {
        
        /**
         * 创建excel文档,
         * @param list 数据
         * @param keys list中map的key数组集合
         * @param columnNames excel的列名
         * */
        public static Workbook createWorkBook(List<Map<String, Object>> list,String []keys,String columnNames[]) {
            // 创建excel工作簿
            SXSSFWorkbook wb = new SXSSFWorkbook(100);//在内存中只保留100行记录,超过100就将之前的存储到磁盘里
            // 创建第一个sheet(页),并命名
            Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); 
            // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
            for(int i=0;i<keys.length;i++){
                sheet.setColumnWidth(i, (int) (35.7 * 150));
            }
    
            // 创建第一行
            Row row = sheet.createRow(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());
    
            // 设置第一种单元格的样式(用于列名)
            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);
            }
            //设置每行每列的值
            for (int i = 1; i < list.size(); i++) {
                // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
                // 创建一行,在页sheet上
                Row row1 = sheet.createRow(i);
                // 在row行上创建一个方格
                for(int j=0;j<keys.length;j++){
                    Cell cell = row1.createCell(j);
                    cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString());
                    cell.setCellStyle(cs2);
                }
            }
            return wb;
        }
    
    }
    

    4、controller层-SysUserController.java

    package com.lin.controller;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.Resource;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    import org.springframework.web.multipart.MultipartResolver;
    import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    
    import com.lin.domain.data.ResData;
    import com.lin.domain.data.ResListData;
    import com.lin.domain.error.Error;
    import com.lin.domain.sysUser.SysUser;
    import com.lin.service.RoleService;
    import com.lin.service.SysUserService;
    import com.lin.utils.Aes;
    import com.lin.utils.DateTimeUtils;
    import com.lin.utils.ExcelUtil;
    import com.lin.utils.ResponseUtils;
    import com.lin.utils.Upload;
    import com.lin.utils.Utils;
    import com.sun.jersey.api.client.Client;
    
    import net.sf.json.JSONObject;
    
    /**
     * 后台用户-controller
     * @author libo
     */
    @Controller
    @RequestMapping("/sysUser")
    public class SysUserController {
    
        @Resource
        private SysUserService sysUserService;
        @Resource
        private RoleService rService;
        
        @Value(value="${headImgPath}")    //后台图片保存地址
        private String headImgPath;
        
        @Value(value="${uploadHost}")
        private String uploadHost;    //项目host路径    
        
        @Value(value="${sysUserDefImg}")
        private String sysUserDefImg;    //系统用户默认头像
    /**
         * 导出系统用户数据
         * @param req
         * @param res
         * @param name
         * @param phone
         * @param email
         * @param roleId
         * @param createTimeStart
         * @param createTimeEnd
         * @param status
         * @param departmentId
         * @throws IOException
         */
        @ResponseBody
        @RequestMapping(value="/exportSysUsers.do", method=RequestMethod.GET)
        public void exportSysUsers(HttpServletRequest req,HttpServletResponse res,
                String name, String phone, String email, Integer roleId, String createTimeStart, String createTimeEnd, 
                Integer status, Integer departmentId) throws IOException{
            Map<String,Object> params = new HashMap<String,Object>();
            params.put("name", "".equals(name) || null == name ? null : name);
            params.put("phone", "".equals(phone) || null == phone ? null : phone);
            params.put("email", "".equals(email) || null == email ? null : email);
            params.put("roleId", "".equals(roleId) || null == roleId ? null : roleId);
            params.put("createTimeStart", "".equals(createTimeStart) || null == createTimeStart ? null : createTimeStart+" 00:00:00");
            params.put("createTimeEnd", "".equals(createTimeEnd) || null == createTimeEnd ? null : createTimeEnd+" 23:59:59");
            params.put("status", "".equals(status) || null == status ? null : status);
            params.put("departmentId", "".equals(departmentId) || null == departmentId ? null : departmentId);
            
            Date d = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            String formatTime = sdf.format(d);
            String fileName="系统用户表-"+formatTime;
            //填充projects数据
            List<SysUser> userList = sysUserService.getUserList(params);
            List<Map<String,Object>> list=createExcelRecord(userList);
            String columnNames[]={"姓名", "性别", "邮箱", "电话", "部门", "角色", "状态", "创建时间"};//列名
            String keys[] = {"name", "gender", "email", "phone", "department", "role", "status", "createTime"};//map中的key
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            try {
                ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte[] content = os.toByteArray();
            InputStream is = new ByteArrayInputStream(content);
            // 设置response参数,可以打开下载页面
            res.reset();
            res.setContentType("application/vnd.ms-excel;charset=utf-8");
            res.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
            ServletOutputStream out = res.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();
            }
        }
        
        /**
         * 生成Excel数据
         * @param userList
         * @return
         */
        private List<Map<String, Object>> createExcelRecord(List<SysUser> userList) {
            List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("sheetName", "sheet1");
            listmap.add(map);
            SysUser user = null;
            for (int j = 0; j < userList.size(); j++) {
                user = userList.get(j);
                Map<String, Object> mapValue = new HashMap<String, Object>();
                mapValue.put("name", user.getName());
                mapValue.put("gender", (user.getGender()==1) ? "男":((user.getGender()==0) ? "女" : "保密"));
                mapValue.put("email", user.getEmail());
                mapValue.put("phone", user.getPhone());
                mapValue.put("department", user.getDepartment().getName());
                mapValue.put("role", user.getRole().getName());
                mapValue.put("status", user.getStatus()==1 ? "启用" : "禁用");
                mapValue.put("createTime", user.getCreateTime().substring(0, 19));
                listmap.add(mapValue);
            }
            return listmap;
        }
        
        
    }

     

    5、前端部分

     

         /**
             * 点击导出按钮,导出用户数据
             */
            $scope.exportData = function () {
                //请求接口的参数
                var name = $scope.nameSearch || '',                 //姓名
                    phone = $scope.phoneSearch || '',              //电话
                    email = $scope.emailSearch || '',              //邮箱
                    roleId = $scope.roleIdSearch || '',            //角色id
                    departmentId = $scope.departmentIdSearch || '', //部门id
                    createTimeStart = $('#createTimeRange').val() ? $('#createTimeRange').val().substring(0,10)+' 00:00:00' : '',  //创建时间(起始时间)
                    createTimeEnd = $('#createTimeRange').val() ? $('#createTimeRange').val().substring(13,23)+' 23:59:59' : '',   //创建时间(截止时间)
                    status = $scope.statusSearch || '';             //状态(1=正常,0=禁用)
    
                var url = apiServ.sysUser.exportSysUsers.url+'?name='+name+'&phone='+phone+'&email='+email+'&roleId='+roleId+'&departmentId='+departmentId+
                    '&createTimeStart='+createTimeStart+'&createTimeEnd='+createTimeEnd+'&status='+status;
                window.open(url);
            }

    复制代码

     

    6、效果-导出的文件

    展开全文
  • java jxl实现excle导出

    2018-09-25 17:17:52
    //path:导出文件的路径地址 public String excelDerive(String path,String sql) { String[] title = {&amp;quot;商机编号&amp;quot;,&amp;quot;报备日期&amp;quot;,&amp;quot;产品组&...
  • java实现Excle导出功能,主要是通过poi,或者jxl包来实现,所谓的万能导出,无非是通过反射机制,首先创建了list,然后向list里面传递对象,而对象就可以通过反射机制来进行解析,通过解析对象里面的字段,获取所需要...
  • 这里的动态Excle模板文件是有...前一篇文章介绍了Excle模板动态导出,动态导入其实是依赖上一步实现的,虽然是动态导出,但是用户只能在规定的大的字段范围里选取自己想要导出的字段,这样导入的时候只需要判断字段...
  • 1.项目增加导出日志信息2.项目中导入poi-*.jar等操作excel文件的jar文件poi-3.7-20120326.jarpoi-excelant-3.7-20101029.jarpoi-ooxml-3.7.jarpoi-ooxml-schemas-3.7.jarExcel导出就是根据前台条件将参数传到...
  • Springboot导出Excle

    2021-01-25 12:37:12
    Apache Poi 是 Apache 的一个开源项目,用Java代码通过 poi 技术可以实现 读取 和 生成 Excel 文档。通过 office Excel软件或者 wps 常用的Excel格式有两种:xls 和 xlsx 如果要通过 SpringBoot 导入导入 Excel ...
  • 标签:前言先介绍下项目的开发环境,采用java开发语言进行开发,前台UI使用的是EasyUI框架,接下来是SpringMvc与Ejb结合来开发,整个项目管理采用的是Maven管理,服务器用的是Jboss6.2.0企业版。正文配置对于Excel...
  • Java 实现导出excel表

    2017-08-22 13:36:09
    * 导出 * 使用方法生成excle模板样式 */ @RequestMapping(value = "/export", method = RequestMethod.GET, produces = "application/json") public void aud001Export(HttpServletRequest request,
  • Java开发中经常会遇到需要导出Excel数据表或根据Excel中数据生成对应的数据库表,下面本站素文宅博客blog.yoodb.com为大家讲述两种...1. Java实现Excel导入方式一:JXL导入ExcelJXL是用java完成的一个项目,使用j...
  • 实现思路 ...动态从数据库获取数据写入excle文件中导出动态模板 方法 首先设计导出模板 导出时去遍历模板设置excle的表头 查询模板中的字段设置别名 第一步 导入POI的maven <!-- poi导出测试 -->
  • 代码实现: 解释: // 四个参数分别是:起始行,起始列,结束行,结束列 sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0, 转载于:https://www.cnblogs.com/xinyan123/p/6149202.htm...
  • 前言接上篇,在上篇文章我们介绍了要实现Excle导入做的一些配置和Excel导入的前端EasyUI代码的书写和后台controller的具体书写,这篇我们我们主要来学习Excle导出实现和ExcelUtil类的编写。正题Excel导出就是根据...
  • 第一步: package com.wlsq.kso.util; import org.apache.poi.hssf.usermodel.*; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.List; import
  • Java +EasyUI+SpringMvc实现Excle导入导出(上)

    万次阅读 多人点赞 2015-01-26 11:23:03
    先介绍下项目的开发环境,采用java开发语言进行开发,前台UI使用的是EasyUI框架,接下来是SpringMvc与Ejb结合来开发,整个项目管理采用的是Maven管理,服务器用的是Jboss6.2.0企业版,来实现Excle导入导出。...
  • 接上篇,在上篇文章我们介绍了要实现Excle导入做的一些配置和Excel导入的前端EasyUI代码的书写和后台controller的具体书写,这篇我们我们主要来学习Excle导出实现和ExcelUtil类的编写。   正题   Excel导出就是...
  • 5) 注释 jx:each(item="employees" var="employee" lastCell="D2") 表示从当前 A2 到 D2 即 A2:D2 部分是 Jxls 中 Context对象(也就是需要填充到excle模板中的数据)中的集合中的对象 Employee 中字段与 ${employee....
  • java excel 表格 导出 poi
  • 以前觉得excle里面图片是浮动的,不是针对某一栏的,后来上网还真的有相应的插件实现,POI! Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 我...
  • 开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子【easypoi】,下面介绍下“轮子”的使用。 广大网友都是基于实体对象...
  • ![图片说明](https://img-ask.csdn.net/upload/202004/15/1586939035_246719.png) 这个table中有图片现在用哪个tableExport导出结果图片这一列为空 啥也没有 有没有大佬帮忙看看!!!!
  • importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.OutputStream;importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.List;importjavax.servlet....
  • Java 实现表格导出到Excel(.xlsx)

    千次阅读 2018-06-04 20:45:53
    最近项目中需要将table 中数据导出到excle ,当时我想的两种...最后采取通过服务端到来实现导出Excel 格式是.xlsx。这个方案可以导出大量的数据。分页显示。核心代码如下;1、这个公用的方法不带表头标题的。/** ...
  • 写了一个excle导入导出,jfinal搭建框架,实现登录,导入导出功能,里面有dmp文件,java代码,jfinal学习资料,有需要的可以参考一下
  • 从A数据导出数据,处理导出的数据,将处理后的数据写入EXCLE文件中,然后将EXCEL中的数据导入至B数据库中
  • java到处excle表格

    2019-10-15 21:06:32
    后来想着在用户管理中添加一个导出功能,所以就上网查了资料,实现了简单的导出功能,在这里记录下自己的过程。 1、在java项目中引入导出功能需要的jar包  poi-3.9.jar  poi-examples-3.9.jar  poi-ex...
  • 首先创建一个对应数据的实体,比如本例中使用到的事人物信息,则创建一个Peo类,包含id/name/account 等属性,不详细介绍,主要在于实现导入导出的方法代码:具体要看都使用了那些类以及调用的方法,方法的作用。...
  • SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)读取Excale表返回一个集合:package com.shiliu.game.utils; import java.io.File; import java.io....

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

java实现导出excle

java 订阅