写在前面:这个没啥说的,也没啥技术要领,只要按照固定的方法和格式就可以完成。我自己也是一直在用,现在把它单独拿出来,希望能帮到像我以前一样迷茫的小同学们。好了,废话不说,开撸,由于这个不用画图所以咱们直接进入代码阶段!
由于我是按照这种方式存储的“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,实际项目用应用的话肯定还需要按照自己需要的逻辑替换或修改一些东西,希望能帮到各位新来的同学们。
那就先这样吧,我要研究我的项目去了 - -!