精华内容
下载资源
问答
  • Java导出数据到Excel表格

    千次阅读 2020-02-14 21:18:52
    Java导出数据到Excel表格 今天是2020年2月14日,首先祝各位情人节快乐 下面言归正传开始正文。 在后台管理系统中经常会有导出数据到Excel表格的功能需求,这个功能是难以规避的,而且这也是一个非常使用且人性化的一...

    Java导出数据到Excel表格

    今天是2020年2月14日,首先祝各位情人节快乐
    下面言归正传开始正文。
    在后台管理系统中经常会有导出数据到Excel表格的功能需求,这个功能是难以规避的,而且这也是一个非常使用且人性化的一个功能。下面就给大家分享一下我在项目中实现此功能的方式和方法。
    我使用的是POI进行一个Excel的操作,POI组件是由Apache提供的组件包,主要是为我们的Java程序提供对于office文档的相关操作,废话不多说直接上代码。

    添加依赖(SpringBoot)
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.6</version>
    </dependency>
    
    POI相关组件简介

    HSSFWorkbook:Excel对象,相当于一个 .xls/.xlsx 文件
    HSSFSheet:工作表对象,Excel文件包涵的sheet,一个对象代表一个表单
    HSSFRow:表示表格中的行对象。
    HSSFCell:表示表格中的单元格对象。
    HSSFHeader:Excel文档Sheet的页眉。
    HSSFFooter:Excel文档Sheet的页脚。
    HSSFDataFormat:日期格式。
    HSSFFont:字体对象。
    HSSFCellStyle:单元格样式(对齐样式、边框等)
    HSSFComment:批注(注释)。
    HSSFPatriarch:和HSSFComment用于创建注释的位置。
    HSSFColor:颜色对象。
    HSSFDateUtil:日期辅助工具
    HSSFPrintSetup:打印辅助工具
    HSSFErrorConstants:错误信息表

    首先需要创建一个工具类
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    /**
     * @Auther: ziye
     * @Date: 2020/2/14
     * @Description:
     */
    public class ExcelUtil {
    
        /**
         * 导出Excel
         *
         * @param sheetName sheet名称
         * @param title     标题
         * @param values    内容
         * @param wb        HSSFWorkbook对象
         * @return
         */
        public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {
    
            // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
            if (wb == null)
                wb = new HSSFWorkbook();
    
            // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = wb.createSheet(sheetName);
    
            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
            HSSFRow row = sheet.createRow(0);
    
            // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
    
            //声明列对象
            HSSFCell cell = null;
    
            //创建标题
            for (int i = 0; i < title.length; i++) {
                cell = row.createCell(i);
                cell.setCellValue(title[i]);
                cell.setCellStyle(style);
            }
    
            //创建内容
            for (int i = 0; i < values.length; i++) {
                row = sheet.createRow(i + 1);
                for (int j = 0; j < values[i].length; j++) {
                    //将内容按顺序赋给对应的列对象
                    row.createCell(j).setCellValue(values[i][j]);
                }
            }
            return wb;
        }
    }
    
    工具类创建完成后就开始进行相关的调用

    便于大家理解和查看代码,我就把调用过程直接写在了Controller层中

        @ResponseBody
        @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
        public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
        	SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
            String year = df.format(new Date());
            //为了方便大家理解,选择用获取数据表中的全部数据为例子
            List<Leader> list = leaderService.getList();
            //设置Excel表头
            String[] title = {"ID", "领导姓名", "性别", "电子邮箱", "联系电话", "入职时间"};
            //设置Excel文件名
            String filename = "LeaderList_"+year+".xls";
            //设置工作表名称
            String sheetName = "sheet1";
            //开始对从数据库中获取到的数据进行处理
            String[][] content = new String[list.size()][6];
            try {
                for (int i = 0; i < list.size(); i++) {
                    content[i][0] = String.valueOf(list.get(i).getLeaderId());
                    content[i][1] = list.get(i).getName();
                    if(list.get(i).getSex() == 0){
                    	content[i][2] = "女";
                    }else{
                    	content[i][2] = "男";
                    }
                    content[i][3] = list.get(i).getEmail();
                    content[i][4] = list.get(i).getPhone();
                    content[i][5] = String.valueOf(list.get(i).getIntime());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
            try {
                // 响应到客户端
                this.setResponseHeader(response, filename);
                OutputStream os = response.getOutputStream();
                wb.write(os);
                os.flush();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 向客户端发送响应流方法
         *
         * @param response
         * @param fileName
         */
        public void setResponseHeader(HttpServletResponse response, String fileName) {
            try {
                try {
                    fileName = new String(fileName.getBytes(), "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    

    大家需要注意的一点就是,我这里使用的是GET方式提交,是因为我需要浏览器发送请求时即下载Excel,所以就不能用ajax进行传输

    在页面上的调用方式

    便于理解,我选择了最简单直观的调用方式(JS调用Controller方法)

        <script>
        	function exportExcel(){
        		let url = "/leader/exportExcel";
    			location.href = url;
        	}
        </script>
    

    结语

    以上代码即是本人在实现此功能时所选择的实现方式
    如果文章中有错误,欢迎大家留言指正;若您有更好、更简便的方式来实现此功能,欢迎大家在留言区留下您的建议。

    在这个特殊的情人节,愿:
    你在被打击时,记起你的珍贵,抵抗恶意;
    你在迷茫时,坚信你的珍贵,抛开蜚语;
    爱你所爱 行你所行 听从你心 无问东西

    展开全文
  • 导出excel整理 开发中难免会遇到要导出数据...我做一个简单的导出excel表格功能.这是我在工作上用到的. 1.需要用到的jar <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <...

    导出excel整理

    开发中难免会遇到要导出数据到excel的,网上有很多方法,但是看起来都很复杂的样子,写得又非常多代码,让人望而止步.我做一个简单的导出excel表格功能.这是我在工作上用到的.

    1.需要用到的jar

    <dependency>
       <groupId>net.sourceforge.jexcelapi</groupId>
       <artifactId>jxl</artifactId>
       <version>2.6.10</version>
    </dependency>

     

     

    我将会从前端请求开始一直到controller的测试方法,最后到工具类.

    首先是前端页面,我用的是layui,项目使用的框架是springboot+springcloud,对这个导出功能没有太大影响,在其他框架也是可以用的,除非你的不是maven,那也无所谓,下载jar就可以了.

    前端页面js如下:

    自己写一个跳转发方法,跳转到controller触发导出方法

     

    Controller中的方法,代码如下:

    这是我做的一个测试代码,数据都是随便填写,如果是从数据库查询到的数据,自己做个改动就可以了,这些都是简单的,我就不做演示.

        @RequestMapping(value = "exportStatisticsReport", method = RequestMethod.GET)
        public void exportStatisticsReport(HttpServletRequest request, HttpServletResponse response){
            Map<String,Object> map = getParameterNames(request);
            //使用LinkedHashMap,因为这个是有序的map
            LinkedHashMap<String,Object> reportData = new LinkedHashMap<>();
            //装载数据,就是要导出到excel的数据
            reportData.put("test1","流水号");
            reportData.put("test2","辖区");
            reportData.put("test3","业务状态");
            reportData.put("test4","企业名称");
            reportData.put("test5","网点");
    
            //把要导出到excel的数据的LinkedHashMap装载到这个List里面,这是导出工具类要求封装格式.
            List<Map<String, Object>> exportData = new ArrayList<>();
            exportData.add(reportData);
    
            //表格列名用ArrayList装载
            List<String> columns = new ArrayList<>();
            //设置excel表格中的列名
            columns.add("流水号");
            columns.add("辖区");
            columns.add("业务状态");
            columns.add("企业名称");
            columns.add("网点");
    
            //点击导出按钮的时候,页面上显示的标题,同时也是sheet的名称
            String filename ="测试导出excel";
            try {
                //处理一下中文乱码问题
                response.setHeader("Content-Disposition", "attachment;filename="+new String(filename.getBytes("gb2312"), "ISO8859-1")+".xls");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //以上均为数据准备,下面开始调用导出excel工具类
            ExportExcel.exportToExcel(response, exportData, filename, columns);
        }

    最后,我们再来看看导出excel的工具类

     

    至于工具类中是如何实现的,我们不需要去关心,里面的注释我写得非常清楚,有兴趣的可以去看看.我们要关注的是该方法的参数列表.

    这个方法需要用到的参数有以下4个:

    1.HttpServletResponse response:这个不用解释吧

    2.List<Map<String, Object>> objData:这个是装载要导出到excel的数据,在controller方法里面已经写得非常清楚.

    3.String sheetName:这个是excel表格中sheet的名称,同时也可以作为下载的时候显示的文件名.

    4.List<String> columns:这个参数是装载excel表格列名的集合,在controller方法里面也写得非常清楚了.

    我们只要按照方法参数规定的格式提供参数给方法,就可以了.

    导出excel工具类中的第一个方法代码如下:   下面这个代码看看就好,要用的时候直接拿去用

    这个工具类可以在这里下载:

    https://gitee.com/qsa2019/export_excel_tool_class.git

    public class ExportExcel {
        public static int exportToExcel(HttpServletResponse response,
                                        List<Map<String, Object>> objData, String sheetName,
                                        List<String> columns) {
            int flag = 0;
            //声明工作簿jxl.write.WritableWorkbook
            WritableWorkbook wwb;
            try {
                //根据传进来的file对象创建可写入的Excel工作薄
                OutputStream os = response.getOutputStream();
    
                wwb = jxl.Workbook.createWorkbook(os);
    
                /*
                 * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表
                 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样
                 * 代码中的"0"就是sheet1、其它的一一对应。
                 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置
                 */
                WritableSheet ws = wwb.createSheet(sheetName, 0);
    
                SheetSettings ss = ws.getSettings();
                ss.setVerticalFreeze(1);//冻结表头
    
                WritableFont font1 = new WritableFont(WritableFont.createFont("微软雅黑"), 10, WritableFont.BOLD);
                // WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);
                WritableCellFormat wcf = new WritableCellFormat(font1);
                // WritableCellFormat wcf2 = new WritableCellFormat(font2);
                // WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体
    
                //创建单元格样式
                //WritableCellFormat wcf = new WritableCellFormat();
    
                //背景颜色
                // wcf.setBackground(jxl.format.Colour.YELLOW);
    //            wcf.setAlignment(Alignment.CENTRE);  //平行居中
    //            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中
                //  wcf3.setAlignment(Alignment.CENTRE);  //平行居中
                //  wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中
                //  wcf3.setBackground(Colour.LIGHT_ORANGE);
                // wcf2.setAlignment(Alignment.CENTRE);  //平行居中
                // wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中
    
                /*
                 * 这个是单元格内容居中显示
                 * 还有很多很多样式
                 */
                //   wcf.setAlignment(Alignment.CENTRE);
                //判断一下表头数组是否有数据
                if (columns != null && columns.size() > 0) {
    
                    //循环写入表头
                    for (int i = 0; i < columns.size(); i++) {
                        ws.setColumnView(i, 28);//设置列宽
    //                    ws.setRowView(i+1, 600, false); //设置行高
                        /*
                         * 添加单元格(Cell)内容addCell()
                         * 添加Label对象Label()
                         * 数据的类型有很多种、在这里你需要什么类型就导入什么类型
                         * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label
                         * Label(i, 0, columns[i], wcf)
                         * 其中i为列、0为行、columns[i]为数据、wcf为样式
                         * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中
                         */
                        ws.addCell(new Label(i, 0, columns.get(i), wcf));
                    }
    
                    //判断表中是否有数据
                    if (objData != null && objData.size() > 0) {
                        //循环写入表中数据
                        for (int i = 0; i < objData.size(); i++) {
    
                            //转换成map集合{activyName:测试功能,count:2}
                            Map<String, Object> map = objData.get(i);
                            //循环输出map中的子集:既列值
                            int j = 0;
                            DecimalFormat decimalFormat = new DecimalFormat("0.00");
                            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
                            for (Object o : map.keySet()) {
                                //ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)
                                String content = "";
                                if (map.get(o).toString().contains(".") && CommonUtils.isNumber(map.get(o).toString())) {
                                    content = decimalFormat.format(Float.valueOf(map.get(o).toString()));
                                    ws.addCell(new Label(j, i + 1, content));
                                } else if (map.get(o).toString().contains("-") && map.get(o).toString().contains(":")) {
                                    content = String.valueOf(map.get(o)).split("\\.")[0];
                                    ws.addCell(new Label(j, i + 1, content));
                                }
                                //图片处理
    //                            else if (map.get(o).toString().contains("http") || map.get(o).toString().contains("https")){
    //                                ws.setColumnView(j, 15);//设置列宽
    //                                String path ="/resources/"+ String.valueOf(map.get(o)).split("upload/")[1];
    //                                File imgFile = new File(path);
    //                                WritableImage image = new WritableImage(j,i+1,1,1,imgFile);
    //                                ws.addImage(image);
    //                            }
                                else {
                                    content = String.valueOf(map.get(o));
                                    ws.addCell(new Label(j, i + 1, content));
                                }
                                j++;
                            }
    
                           /* for(int b=0;b<map.size();b++){
                            	 ws.addCell(new Label(b,i+1,String.valueOf(map.get(String.valueOf(b)))));
                            }*/
                        }
                    } else {
                        flag = -1;
                    }
    
                    //写入Exel工作表
                    wwb.write();
    
                    //关闭Excel工作薄对象
                    wwb.close();
    
                    //关闭流
                    os.flush();
                    os.close();
                }
            } catch (IllegalStateException e) {
                System.err.println(e.getMessage());
            } catch (Exception ex) {
                flag = 0;
                ex.printStackTrace();
            }
    
            return flag;
        }

    最后测试一下:

    点击导出按钮,页面底部就出现这个:说明导出成功!!!

     

    展开全文
  • 本示例是快速将查询的结果导出到excel 中,如果用我的代码只需要修改查询数据的sql、excel文件名、excel的sheet标题、内容的标题即可。 POI简介:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有...

    本示例是快速将查询的结果导出到excel 中,如果用我的代码只需要修改查询数据的sql、excel文件名、excel的sheet标题、内容的标题即可。

    POI简介:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。

    官方主页http://poi.apache.org/index.html

    API文档http://poi.apache.org/apidocs/index.html

    将jar包加入到项目中:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.6</version>
    </dependency>

    Action相关代码:

    引入的文件

    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;

    主要代码 

        /**
    	 * 导出数据到excel
    	 * @return
    	 */
    	@RequestMapping("exportExcel")
    	@ResponseBody
    	public Map<String,Object> exportExcel(HttpServletRequest request,HttpServletResponse response) {
    		try {
    			//获取导出到excel 的数据
    			//sql查询的时候,要将查询出的每个字段起个别名 别名的格式必须是 从0开始依次递增
    			//例如      select id '0', userName '1', userPhone '2', userAddress '3'  from user 
            	
    			List<Map<String, Object>> exportDataList = demoService.getExportData(request,response);
    			
    			//设置excel标题   查询几个字段,就写几个标题,标题顺序跟0123对应
    			String[] title = {"编号","用户姓名","用户电话","用户地址"};
    			
    			//excel文件名 
    			SimpleDateFormat df = new SimpleDateFormat("MM月dd日HH时mm分");// 设置日期格式
    			String fileName = "自主设置("+df.format(new Date())+").xls";
    			
    			//sheet名
    			String sheetName = "自主设置";
    			
    			//创建HSSFWorkbook 
    			HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, exportDataList, null);
    			
    			//响应到客户端
    			try {
    				fileName = new String(fileName.getBytes(),"ISO8859-1");
    				response.setContentType("application/octet-stream;charset=ISO8859-1");
    	            response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
    	            response.addHeader("Pargam", "no-cache");
    	            response.addHeader("Cache-Control", "no-cache");
    				
    				OutputStream os = response.getOutputStream();
    				wb.write(os);
    				os.flush();
    				os.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    			log.debug("exportExcel接口异常", e);
    			
    		}
    		return null;
    	}

    ExcelUtil工具类

    package com.yundao.util;
    
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    /**
     * excel表格操作工具类
     * jar	<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi</artifactId>
    			<version>3.6</version>
    		</dependency>
     * 
     * @author Hanks
     *
     */
    public class ExcelUtil {
    
    	
    	/**
         * 导出Excel
         * @param sheetName sheet名称
         * @param title 标题
         * @param exportDataList 内容
         * @param wb HSSFWorkbook对象
         * @return
         */
        public static HSSFWorkbook getHSSFWorkbook(
        		String sheetName, String []title, List<Map<String, Object>> exportDataList, HSSFWorkbook wb){
    
            // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
            if(wb == null){
                wb = new HSSFWorkbook();
            }
    
            // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = wb.createSheet(sheetName);
    
            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
            HSSFRow row = sheet.createRow(0);
    
            // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
    
            //声明列对象
            HSSFCell cell = null;
    
            //创建标题
            for(int i=0;i<title.length;i++){
                cell = row.createCell(i);
                cell.setCellValue(title[i]);
                cell.setCellStyle(style);
            }
    
            //创建内容
            for(int i=0;i<exportDataList.size();i++){
                row = sheet.createRow(i + 1);
                for(int j=0;j<exportDataList.get(i).size();j++){
                    //将内容按顺序赋给对应的列对象
                    row.createCell(j).setCellValue(exportDataList.get(i).get(j+"")+"");
                }
            }
            return wb;
        }
    }
    

     

    就这么点代码,什么单元格合并,行高列高等等参数配置,下次有需要了,再写个通用的模版

    如果有同学说这部分代码不能用,欢迎留言。

     

    参考博客链接:https://www.cnblogs.com/gudongcheng/p/8268909.html

     

     

    展开全文
  • java导出数据到Excel

    2014-09-24 13:48:36
    java导出数据到Excel.rar,共广大java开发者下载使用。
  • Java导出数据excel表格,超级详细的,内容包含所需要的jar及所有相关文件,结合Mybatis+Spring+Mysql技术等技术内容丰富,步骤也比较详细,可以直接用到日常开发中使用,有不懂的地方可以留言
  • java导出页面表格数据到excel

    热门讨论 2011-01-11 11:12:07
    一个完整的导出html页面数据到excel表内,超简单
  • java导出数据到指定的excel模板中。+Excel-template-exportJava实用源码整理learns
  • Java导出数据到Excel

    万次阅读 多人点赞 2019-03-02 12:42:35
    在做管理系统的时候,我想Excel导出是我们很难规避掉的,而且这也是个很实用很人性化的功能。Java中对于Excel的支持有很多种,比如说JXL,POI等。我这边使用的是POI进行一个Excel的操作,下面我会简单分享下POI...

    简述
    在做管理系统的时候,我想Excel的导出是我们很难规避掉的,而且这也是个很实用很人性化的功能。Java中对于Excel的支持有很多种,比如说JXL,POI等。我这边使用的是POI进行一个Excel的操作,下面我会简单分享下POI组件的使用,以及我使用比较多一个工具类。

    POI
    poi组件是由Apache提供的组件包,主要职责是为我们的Java程序提供对于office文档的相关操作。本文主要是它对于Excel操作的一个介绍。

    官方主页:http://poi.apache.org/index.html 
    API文档:http://poi.apache.org/apidocs/index.html

    基本组件
    使用的时候我们可以发现poi组件为我们提供的操作Excel的相关类都是HSSF开头的,这些类主要是在org.apache.poi.hssf.usermodel这个包下面。里面包涵有像Excel的对象,单元格的样式,字体样式以及部分的工具类。一下介绍几个我们常用的类:

    HSSFWorkbook:Excel对象,相当于一个 .xls/.xlsx 文件
    HSSFSheet:工作表对象,Excel文件包涵的sheet,一个对象代表一个表单
    HSSFRow:表示表格中的行对象。
    HSSFCell:表示表格中的单元格对象。
    HSSFHeader:Excel文档Sheet的页眉。
    HSSFFooter:Excel文档Sheet的页脚。
    HSSFDataFormat:日期格式。
    HSSFFont:字体对象。
    HSSFCellStyle:单元格样式(对齐样式、边框等)
    HSSFComment:批注(注释)。
    HSSFPatriarch:和HSSFComment用于创建注释的位置。
    HSSFColor:颜色对象。
    HSSFDateUtil:日期辅助工具
    HSSFPrintSetup:打印辅助工具
    HSSFErrorConstants:错误信息表
    基本操作
    1.HSSFWorkbook创建‘Excel文件对象’

    //创建Excel对象
    HSSFWorkbook workbook = new HSSFWorkbook();
    


    2.使用workbook 对象创建工作表对象

    //创建工作表单
    HSSFSheet sheet = workbook.createSheet("对象报表");  
    


    3.创建行和操作单元格对象

    //创建HSSFRow对象 (行)
    HSSFRow row = sheet.createRow(0);  
    //创建HSSFCell对象  (单元格)
    HSSFCell cell=row.createCell(0);  
    //设置单元格的值  
    cell.setCellValue("单元格中的中文");  
    


    4.保存Excel文件

    //输出Excel文件  
    FileOutputStream output=new FileOutputStream("d:\\workbook.xls");  
    workbook.write(output);  
    output.flush();  
    


    个性化导出—样式设置
    这边我列举出部分常用的样式设置的方法! 
    1.合并单元格,设置宽、高

    //合并单元格前3列
    sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); 
    //CellRangeAddress参数:起始行,截至行,起始列, 截至列  
    
    //设置缺省列高  
    sheet.setDefaultRowHeightInPoints(20);
    //设置缺省列宽
    sheet.setDefaultColumnWidth(30);
    //自定义300 * 60
    sheet.setColumnWidth(cell.getColumnIndex(), 300 * 60);  
    


    2.设置单元格样式

    // 实例化样式对象
    HSSFCellStyle cellStyle = workbook.createCellStyle(); 
    // 两端对齐
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY); 
    // 垂直居中
    cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);   
    // 填充图案---填充方式
    cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);  
    // 设置前景色  (这个要写在背景色的前面)
    cellStyle.setFillForegroundColor(HSSFColor.RED.index);  
    // 设置背景颜色  
    cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);  
    // 设置边框
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);  
    // 边框颜色
    cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);  
    // 日期展示格式 
    cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));   
    
    //将样式应用于单元格
    cell.setCellStyle(cellStyle);  
    //将样式应用到行  
    row.setRowStyle(cellStyle);  
    


    3.设置字体

    // 实例化字体对象
    HSSFFont fontStyle = workbook.createFont();  
    // 字体
    fontStyle.setFontName("宋体");    
    // 高度  
    fontStyle.setFontHeightInPoints((short)12);    
    // 字体  
    font.setColor(HSSFColor.BLUE.index);  
    // 加粗  
    fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
    // 斜体   
    font.setItalic(true);  
    // 下划线  
    font.setUnderline(HSSFFont.U_SINGLE);  
    // 将字体应用于单元格样式中
    cellStyle.setFont(font);    
    


    个人应用
    下面给大家分享下个人的整体使用过程! 

    æ ·å¼åè
    处理的action

         

      //用于导出的数据集合
            List<PBillBean> dataset = new ArrayList<PBillBean>();
            //填充dataset
            for (int i = 0; i < 10; i++) {
                PBillBean bean = new PBillBean();
                dataset.add(bean);
            }
            //临时文件
            File tempFile = null;
            try {
                //Excel导出工具类
                ExportExcel<PBillBean> ex = new ExportExcel<PBillBean>();
                //导出的标题列
                String[] headers = { "标题1", "标题2", "标题3", "标题4",    "标题5", "标题6" };
                //时间格式化
                SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
                //要保存的文件名
                String filename = "bill_" + format.format(new Date()) + ".xls";
                //要保存的根目录
                String rootDir = request.getSession().getServletContext().getRealPath("/");
                //要保存的目录路径
                String path = rootDir + File.separator + "tempfile";
                File saveDir = new File(path);
                if (!saveDir.exists()) {
                    saveDir.mkdirs();// 如果文件不存在则创建文件夹
                }
                //文件路径
                path = path + File.separator + filename;
                tempFile = new File(path);   //初始化临时文件
                //输出流
                OutputStream out = new FileOutputStream(tempFile);
                //实例化Excel表格
                HSSFWorkbook workbook = new HSSFWorkbook();
                //创建工作表单
                String[] sheetNames = { "对账报表" };
                for (int i = 0; i < sheetNames.length; i++) {
                    workbook.createSheet(sheetNames[i]);
                }
                //导出到Excel
                ex.exportExcel(sheetNames[0], headers, dataset, out,
                        "yyyy-MM-dd HH:mm", workbook);
                try {
                    //保存文件
                    workbook.write(out);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                out.close();
                // 以流的形式下载文件。
                BufferedInputStream fis = new BufferedInputStream(
                        new FileInputStream(path));
                byte[] buffer = new byte[fis.available()];
                fis.read(buffer);
                fis.close();
                // 清空response
                response.reset();
                // 设置response的Header
                response.addHeader("Content-Disposition", "attachment;filename="
                        + new String(filename.getBytes()));
                response.addHeader("Content-Length", "" + tempFile.length());
                OutputStream toClient = new BufferedOutputStream(
                        response.getOutputStream());
                response.setContentType("application/vnd.ms-excel;charset=utf-8");
                toClient.write(buffer);
                toClient.flush();
                toClient.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (tempFile != null && tempFile.exists()) {
                    tempFile.delete();// 删除临时文件
                }
            }
    


    导出Excel工具类

    public void exportExcel(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern,HSSFWorkbook workbook)  
        {  
            // 声明一个工作薄   生成一个表格  
            HSSFSheet sheet = workbook.getSheet(title);
            // 设置表格默认列宽度为15个字节  
            sheet.setDefaultColumnWidth((short) 15);  
            // 生成一个样式  
            HSSFCellStyle style = workbook.createCellStyle();  
            // 设置这些样式  
            style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);  
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);  
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);  
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
            // 生成一个字体  
            HSSFFont font = workbook.createFont();  
            font.setColor(HSSFColor.VIOLET.index);  
            font.setFontHeightInPoints((short) 12);  
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
            // 把字体应用到当前的样式  
            style.setFont(font);  
            // 生成并设置另一个样式  
            HSSFCellStyle style2 = workbook.createCellStyle();  
            style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);  
            style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
            style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
            style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
            style2.setBorderRight(HSSFCellStyle.BORDER_THIN);  
            style2.setBorderTop(HSSFCellStyle.BORDER_THIN);  
            style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
            style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
            // 生成另一个字体  
            HSSFFont font2 = workbook.createFont();  
            font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);  
            // 把字体应用到当前的样式  
            style2.setFont(font2);  
            // 声明一个画图的顶级管理器  
            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
            // 定义注释的大小和位置,详见文档  
            HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));  
            // 设置注释内容  
            comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));  
            // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.  
            comment.setAuthor("leno");  
    
            // 产生表格标题行  
            HSSFRow row = sheet.createRow(0);  
            for (short i = 0; i < headers.length; i++)  
            {  
                HSSFCell cell = row.createCell(i);  
                cell.setCellStyle(style);  
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);  
                cell.setCellValue(text);  
            }  
            // 遍历集合数据,产生数据行  
            Iterator<T> it = dataset.iterator();  
            int index = 0;  
            while (it.hasNext())  
            {  
                index++;  
                row = sheet.createRow(index);  
                T t = (T) it.next();  
                // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值  
                Field[] fields = t.getClass().getDeclaredFields();  
                for (short i = 0; i < fields.length; i++)  
                {  
                    HSSFCell cell = row.createCell(i);  
                    cell.setCellStyle(style2);  
                    Field field = fields[i];  
                    String fieldName = field.getName();  
                    String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);  
                    try  
                    {  
                        Class tCls = t.getClass();  
                        Method getMethod = tCls.getMethod(getMethodName, new Class[] {});  
                        Object value = getMethod.invoke(t, new Object[] {});  
                        // 判断值的类型后进行强制类型转换  
                        String textValue = null;  
                        if (value instanceof Boolean)  
                        {  
                            boolean bValue = (Boolean) value;  
                            textValue = "男";  
                            if (!bValue)  
                            {  
                                textValue = "女";  
                            }  
                        }  
                        else if (value instanceof Date)  
                        {  
                            Date date = (Date) value;  
                            SimpleDateFormat sdf = new SimpleDateFormat(pattern);  
                            textValue = sdf.format(date);  
                        }  
                        else if (value instanceof byte[])  
                        {  
                            // 有图片时,设置行高为60px;  
                            row.setHeightInPoints(60);  
                            // 设置图片所在列宽度为80px,注意这里单位的一个换算  
                            sheet.setColumnWidth(i, (short) (35.7 * 80));  
                            // sheet.autoSizeColumn(i);  
                            byte[] bsValue = (byte[]) value;  
                            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,1023, 255, (short) 6, index, (short) 6, index);  
                            anchor.setAnchorType(2);  
                            patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));  
                        }  
                        else  
                        {  
                            // 其它数据类型都当作字符串简单处理  
                            textValue = value == null? "": value.toString();  
                        }  
                        // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成  
                        if (textValue != null)  
                        {  
                            Pattern p = Pattern.compile("^//d+(//.//d+)?$");  
                            Matcher matcher = p.matcher(textValue);  
                            if (matcher.matches())  
                            {  
                                // 是数字当作double处理  
                                cell.setCellValue(Double.parseDouble(textValue));  
                            }  
                            else  
                            {  
                                HSSFRichTextString richString = new HSSFRichTextString(textValue);  
                                HSSFFont font3 = workbook.createFont();  
                                font3.setColor(HSSFColor.BLUE.index);  
                                richString.applyFont(font3);  
                                cell.setCellValue(richString);  
                            }  
                        }  
                    }  
                    catch (SecurityException e)  
                    {  
                        e.printStackTrace();  
                    }  
                    catch (NoSuchMethodException e)  
                    {  
                        e.printStackTrace();  
                    }  
                    catch (IllegalArgumentException e)  
                    {  
                        e.printStackTrace();  
                    }  
                    catch (IllegalAccessException e)  
                    {  
                        e.printStackTrace();  
                    }  
                    catch (InvocationTargetException e)  
                    {  
                        e.printStackTrace();  
                    }  
                    finally  
                    {  
                        // 清理资源  
                    }  
                }  
            }  
        } 
    


    小结
    Excel数据的导出大功告成了,个人感觉这个导出的工具类还是很好用的,希望大家能喜欢! 

    展开全文
  • 本实例可以把多个不同对象集合或者一个对象集合的数据导出到Excel表格中,能实现最大通用化。
  • java后台将数据导出到Excel表格

    千次阅读 2018-11-30 15:48:10
     * 设置导出xls文件的表头   */   public static final String[] TestToXls = { "变电站","运维班", "记录时间","设备类型", "操作", "设备名称"...
  • 前端页面点击导出jqgrid表格为excel表格代码,有表格样式设置的代码,可以参考一下,这是我刚开始工作的时候写的,希望可以帮助像我一样的菜鸟。
  • Java导出数据到Excel (超详细)

    千次阅读 2019-03-30 21:52:43
    Java中对于Excel的支持有很多种,比如说JXL,POI等。我这边使用的是POI进行一个Excel的操作,下面我会简单分享下POI组件的使用,以及我使用比较多一个工具类。 POI poi组件是由Apache提供的组件包...
  • 主要介绍了Java导出网页表格Excel过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 最近项目需要导出数据到Excel 表格中,在包装好获取表格方法之后,剩下的就是往单元格中添加数据和添加标题。写了一两个地方之后发现设置数据这块东西基本都是类似的重复代码,无非就是设置的数据不一样而已,看到...
  • java导出图片到excel

    2017-10-13 10:00:10
    java导出内容以及图片execl中,由于客户的骚需求,不得不进行一些不情愿的开发。文档仅供思路参考。谢谢
  • 主要为大家详细介绍了java导出数据库中Excel表格数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java利用poi导出excel表格
  • 目前java框架中能够生成excel文件的的确不少,但是,能够生成大数据量的excel框架,我倒是没发现,一般数据量大了都会出现内存溢出,所以,生成大数据量的excel文件要返璞归真,用java的基础技术,IO流来实现。...
  • 能够实现「导入/导出 Excel」的第三方常用类库有 Apache poi、Java Excel(JXL)和阿里巴巴开源的 Easyexcel 等。这么多类库该怎么选呢?在这里小编给大家推荐阿里巴巴开源的「Easyexcel」。 性能对比 poi 和 jxl ...
  • Java导出数据到Excel文件中,支持多页签形式,如通过Java导出一个名为“各部门人员列表”,然后在文件中有三个页签,分别为“研发部”、“综合部”、“财务部”。其中这三个页签里面的数据就是通过Java导出到Excel...
  • Java利用poi导出excel表格.zipJava利用poi导出excel表格.zip
  • 自己实现的一个将数据从数据库中查询出来导出到Excel表格的类,大家要是用到了,可以看看
  • java实现mysql数据库的表导出到excel文件,亲自测试是可以运行的,包含jdbc编程的jar包
  • java百万条数据导出到excel表格

    千次阅读 2019-03-25 12:34:38
    wps的EXCEL最多支持1048576行,xls格式的表格文件最多支持65536行,而xlsx格式的表格文件则支持1048576行。1.jar包 <dependency> <groupId>org.springframework.boot</groupId> <...
  • Java读取并导出Word中的表格(Excel),导出文件为Excel
  • java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据,导出数据到Excel,Excel文件不存在会创建。 博客:https://blog.csdn.net/qq_37902949/article/details/81230640
  • Java代码将数据导出到Excel

    千次阅读 2017-11-07 16:37:53
    Java中将数据导出到Excel表格文件
  • 主要有一下几步: 1.导入需要的jar:freemarker-2.3.19.jar。...2.根据需要作出导出模板 3.在WebRoot下面建template文件夹,把制作的模板扔这个文件夹下面 4.编写核心代码 具体实施细节: 制作模板:
  • 主要介绍了Java实现批量导入excel表格数据到数据库中的方法,结合实例形式详细分析了java导入Excel数据到数据库的具体步骤与相关操作技巧,需要的朋友可以参考下
  • 利用Java+JavaScript从页面导出数据到Excel表格 先来几张效果图,再贴代码, 第一步点击导出按钮 第二步点击确认 最后点击左下角表格打开Excel,查看导出数据是否完整 具体实现如下 JavaScript...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,090
精华内容 7,236
关键字:

java导出数据到excel表格

java 订阅