精华内容
下载资源
问答
  • 1、需求将用户id、姓名及其各类型假期剩余天数导出数据库中;将Excel文件命名为用户假期信息表-2019-06-10样式的,日期是当天日期;1.1、设计导出文件外观1.2、设计导出内容样式前端的基本上不用写了,涉及到的...

    1、需求

    将用户id、姓名及其各类型假期剩余天数导出到数据库中;

    将Excel文件命名为用户假期信息表-2019-06-10样式的,日期是当天日期;

    1.1、设计导出文件外观

    eb13c5c4ca20446e8446739661f23ca1.png

    1.2、设计导出内容样式

    9a36241867528beeeb2c6e05d2207114.png

    前端的基本上不用写了,涉及到的关键点不算多从后台controller开始写;

    2、控制层 Controller

    2.1、exportHolidy方法

    详细注解在代码中

    @FbootApiButton(note = "导出")

    @RequiresPermissions("oa:userholidy:exportHolidy")

    @FbootLog(value = "导出员工假期数", module = "OaUserHolidy")

    @GetMapping("/exportHolidy")

    @ResponseBody

    public void exportHolidy(

    //从前台传递来的有用户姓名、性别、状态,这是为了方便查询导出对应人员的假期信息的

    @RequestParam("userName") String userName,

    @RequestParam("gender") Integer gender,

    @RequestParam("status") Integer status,

    HttpServletResponse response

    ) {

    OutputStream outputStream = null;

    try {

    @SuppressWarnings("resource")

    // 在此处创建wk,是excel的文档对象,用于接收service层处理后的数据;

    HSSFWorkbook wk = new HSSFWorkbook();

    // 创建一个查询参数对象,此对象代码如下UserHolidyParam 代码所示;

    UserHolidyParam param = new UserHolidyParam();

    // 将查询用户的查询条件参数放入到查询参数对象中

    param.setName(userName);

    param.setGender(gender);

    param.setStatus(status);

    // 调用service层的进一步处理方法,将查询参数对象以及response返回对象传递过去

    wk = this.service.exportAllHolidyInfo(response, param);

    // 给生成的Excel表格命名

    String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

    String name = "用户假期信息表-"+ str + ".xls";

    response.setCharacterEncoding("UTF-8");

    response.setContentType("application/octet-stream;charset=utf-8");

    response.setHeader("Content-disposition", "attachment;filename=" + new String(name.getBytes(),"iso-8859-1"));// 默认Excel名称

    // 将返回对象中的需要输出的数据取出

    outputStream = response.getOutputStream();

    // 使用write方法写入到Excel对象中去

    wk.write(outputStream);

    // 关闭Excel对象

    wk.close();

    } catch (Exception e) {

    e.printStackTrace();

    }finally {

    try {

    outputStream.flush();

    outputStream.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    2.2、UserHolidyParam查询参数对象

    此对象在controller层中用到过,主要是存放前台的查询条件参数的,主要就是几个属性,不需要过多的解释;

    package cn.com.oa.leave.controller.vo;

    /**

    * @Author : QTL

    * @Version: 2019年5月31日 上午9:26:22

    * @Descript: 用户假期 --- 查询VO

    *

    */

    public class UserHolidyParam implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    /**

    * 姓名

    */

    private String name;

    /**

    * 状态

    */

    private Integer status;

    /**

    * 性别

    */

    private Integer gender;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public Integer getStatus() {

    return status;

    }

    public void setStatus(Integer status) {

    this.status = status;

    }

    public Integer getGender() {

    return gender;

    }

    public void setGender(Integer gender) {

    this.gender = gender;

    }

    }

    3、业务逻辑层Service

    3.1、exportAllHolidyInfo方法

    /**

    * 用户假期 --- 导出

    */

    @Override

    public HSSFWorkbook exportAllHolidyInfo(HttpServletResponse response, UserHolidyParam param) {

    // 调用Dao层,查询得到的相应人员的数据存到list集合对象中,由于查到的数据部是同

    // 一张表中的,比如用户姓名、id在用户表中,用户id与每种假期剩余天数在假期表中,

    // 因此需要一个接收对象(ExportHolidyVo)来更方便的接收这一堆数据,接收对象具

    // 体代码请看下面的ExportHolidyVo对象代码

    List exportDate = this.holidyDao.exportAllHolidyInfo(param);

    // 创建excel对象

    HSSFWorkbook wk = new HSSFWorkbook();

    // 创建一张用户假期信息表

    HSSFSheet sheet = wk.createSheet("用户假期信息表");

    // 创建第一行

    HSSFRow largeTitle = sheet.createRow(0);

    // 创建第一行的第一个单元格

    HSSFCell cell = largeTitle.createCell(0);

    // 合并单元格CellRangeAddress构造参数依次表示起始行,截止行,起始列,截至列。

    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 9));

    // 向处理好的单元格中写入大标题

    cell.setCellValue("用户假期信息");

    // 创建第二行:第二行是写各个列的小标题的;

    HSSFRow smallTitle = sheet.createRow(1);

    // 设置表格填充(默认列宽为15个字节)

    smallTitle.createCell(0).setCellValue("用户ID");

    smallTitle.createCell(1).setCellValue("用户名称");

    smallTitle.createCell(2).setCellValue("年假");

    smallTitle.createCell(3).setCellValue("事假");

    smallTitle.createCell(4).setCellValue("病假");

    smallTitle.createCell(5).setCellValue("婚假");

    smallTitle.createCell(6).setCellValue("产假");

    smallTitle.createCell(7).setCellValue("陪产假");

    smallTitle.createCell(8).setCellValue("丧假");

    smallTitle.createCell(9).setCellValue("弹性假期");

    // 判断查询到的数据集合是否为控

    if (!exportDate.isEmpty()) {

    // 不为空的话则开始循环集合中的每个元素,并将元素中的每一个子元素定位到相应的单元格中

    for (int i = 0; i < exportDate.size(); i++) {

    // i+2的原因在在于大标题和小标题均占用了一行,自能从第三行开始,另,Excel对象的行、列索引均是从0开始,计算时小心

    HSSFRow row = sheet.createRow(i + 2);

    // row.createCell(x)以为将row对象的这一行的第x列上使用setCellValue()方法放入对象的数据

    // 下面一行中.setCellValue()方法中我拼接的有"'",是因此行放入的是用户的id,20位长的数

    // 字串,但是Excel表格中对于过长的数字串会进行处理,展示为一种计算式类型的,若想保

    // 持原数据不变,在原数据前加上英文的单引号即可

    row.createCell(0).setCellValue("'" + exportDate.get(i).getId().toString());

    row.createCell(1).setCellValue(exportDate.get(i).getName());

    row.createCell(2).setCellValue(exportDate.get(i).getAnnualLeave());

    row.createCell(3).setCellValue(exportDate.get(i).getLeaveForReasons());

    row.createCell(4).setCellValue(exportDate.get(i).getSickLeave());

    row.createCell(5).setCellValue(exportDate.get(i).getMarriageHoliday());

    row.createCell(6).setCellValue(exportDate.get(i).getMaternityLeave());

    row.createCell(7).setCellValue(exportDate.get(i).getPaternityLeave());

    row.createCell(8).setCellValue(exportDate.get(i).getFuneralLeave());

    row.createCell(9).setCellValue(exportDate.get(i).getFlexibleVacation());

    }

    }

    // 无论是否进行装载,均要返回一个Excel对象(下载Excel模板的时候使用起来很方便)

    return wk;

    }

    3.2、ExportHolidyVo 查询结果接收对象

    package cn.com.oa.leave.controller.vo;

    import com.baomidou.mybatisplus.annotation.IdType;

    import com.baomidou.mybatisplus.annotation.TableId;

    /**

    * @Author : QTL

    * @Version: 2019年6月3日 下午5:06:18

    * @Descript: 用户假期信息导出

    *

    */

    public class ExportHolidyVo implements java.io.Serializable{

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.ID_WORKER)

    private Long id;

    /**

    * 姓名

    */

    private String name;

    /**

    * 年假

    */

    private Float annualLeave;

    /**

    * 事假

    */

    private Float leaveForReasons;

    /**

    * 病假

    */

    private Float sickLeave;

    /**

    * 婚假

    */

    private Float marriageHoliday;

    /**

    * 产假

    */

    private Float maternityLeave;

    /**

    * 陪产假

    */

    private Float paternityLeave;

    /**

    * 丧假

    */

    private Float funeralLeave;

    /**

    * 弹性假期

    */

    private Float flexibleVacation;

    public Long getId() {

    return id;

    }

    public void setId(Long id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public Float getAnnualLeave() {

    return annualLeave;

    }

    public void setAnnualLeave(Float annualLeave) {

    this.annualLeave = annualLeave;

    }

    public Float getLeaveForReasons() {

    return leaveForReasons;

    }

    public void setLeaveForReasons(Float leaveForReasons) {

    this.leaveForReasons = leaveForReasons;

    }

    public Float getSickLeave() {

    return sickLeave;

    }

    public void setSickLeave(Float sickLeave) {

    this.sickLeave = sickLeave;

    }

    public Float getMarriageHoliday() {

    return marriageHoliday;

    }

    public void setMarriageHoliday(Float marriageHoliday) {

    this.marriageHoliday = marriageHoliday;

    }

    public Float getMaternityLeave() {

    return maternityLeave;

    }

    public void setMaternityLeave(Float maternityLeave) {

    this.maternityLeave = maternityLeave;

    }

    public Float getPaternityLeave() {

    return paternityLeave;

    }

    public void setPaternityLeave(Float paternityLeave) {

    this.paternityLeave = paternityLeave;

    }

    public Float getFuneralLeave() {

    return funeralLeave;

    }

    public void setFuneralLeave(Float funeralLeave) {

    this.funeralLeave = funeralLeave;

    }

    public Float getFlexibleVacation() {

    return flexibleVacation;

    }

    public void setFlexibleVacation(Float flexibleVacation) {

    this.flexibleVacation = flexibleVacation;

    }

    }

    再往后的Dao层数据库查询什么的就不再写了,写这个主要是为了记录如何就查出数据与Excel对象像结合的一个过程;

    pass:肯定还有更为便捷高效的方法,希望大家多加指正!

    《END》

    展开全文
  • Java 导出数据库数据到Excel表格中1、需求1.1、设计导出文件外观:1.2、设计导出内容样式:2、控制层 Controller2.1、exportHolidy方法2.2、UserHolidyParam查询参数对象3、Service层3.1、exportAllHolidyInfo方法...


    1、需求

    • 将用户id、姓名及其各类型假期剩余天数导出到数据库中;
    • 将Excel文件命名为用户假期信息表-2019-06-10样式的,日期是当天日期;

    1.1、设计导出文件外观

    在这里插入图片描述

    1.2、设计导出内容样式

    在这里插入图片描述

    前端的基本上不用写了,涉及到的关键点不算多从后台controller开始写;


    2、控制层 Controller

    2.1、exportHolidy方法

    详细注解在代码中

    @FbootApiButton(note = "导出")
    	@RequiresPermissions("oa:userholidy:exportHolidy")
    	@FbootLog(value = "导出员工假期数", module = "OaUserHolidy")
    	@GetMapping("/exportHolidy")
    	@ResponseBody
    	public void exportHolidy(
    		 	//从前台传递来的有用户姓名、性别、状态,这是为了方便查询导出对应人员的假期信息的
    			@RequestParam("userName") String userName,
    			@RequestParam("gender") Integer gender, 
    			@RequestParam("status") Integer status,
    			HttpServletResponse response
    			) {
    		OutputStream outputStream = null;
    		try {
    			@SuppressWarnings("resource")
    			// 在此处创建wk,是excel的文档对象,用于接收service层处理后的数据;
    			HSSFWorkbook wk = new HSSFWorkbook();
    			// 创建一个查询参数对象,此对象代码如下UserHolidyParam 代码所示;
    			UserHolidyParam param = new UserHolidyParam();
    			// 将查询用户的查询条件参数放入到查询参数对象中
    			param.setName(userName);
    			param.setGender(gender);
    			param.setStatus(status);
    			// 调用service层的进一步处理方法,将查询参数对象以及response返回对象传递过去
    			wk = this.service.exportAllHolidyInfo(response, param);
    			// 给生成的Excel表格命名
    			String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    			String name = "用户假期信息表-"+ str + ".xls";
    			response.setCharacterEncoding("UTF-8");
    			response.setContentType("application/octet-stream;charset=utf-8");
    			response.setHeader("Content-disposition", "attachment;filename=" + new String(name.getBytes(),"iso-8859-1"));// 默认Excel名称
    			// 将返回对象中的需要输出的数据取出
    			outputStream = response.getOutputStream();			
    			// 使用write方法写入到Excel对象中去
    			wk.write(outputStream);
    			// 关闭Excel对象
    			wk.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				outputStream.flush();
    				outputStream.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    

    2.2、UserHolidyParam查询参数对象

    此对象在controller层中用到过,主要是存放前台的查询条件参数的,主要就是几个属性,不需要过多的解释;

    package cn.com.oa.leave.controller.vo;
    
    /**
     * @Author : QTL
     * @Version: 2019年5月31日 上午9:26:22
     * @Descript: 用户假期 --- 查询VO
     * 
     */
    public class UserHolidyParam implements java.io.Serializable {
    
    	private static final long serialVersionUID = 1L;
    
    	/**
    	 * 姓名
    	 */
    	private String name;
    	/**
    	 * 状态
    	 */
    	private Integer status;
    	/**
    	 * 性别
    	 */
    	private Integer gender;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Integer getStatus() {
    		return status;
    	}
    	public void setStatus(Integer status) {
    		this.status = status;
    	}
    	public Integer getGender() {
    		return gender;
    	}
    	public void setGender(Integer gender) {
    		this.gender = gender;
    	}
    }
    
    

    3、业务逻辑层Service

    3.1、exportAllHolidyInfo方法

    /**
    	 * 用户假期 --- 导出
    	 */
    	@Override
    	public HSSFWorkbook exportAllHolidyInfo(HttpServletResponse response, UserHolidyParam param) {
    		// 调用Dao层,查询得到的相应人员的数据存到list集合对象中,由于查到的数据部是同
    		// 一张表中的,比如用户姓名、id在用户表中,用户id与每种假期剩余天数在假期表中,
    		// 因此需要一个接收对象(ExportHolidyVo)来更方便的接收这一堆数据,接收对象具
    		// 体代码请看下面的ExportHolidyVo对象代码
    		List<ExportHolidyVo> exportDate = this.holidyDao.exportAllHolidyInfo(param);
    		// 创建excel对象
    		HSSFWorkbook wk = new HSSFWorkbook();
    		// 创建一张用户假期信息表
    		HSSFSheet sheet = wk.createSheet("用户假期信息表");
    		// 创建第一行
    		HSSFRow largeTitle = sheet.createRow(0);
    		// 创建第一行的第一个单元格
    		HSSFCell cell = largeTitle.createCell(0);
    		// 合并单元格CellRangeAddress构造参数依次表示起始行,截止行,起始列,截至列。
    		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 9));
    		// 向处理好的单元格中写入大标题
    		cell.setCellValue("用户假期信息");
    		
    		// 创建第二行:第二行是写各个列的小标题的;
    		HSSFRow smallTitle = sheet.createRow(1);
    		// 设置表格填充(默认列宽为15个字节)
    		smallTitle.createCell(0).setCellValue("用户ID");
    		smallTitle.createCell(1).setCellValue("用户名称");
    		smallTitle.createCell(2).setCellValue("年假");
    		smallTitle.createCell(3).setCellValue("事假");
    		smallTitle.createCell(4).setCellValue("病假");
    		smallTitle.createCell(5).setCellValue("婚假");
    		smallTitle.createCell(6).setCellValue("产假");
    		smallTitle.createCell(7).setCellValue("陪产假");
    		smallTitle.createCell(8).setCellValue("丧假");
    		smallTitle.createCell(9).setCellValue("弹性假期");
    		// 判断查询到的数据集合是否为控
    		if (!exportDate.isEmpty()) {
    			// 不为空的话则开始循环集合中的每个元素,并将元素中的每一个子元素定位到相应的单元格中
    			for (int i = 0; i < exportDate.size(); i++) {
    				// i+2的原因在在于大标题和小标题均占用了一行,自能从第三行开始,另,Excel对象的行、列索引均是从0开始,计算时小心
    				HSSFRow row = sheet.createRow(i + 2);
    				// row.createCell(x)以为将row对象的这一行的第x列上使用setCellValue()方法放入对象的数据
    				// 下面一行中.setCellValue()方法中我拼接的有"'",是因此行放入的是用户的id,20位长的数
    				// 字串,但是Excel表格中对于过长的数字串会进行处理,展示为一种计算式类型的,若想保
    				// 持原数据不变,在原数据前加上英文的单引号即可
    				row.createCell(0).setCellValue("'" + exportDate.get(i).getId().toString());
    				row.createCell(1).setCellValue(exportDate.get(i).getName());
    				row.createCell(2).setCellValue(exportDate.get(i).getAnnualLeave());
    				row.createCell(3).setCellValue(exportDate.get(i).getLeaveForReasons());
    				row.createCell(4).setCellValue(exportDate.get(i).getSickLeave());
    				row.createCell(5).setCellValue(exportDate.get(i).getMarriageHoliday());
    				row.createCell(6).setCellValue(exportDate.get(i).getMaternityLeave());
    				row.createCell(7).setCellValue(exportDate.get(i).getPaternityLeave());
    				row.createCell(8).setCellValue(exportDate.get(i).getFuneralLeave());
    				row.createCell(9).setCellValue(exportDate.get(i).getFlexibleVacation());
    			}
    		}
    		// 无论是否进行装载,均要返回一个Excel对象(下载Excel模板的时候使用起来很方便)
    		return wk;
    	}
    
    

    3.2、ExportHolidyVo 查询结果接收对象

    package cn.com.oa.leave.controller.vo;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    
    /**
     * @Author : QTL
     * @Version: 2019年6月3日 下午5:06:18
     * @Descript: 用户假期信息导出
     * 
     */
    public class ExportHolidyVo implements java.io.Serializable{
    
    	private static final long serialVersionUID = 1L;
    	
    	@TableId(type = IdType.ID_WORKER)
    	private Long id;
    	/**
    	 * 姓名
    	 */
    	private String name;
    	/**
    	 * 年假
    	 */
    	private Float annualLeave;
    	/**
    	 * 事假
    	 */
    	private Float leaveForReasons;
    	/**
    	 * 病假
    	 */
    	private Float sickLeave;
    	/**
    	 * 婚假
    	 */
    	private Float marriageHoliday;
    	/**
    	 * 产假
    	 */
    	private Float maternityLeave;
    	/**
    	 * 陪产假
    	 */
    	private Float paternityLeave;
    	/**
    	 * 丧假
    	 */
    	private Float funeralLeave;
    	/**
    	 * 弹性假期
    	 */
    	private Float flexibleVacation;
    	
    	public Long getId() {
    		return id;
    	}
    	public void setId(Long id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Float getAnnualLeave() {
    		return annualLeave;
    	}
    	public void setAnnualLeave(Float annualLeave) {
    		this.annualLeave = annualLeave;
    	}
    	public Float getLeaveForReasons() {
    		return leaveForReasons;
    	}
    	public void setLeaveForReasons(Float leaveForReasons) {
    		this.leaveForReasons = leaveForReasons;
    	}
    	public Float getSickLeave() {
    		return sickLeave;
    	}
    	public void setSickLeave(Float sickLeave) {
    		this.sickLeave = sickLeave;
    	}
    	public Float getMarriageHoliday() {
    		return marriageHoliday;
    	}
    	public void setMarriageHoliday(Float marriageHoliday) {
    		this.marriageHoliday = marriageHoliday;
    	}
    	public Float getMaternityLeave() {
    		return maternityLeave;
    	}
    	public void setMaternityLeave(Float maternityLeave) {
    		this.maternityLeave = maternityLeave;
    	}
    	public Float getPaternityLeave() {
    		return paternityLeave;
    	}
    	public void setPaternityLeave(Float paternityLeave) {
    		this.paternityLeave = paternityLeave;
    	}
    	public Float getFuneralLeave() {
    		return funeralLeave;
    	}
    	public void setFuneralLeave(Float funeralLeave) {
    		this.funeralLeave = funeralLeave;
    	}
    	public Float getFlexibleVacation() {
    		return flexibleVacation;
    	}
    	public void setFlexibleVacation(Float flexibleVacation) {
    		this.flexibleVacation = flexibleVacation;
    	}
    }
    
    

    再往后的Dao层数据库查询什么的就不再写了,写这个主要是为了记录如何就查出数据与Excel对象像结合的一个过程;


    pass:肯定还有更为便捷高效的方法,希望大家多加指正!


    《END》

    展开全文
  • Java导出数据库数据到Excel表格三级动态表头 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本...

    Java导出数据库数据到Excel表格三级动态表头

    1 控制层代码

    //测试生成表头
        @RequestMapping(value = "/export", method = RequestMethod.GET)
        public void export (HttpServletResponse response) {
            OutputStream outputStream = null;
            try {
                // 在此处创建wk,是excel的文档对象,用于接收service层处理后的数据;
                HSSFWorkbook wk = new HSSFWorkbook();
                // 创建一个查询参数对象,此对象代码如下UserHolidyParam 代码所示;
    
                // 调用service层的进一步处理方法,将查询参数对象以及response返回对象传递过去
                wk = userService.test();
                // 给生成的Excel表格命名
                String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
                String name = "用户假期信息表-"+ str + ".xls";
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/octet-stream;charset=utf-8");
                response.setHeader("Content-disposition", "attachment;filename=" + new String(name.getBytes(),"iso-8859-1"));// 默认Excel名称
                // 将返回对象中的需要输出的数据取出
                outputStream = response.getOutputStream();
                // 使用write方法写入到Excel对象中去
                wk.write(outputStream);
                // 关闭Excel对象
                wk.close();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    outputStream.flush();
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    2 逻辑层代码

    public HSSFWorkbook test() {
            HSSFWorkbook wb=new HSSFWorkbook();
    
            HSSFSheet sheet=wb.createSheet("员工信息");//创建sheet
            String titleString = "体型:身高_体重,住址,三高:血压_血糖,TA:TA1=TA11@TA12_TA2,妈妈";
            HSSFRow row1 = sheet.createRow(0);
            HSSFRow row2 = sheet.createRow(1);
            HSSFRow row3 = sheet.createRow(2);
            String[]  headers=titleString.split(",");
    
            for(short i = 0, n = 0; i < headers.length; i++){//i是headers的索引,n是Excel的索引
                HSSFCell cellT = row1.createCell(n);
                HSSFRichTextString text = null;
                if(headers[i].contains(":")){//有2级标题
                    if(headers[i].contains("=")){//有3级标题    TA:TA1=TA11@TA12_TA2
                        //确定3级标题的个数,确定1级标题的总长度,同时也是把各级标题分解开
                        String[] temp = headers[i].split(":");                      //分级1级标题temp[0]是标题文字,temp[1]是子标题
                        text = new HSSFRichTextString(temp[0]);
    
                        String[] childlv2=temp[1].split("_");                       //获取temp2级标题的数组
                        int ttlength=0;
                        short row2index=n;
                        short row3index=n;
    
                        for(int k=0;k<childlv2.length;k++){                         //循环计算全部的2级标题对应的子标题总数
                            String childlv2_1=childlv2[k];                          //取到2级标题的第一个
                            HSSFRichTextString textLV2 = null;
                            HSSFCell cellChildlv2 = row2.createCell(n);   //根据n的index进行循环
    
                            //一层层的向下取,取到3级,并向下进行补充
                            if(childlv2_1.contains("=")){//2级子节点,有3级子节点
                                String[] childlv2_all = childlv2_1.split("=");
                                textLV2 = new HSSFRichTextString(childlv2_all[0]);
                                String childlv3_1 = childlv2_all[1];
                                if(childlv3_1.contains("@")){//这里说明2级子节点有多个3级子节点,那么2级子节点就需要合并,同时为
                                    String[] childlv3_all=childlv3_1.split("@");
                                    ttlength=ttlength+childlv3_all.length;
                                    //这里进行2级节点的合并,因为有多个
                                    sheet.addMergedRegion(new CellRangeAddress(1, 1, (short) n,  (short)(n + childlv3_all.length - 1)));
                                    //开始写3级节点
                                    for(String childlv3Text : childlv3_all){
                                        HSSFCell cellChildlv3 = row3.createCell(row3index++);
                                        cellChildlv3.setCellValue(new HSSFRichTextString(childlv3Text));
                                        n++;//进行EXCEL索引叠加
                                    }
                                    //补充2级节点的空cell
                                    for(int x=0;x<childlv3_all.length-1;x++){
                                        HSSFCell cellChildlv2Blank = row2.createCell(++row2index);
                                    }
                                } else{//这里说明2级子节点只有一个3级子节点,那么就不用合并和补充空格啦
                                    ttlength=ttlength+1;
                                    //写入3级节点的cell
                                    HSSFCell cellChildlv3 = row3.createCell(row3index++);
                                    cellChildlv3.setCellValue(new HSSFRichTextString(childlv3_1));
                                    n++;//Excel索引节点的递增
                                }
                            }else{//2级子几点没有3及子节点
                                textLV2=new HSSFRichTextString(childlv2_1);
                                ttlength=ttlength+1;
                                //这个2级节点没有子节点,那么就要合并3row
                                sheet.addMergedRegion(new CellRangeAddress(1,  2,  row3index, row3index));
    //                            补充3row的cell空格
                                HSSFCell cellChildlv3Blank = row3.createCell(row3index++);
                                n++;//进行Excel的索引递增,避免写到一个格子里面去
                            }
                            cellChildlv2.setCellValue(textLV2);
                        }
                        //进行3层总长度的cell合并
                        sheet.addMergedRegion(new CellRangeAddress(0,0, (short)(n-ttlength),  (short) (n-1)));
                        //插入第一行的补充的空格
                        short tr1 = n;
                        for(int j = 0; j < ttlength -1; j++){//循环补充父标题的空格,因为已经定义啦一个cell所以要减1
                            HSSFCell cellTitleBlank = row1.createCell(++tr1);//因为开始已经定义啦一个cell所以就是 ++tr1
                        }
    
                    }else{//只有2级标题
                        String[] temp = headers[i].split(":");//子标题的分割
                        text = new HSSFRichTextString(temp[0]);
                        String[] childlv2 = temp[1].split("_");
                        //只有2及标题,那么1级标题要占1行,2级标题占2行
                        sheet.addMergedRegion(new CellRangeAddress(0,  0, n, (short) (n + childlv2.length -1)));
                        //2级标题占两行所以需要和3行合并
                        for (int o = n; o < n + childlv2.length; o++) {
                            sheet.addMergedRegion(new CellRangeAddress(1,  2, o, (short) o));
                        }
                        short tr1 = n;
                        short tr2 = n;
                        //对对应的空行进行补充,第一行
                        for(int j = 0; j < childlv2.length -1; j++){//循环补充父标题的空格,因为已经定义啦一个cell所以要减1
                            HSSFCell cellTitleBlank = row1.createCell(++tr1);//因为开始已经定义啦一个cell所以就是 ++tr1
                        }
                        //对第二行进行补充空格,从头开始
                        for(int k=0;k < childlv2.length; k++){//未定义cell,所以不减1
                            HSSFCell cellTitleBlank = row2.createCell(tr2++);//之前未进行定义,所以是tr2++
                            cellTitleBlank.setCellValue(new HSSFRichTextString(childlv2[k]));
                            n++;//这里进行啦EXCEL的索引递增,不然会都写到一个格子里面去
                        }
                    }
                }else{//只有1级标题
                    text = new HSSFRichTextString(headers[i]);
                    sheet.addMergedRegion(new CellRangeAddress(0, 2,n,  n));//没有子标题的时候自己独占两行
                    n++;
                }
                cellT.setCellValue(text);
            }
            return wb;
        }
    

    个人觉得这个代码比较繁琐,还有新的比较方便的代码逻辑正在研究

    展开全文
  • 项目中用到的导出数据到Excel记录下 需要包:poi-3.9.jar 页面代码: /** * 显示所有列,勾选需要导出的 * */ function exportModel(tableId){ var tableParams = getLocalStorageModel(tableId, ...

    项目中用到的导出数据到Excel记录下
    需要包:poi-3.9.jar

    页面代码:

     /**
      * 显示所有列,勾选需要导出的
      *
      */
     function exportModel(tableId){
    		var tableParams = getLocalStorageModel(tableId, "tableParams");
    		var totalHtml ='<div class="modal fade modal-primary" id="'+tableId +'-edit"  aria-hidden="true"><div class="modal-dialog" style="width: 200px;"><div class="modal-content">';
    		    totalHtml+='<div class="modal-header"><button type="button" class="close" οnclick="removeModal(\''+tableId+'\',\'edit\')">';
    		    totalHtml+='<span aria-hidden="true">×</span></button><h4 class="modal-title text-success" ng-class="text-success" id="'+tableId+'-edit-header"><i class="fa fa-plus"></i>'+$.i18n("exportData")+'</h4></div><div class="ng-scope" style="padding-top:15px;height: 290px;overflow-y: auto;">';
    		totalHtml+='<li style="border-bottom: 1px solid #00A2E9;height:30px;"><div class="pull-left"><label style="margin: 0 0 0 20px;"><input type="checkbox" id="'+tableId+'-export-checkAllBtn" οnchange="checkAllShowExportItems(\''+tableId+'\')"><span class="text"></span></label>'+$.i18n("check_all")+'</div></li>';
    		totalHtml+='<div id="'+tableId+'-export-RowPopId"></div>';
    		totalHtml+='</div><div class="modal-footer " style="background-color:#FFFFFF;"><button type="button" class="btn btn-primary" οnclick="sbmtExport(\''+tableId+'\')">'+$.i18n("exportData");
    		totalHtml+='</button><a class="btn btn-danger" οnclick="removeModal(\''+tableId+'\',\'edit\')">'+$.i18n("cancel")+'</a></div></div></div></div>';
    		$("body").append(totalHtml);
    		exportRowsModel(tableId,tableParams);
    		var $editModal = $('#'+tableId + "-edit"); 
    		$editModal.modal({backdrop: 'static'});
    		setTimeout(function () {
    			$editModal.find("span.error").remove();
    			$editModal.find("input.error").removeClass("error");
    	  	}, 200);
    	}
    
    
       function exportRowsModel(tableId, tableItems){
    		var selectRowsPopId = tableId + "-export-RowPopId";//显示列下拉框ID
    		var allCheckBtnId = tableId + "-export-checkAllBtn";//全选框ID
    		var i18nPrefix = getLocalStorageModel(tableId, "tableParams").i18nPrefix;
    		var html = "";
    		var selectItemsjson = tableItems.trs;
    		var len = selectItemsjson.length;
    		for(var i=0; i<len; i++){  
    			if(selectItemsjson[i].lastShow === false  || selectItemsjson[i].comType == "uploadFiles"){
    				continue;
    			}
    			html+= "<li οnclick='event.stopPropagation()'><label style='margin: 0 0 0 20px;'>"; 
    			html+= "<input type='checkbox'";
    			if(!(selectItemsjson[i].show === false)){
    				html+= " checked ";
    			}
    			var name = selectItemsjson[i].name;
    			var title = $.i18n(i18nPrefix + name)||$.i18n("db.common." + name);
    			html+= "name='"+selectRowsPopId+"' value='"+name+"' οnchange='changeShowExportItems(\""+tableId+"\")'>";
    			html+= "<span class='text'></span></label>"+title +"</li>"; 
    		} 
    		$("#"+selectRowsPopId).html(html); 
    		//是否勾选全选框
    		var chsub = $("input[name='"+selectRowsPopId+"']").length; //获取items的个数  
    		var checkedsub = $("input[name='"+selectRowsPopId+"']:checked").length; //获取选中的items的个数 
    		$("#"+allCheckBtnId).attr("checked", checkedsub == chsub);   
    	}
       
        function changeShowExportItems(tableId){
        	var selectRowsPopId = tableId + "-export-RowPopId";//显示列下拉框ID
        	var itemsLen = $("input[name='"+selectRowsPopId+"']").length; //获取items的个数  
            var checkedItemsLen = $("input[name='"+selectRowsPopId+"']:checked").length; //获取选中的items的个数
            if (itemsLen == checkedItemsLen) {  
              $("#" + tableId + "-export-checkAllBtn").prop("checked", true);  
            }else{
      	       $("#" + tableId + "-export-checkAllBtn").prop("checked", false); 
      	    }
        }
    	
    	function checkAllShowExportItems(tableId){    
     	    var isChecked = $("#" + tableId + "-export-checkAllBtn").prop('checked'); 
            $("input[name='"+tableId + "-export-RowPopId']").prop("checked", isChecked);
        }
    	
    	var exportProgressInterval;
    	function getExportProgress(tableId){
    		showExportProgressTip(tableId);
    		 //循环查看状态
    		exportProgressInterval = setInterval(function(){
    	         $.ajax({
    	             url: window.PATH + '/exportProgressServlet',
    	             type: 'POST',
    	             dataType: 'json',
    	             success: function (res) {
    	            	 if(res.isLogin == false){
    	            		 clearInterval(exportProgressInterval);
    	            	 }else{
    	            		 if(res.ex_status){
    	            			 $("#"+tableId+"-export-percent").html(100);
    	            			 clearInterval(exportProgressInterval); 
                        		 removeModal(tableId,'export-progress-modal');
    	            		 }else{
    	            			 if(res.ex_curCount >0){
    			            		 $("#"+tableId+"-export-curCount").html(res.ex_curCount);
    			            		 $("#"+tableId+"-export-totalCount").html(res.ex_totalCount);
    			                     if(res.ex_totalCount==0 || res.ex_curCount==0){
    			                    	 $("#"+tableId+"-export-percent").html(0);
    			                     }else{
    			                    	 $("#"+tableId+"-export-percent").html((res.ex_curCount*100/res.ex_totalCount).toFixed(2));
    			                    	 if(res.ex_totalCount == res.ex_curCount){
    			                    		 clearInterval(exportProgressInterval); 
    			                    		 removeModal(tableId,'export-progress-modal');
    			                    	 }
    			                     }
    			            	 }
    	            		 }
    	            	 }
    	             },
    	             error: function(){
    	                 console.log("error");
    	                 clearInterval(exportProgressInterval);
    	                 removeModal(tableId,'export-progress-modal');
    	             }
    	         });
    	     }, 100);
    	}
    	
    	function sbmtExport(tableId){
    		btnDisabledOrEnable(tableId+"-exportCsv",false,"darkorange");
    		 
    		var selectRowsPopId = tableId + "-export-RowPopId";//显示列下拉框ID
    		var checkedItems = $("input[name='"+selectRowsPopId+"']:checked");
    		var selectedItems='';
    		for(var i=0;i<checkedItems.length;i++){
    			if(i>0){
    			    selectedItems +=',';
    			}
    			selectedItems += $(checkedItems[i]).val();
    		}
    		var formData =new FormData();
    		formData.append("cx_selectedItems",selectedItems);
    		var queryParams = getSearchParams(tableId);
    		for (var key in queryParams){ 
    			formData.append(key,queryParams[key]);
    		}
    		if (selectedItems == '') {
                layer.msg($.i18n("select_fields_to_export"), { icon: 7, time: 1000 });
                return;
            }
    		var localUrl = getLocalStorageModel(tableId, "requestUrl"); 
            var url = window.PATH + localUrl + "export.ajax";
            var xhr = new XMLHttpRequest();
            //设置响应类型为blob类型
            xhr.responseType = "blob";
            xhr.onload = function () {
                if (this.status == "200") {
                               //获取响应文件流  
                    var blob = this.response;
                    var aElem = document.createElement('a');
                              //将文件流保存到a标签
                    aElem.href = window.URL.createObjectURL(blob);
                    aElem.download = new Date().format("yyyyMMddHHmmss") + Math.floor(Math.random()*10)+".xlsx";
                    aElem.onload = function (e) {
                        window.URL.revokeObjectURL(aElem.href);
                    };
                    $("body").append(aElem);    // 修复firefox中无法触发click
                    aElem.click();
                    $(aElem).remove();
                    clearInterval(exportProgressInterval);
                    removeModal(tableId,'export-progress-modal');
    	           	btnDisabledOrEnable(tableId+"-exportCsv",true,"darkorange");
                }
            }
    
            xhr.open("post", url, true);
            xhr.send(formData);
    		removeModal(tableId,'edit');
    		getExportProgress(tableId);
    	}
    function showExportProgressTip(tableId){
    		var totalHtml = '<div class="modal fade modal-primary" id="'+tableId +'-export-progress-modal"  aria-hidden="true"><div class="modal-dialog">'+
    	   		'<div class="modal-content">';
    	    	totalHtml += '<div class="modal-header"><button type="button" class="close" οnclick="removeModal(\''+tableId+'\',\'export-progress-modal\')"><span aria-hidden="true">&times;</span></button>';
    	   		totalHtml += '<h4 class="modal-title" ng-class="text-success" id="'+ tableId +'-edit-header"><i class="fa fa-list-alt"></i>'+$.i18n("exportDetails")+'</h4></div>';
    			totalHtml += '<div class="ng-scope" style="padding-top:15px;">';
    			totalHtml += '<div style="text-align: center;">';
    			totalHtml += '<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" style="height:40px;"><i class="fa fa-spinner fa-spin" aria-hidden="true" style="font-size:26px;color:#B0E2FF;"></i></div>';
    			totalHtml += '<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">';
    			totalHtml += $.i18n("export_total_number")+'&nbsp;<label id="'+tableId +'-export-totalCount" style="color:red;font-weight:bold;text-align:left;">0</label>,&nbsp;';
    			totalHtml += $.i18n("export_current_number")+'&nbsp;<label id="'+tableId +'-export-curCount" style="color:green;font-weight:bold;text-align:left;">0</label>&nbsp;';
    			totalHtml += '(<label id="'+tableId +'-export-percent" style="color:green;font-weight:bold;">0</label>%)</div>';
    			
    			totalHtml += '</div><div class="modal-footer " style="background-color:#FFFFFF;">';
    	        totalHtml += '<a class="btn btn-danger" οnclick="removeModal(\''+tableId+'\',\'export-progress-modal\')">'+ $.i18n("cancel")+'</a></div>';
    			$("body").append(totalHtml);
    			
    			var $editModal = $('#'+tableId + "-export-progress-modal"); 
    			$editModal.modal({backdrop: 'static'});
    				setTimeout(function () {
    					$editModal.find("span.error").remove();
    					$editModal.find("input.error").removeClass("error");
    			  	}, 200);
    	}
    

    上面提交后到控制层

    /**
         * ajax查询
         * @throws IOException 
         *
         */
        @RequestMapping(value = EUConst.URI_EXPORT_AJAX, method = RequestMethod.POST, produces = MediaTypes.JSON_UTF_8)
        @ResponseBody
        public void exportData(HttpServletRequest request, HttpServletResponse response) throws IOException{
        	String sid = request.getSession().getId();
        	ProgressSingleton.put(sid + EUConst.EX_STATUS,false);
            String fileSaveName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ new Random().nextInt(10);
            Map<String, Object> queryParam = ActionUtils.parseParameters(request, "cx_");
            List<String> headerList = Arrays.asList(queryParam.get("selectedItems").toString().split(",")); // 表格Titile 
            queryParam.remove("selectedItems");
            ExportExcelUtils ee = new ExportExcelUtils(CommonUtils.lang("menu.cdr_cdrEtms"),"db.tbCdr.",headerList); 
            if(!queryParam.isEmpty()){
            	 getQueryParam(queryParam);
                 if(!isNotEmpty(queryParam.get("LIKE-|-dev_id"))){
                	 TbAdmUser user = UserUtils.getUserProfile().getTbAdmUser();
                     Object[] devIds = devService.getDevIdsByAdmUserId(user.getUid());
                     if(devIds.length>0){
                    	 queryParam.put("IN-|-dev_id", StringUtils.join(devIds, ","));
                     }
                 } 
                 if(isNotEmpty(queryParam.get("LIKE-|-dev_id")) || isNotEmpty(queryParam.get("IN-|-dev_id"))){
                	 //初始化查询条件
                	 String conditions = cdrService.getConditions(queryParam);
                	 //根据条件获取需要查询的几张表    分表的时候根据时间来找出需要查询的表
                     String queryTables = cdrService.getTableNames(queryParam);
                     
                     queryParam.remove("GT-|-endTime");  //中间的表不需要加上时间条件搜索
     	 		     queryParam.remove("LTE-|-endTime");
     	 		     String notTimeConditions = cdrService.getConditions(queryParam);
     	 		     notTimeConditions = notTimeConditions.split("ORDER BY")[0];
     	 		    
                     //根据条件获取总数据条数    如:12万条数据
                	 int records = cdrService.getAllRows(conditions,queryTables);
                	 
                	 ProgressSingleton.put(sid + EUConst.EX_TOTAL_COUNT, records);
                	 
                	 //每次查询500条数据,在来根据总条数来计算需要查询的次数
                     int pages = records%1000==0?records/1000:records/1000+1;
                     int idx = 0;
                     String state = CommonUtils.lang("db.tbCdr.state")+":"+CommonUtils.lang("db.tbCdr.state.comData.str");
                     String subtype = CommonUtils.lang("db.tbCdr.subtype")+":"+CommonUtils.lang("db.tbCdr.subtype.comData.str");
                     Row row1 = ee.addRow(); 
     	 	         ee.addCell(row1,1,state);	
     	 	         ee.addCell(row1,2,subtype);
     	 	        
                     for (int i = 0; i < pages; i++) {
                    	 List<TbCdr> list = cdrService.queryPageList(i+1,1000,conditions,notTimeConditions,queryTables);
                    	 for (TbCdr tbCdr : list) {
                    		 if(idx>0 && idx % 60000 ==0){
                    			 ee.createSheetAndStyles();
                    		 }
                    		 int x = 0;
                    		 Row row = ee.addRow(); 
                    		 for(int j = 0; j < headerList.size(); j++){
    		   	    			 String headerName = headerList.get(j);
    		   	    			 if("cause".equals(headerName)){
    		   	    				 ee.addCell(row,x++,tbCdr.getCause()+" "+tbCdr.getReason());
    		   	    			 }else if("gw_rc".equals(headerName)){
    		   	    				 ee.addCell(row,x++,tbCdr.getGw_cause());
    		   	    			 }else if("allPortName".equals(headerName)){
    		   	    				 ee.addCell(row,x++,CommonUtils.allPortName(tbCdr.getDev_name(),tbCdr.getPortno()));
    		   	    			 }else{
    		   	    				 ee.addCell(row,x++,CommonUtils.getDeclaredField(headerName, tbCdr));
    		   	    			 }
    		   	    		 }
                    		 idx ++;
                    		 ProgressSingleton.put(sid + EUConst.EX_CUR_COUNT, idx);
        				 }
                    	 list.clear();
        			 }
                 }
            }
            ProgressSingleton.remove(sid + EUConst.EX_TOTAL_COUNT);
            ProgressSingleton.remove(sid + EUConst.EX_CUR_COUNT);
            ProgressSingleton.put(sid + EUConst.EX_STATUS,true);
            ee.write(response,"Cdr_" + fileSaveName+".xlsx"); 
            ee.dispose(); 
        }
    

    最前面有个异步到后台session中获取导出进度

    import java.util.Hashtable;
    
    public class ProgressSingleton {
        //为了防止多用户并发,使用线程安全的Hashtable
        private static Hashtable<Object, Object> table = new Hashtable<Object, Object>();
        
        public static void put(Object key, Object value){
            table.put(key, value);
        }
        
        public static Object get(Object key){
            return table.get(key);
        }
        
        public static Object remove(Object key){
            return table.remove(key);
        }
         
    }
    
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.alibaba.fastjson.JSONObject;
    
     
    
    public class ProgressServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        public void service(HttpServletRequest request, HttpServletResponse response)
        	    throws ServletException, IOException{
        	 String id = request.getSession().getId();
             Object totalCount = ProgressSingleton.get(id + EUConst.EX_TOTAL_COUNT);
             Object curCount = ProgressSingleton.get(id + EUConst.EX_CUR_COUNT);
             Object status = ProgressSingleton.get(id + EUConst.EX_STATUS);
             JSONObject json = new JSONObject();
             json.put(EUConst.EX_TOTAL_COUNT, (totalCount !=null ? totalCount : 0));
             json.put(EUConst.EX_CUR_COUNT, (curCount !=null ? curCount : 0));
             json.put(EUConst.EX_STATUS, (status !=null ? status : false));
             response.getWriter().print(json.toString());
        }
    
    }
    

    会显示导出总条数,当前导出条数。
    上面只是一个思路,方便后面需要记录下,代码不全。

    展开全文
  • java导出数据库中Excel表格数据的方法发布于 2020-8-11|复制链接摘记: 本篇文章基于java把数据库中的数据以Excel的方式导出,欢迎各位大神吐槽:1、基于maven jar包引入如下:```xmlnet.sourceforge.jexcelapijxl<...
  • java导出数据库中Excel表格数据的方法发布于 2020-8-11|复制链接摘记: 本篇文章基于java把数据库中的数据以Excel的方式导出,欢迎各位大神吐槽:1、基于maven jar包引入如下:```xmlnet.sourceforge.jexcelapijxl<...
  • 主要为大家详细介绍了java导出数据库中Excel表格数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 在网上查了很多资料,最后终于搞出来了,网上查了都是通过DOS命令来导出MySQL数据库数据的,dos命令执行备份命令格式: mysqldump -P port -h ip -u username -ppassWord projectName &gt; d:\db.sql 要注意的是...
  • java jdbc导出数据库大量数据

    千次阅读 2018-11-04 20:15:41
    java 导出数据库数据,在数据量比较大的情况下,如果全部将数据读到内存中再执行写文件,很容易遇到内存溢出;为了避免内存溢出的问题,可以尝试两种方式: 分页查询,每页写一次文件 使用游标的方式,边读边写 ...
  • 有一个代码用xml从数据库导出数据。public class DataExtractor{private final String login, passwd, host;public DataExtractor(String login, String passwd, String host){this.login = login;this.passwd = ...
  • importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;import...
  • importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;import...
  • 今天做了一个关于Java生成Excel表的功能有两种方式:1、jxl.jar2、poi-3.7-20101029.jar第一个不算太了解,第二个是出自apache的标准,虽然我两个都使用了,但比较偏向第二个;就功能***而言,第一个比较灵活,但...
  • 本篇文章基于java数据库中的数据以Excel的方式导出,欢迎各位大神吐槽:1、基于maven jar包引入如下:net.sourceforge.jexcelapijxl2.6.122、首先创建数据库对应的实体类VO :UserVO(具体代码省略);3、确定导出...
  • Java导出Oracle数据库数据

    热门讨论 2010-12-24 12:44:00
    Java导出Oracle数据库数据,java语言执行dmp,imp语句
  • 最近项目中要数据备份和数据恢复。...导出数据库数据。输入exp 用户名/密码@标识 file=d:/c.dmp。如果file名中有空格,比如:d:/programe file/d.dmp,那么只有在加上引号即可。导入数据库和数据,i...
  • 一、直接导出   package com.ij34.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; ...
  • 一、前言最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~先来看看生成的word文档效果吧下面我们也来一起简单的实现吧二、Java 导出数据库表信息生成Word...
  • 最近项目中要数据备份和数据恢复。...导出数据库数据。输入exp 用户名/密码@标识 file=d:/c.dmp。如果file名中有空格,比如:d:/programe file/d.dmp,那么只有在加上引号即可。导入数据库和数据,i
  • @Testpublic void export() throws Exception{//声明需要导出数据库String dbName = "db_exam"; // 要导出其他数据库的表,只要修改此dbName即可//声明bookHSSFWorkbook book = new HSSFWorkbook();//获取...
  • /*** 根据条件将数据导出为Excel* 如果需要浏览器发送请求时即下载Excel,就不能用ajax进行传输,所以这里用GET方式进行提交**@return*/@ResponseBody@RequestMapping(value= "/exportExcel", method =RequestMethod...
  • java实现导出数据库数据(可以)

    千次阅读 2018-08-29 14:03:03
    //查询数据库中所有的数据 List<Stu> list= StuService.getAllByDb(); //要插入到的Excel表格的行号,默认从0开始 Label labelId= new Label(0, 0, "编号(id)");//表示第 Label labelName= new Label(1, 0, ...
  • 一、概述系统快要开发完了,甲方要求验收项目的时候提供数据字典文件,但是我们开发的时候注释直接写在实体的字段...(2) 执行sql文件将注释添加到数据库表中;(3) 采用datagrip或者navicat工具查询出你需要的数据字典...
  • 使用java数据库数据导出生成xml文件 使用java数据库数据导出生成xml文件
  • 一、查看当前用户下表名,及表名的备注SELECT * FROM USER_TAB_COMMENTS WHERE TABLE_NAME LIKE 'WEB_PLY_BASE%';SELECT * FROM DBA_TAB_COMMENTS WHERE ...二、查询数据库某表字段SELECT WM_CONCAT(COLUMN_NAME)FRO...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,334
精华内容 933
关键字:

java导出数据库数据

java 订阅