Java+HSSFWorkbook实现WEB或移动端导出数据到Excel

  写在前面:这个没啥说的,也没啥技术要领,只要按照固定的方法和格式就可以完成。我自己也是一直在用,现在把它单独拿出来,希望能帮到像我以前一样迷茫的小同学们。好了,废话不说,开撸,由于这个不用画图所以咱们直接进入代码阶段!

  由于我是按照这种方式存储的“E:\Users\ZhangLi\excel\2019/04/12/dd8kBDK1nvhRCSLH.xls”,所以生成的时候需要几个生成名称格式的小方法,请看下边:

   接下来就是代码阶段了,由于我在代码中加了注释,所以后边我就不在重复说明了。

   首先需要一个生成文件名字的方法:

  

private static String getRandomFileName() {
        //随机字符串的随机字符库
        String KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        StringBuffer sb = new StringBuffer();
        int len = KeyString.length();
        for (int i = 0; i < 16; i++) {
            sb.append(KeyString.charAt((int) Math.round(Math.random() * (len - 1))));
        }
        sb.append(".xls");
        return sb.toString();
    }

  然后还需要一个拼接存储路径及时间并返回输出流的方法:

private static OutputStream getOutStream(String fileName) throws FileNotFoundException {
        String path=EXCEL_PATH+getDatePath();
        File file=new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
      return  new FileOutputStream(path+fileName);
    }

  还有一个指定存储日期格式的方法:

private static  String getDatePath(){
        Date date=new Date();
        return  new SimpleDateFormat("yyyy/MM/dd/").format(date);
    }

  接下来是主要的生成Excel文件及转存指定位置的方法:

        // 导出的路径,实际应用时可由用户在页面自定义配置
	private static final String EXCEL_PATH = "E:\\Users\\ZhangLi\\excel\\";

public static String dataToExcel(List<User> dtos) throws IOException {
		HSSFWorkbook hwb=new HSSFWorkbook();
		HSSFSheet sheet=hwb.createSheet("new sheet");
		// 生成表头
        HSSFRow firstRow=sheet.createRow(0);
        
        String[] titles = {"序号", "姓名", "时间"};
        HSSFCell [] firstCell=new HSSFCell[titles.length];
        for(int i=0;i<titles.length;i++){
            firstCell[i]=firstRow.createCell(i);
            firstCell[i].setCellValue(titles[i]);
        }
        // 填充表格内容
        for(int i=0;i<dtos.size();i++) {
        	HSSFRow row=sheet.createRow(i+1);
            User dto=dtos.get(i);

            HSSFCell [] contentCell=new HSSFCell[titles.length];
            for(int j=0;j<titles.length;j++){
                contentCell[j]=row.createCell(j);
            }
            // 根据列放入数据,一定要和需要导出的数据实体列数对应
            // 例如我这个是:id,姓名,时间-对应 [0],[1],[2]。如果还有那就以此类推.....
            contentCell[0].setCellValue(dto.getId());
            contentCell[1].setCellValue(dto.getName());
            contentCell[2].setCellValue(MyDateUtil.dateToStr(dto.getTime(), MyDateUtil.DEFAULT_DATETIME_FORMAT));
        }
        String fileName=getRandomFileName();
        OutputStream out=getOutStream(fileName);
        hwb.write(out);
        out.close();
        hwb.close();
		return EXCEL_PATH+getDatePath()+fileName;
	}

   最后是我们测试需要的main方法:

public static void main(String[] args) {
	List list = new ArrayList<>();
	User u = new User();
	u.setId(1).setName("老王").setTime(new Date());
	list.add(u);
	User u1 = new User();
	u1.setId(2).setName("铁锤").setTime(new Date());
	list.add(u1);
	User u2 = new User();
	u2.setId(3).setName("老宋").setTime(new Date());
	list.add(u2);
		
	try {
		String result = dataToExcel(list);
		System.out.println(result);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

  好了,就是这点简单的玩楞,我们测试一下吧:

  控制台成功输出路径:

  下面我们去文件夹里看看有没有相应的文件

  可以看到文件夹中已经有我们刚刚生成的文件了,还有最后一步,我们打开文件看看是不是我们定义的格式和想要的数据

  OK!跟我们期望的一样,至此使用Java生成Excel文件完成,我这次只是搞了个小小的demo,实际项目用应用的话肯定还需要按照自己需要的逻辑替换或修改一些东西,希望能帮到各位新来的同学们。

  那就先这样吧,我要研究我的项目去了  - -!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值