导出的是xls版本的excel,用的是HSSFWorkbook,想导出xlsx的就用XSSFWorkbook,模板自己提前准备好
用到的依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
public static void main(String[] args) throws Exception {
//伪造数据库查出来的数据
books books1 = new books(1,"java天下第一","5","很牛");
books books2 = new books(2,"PHP天下第二","5","也很牛");
List<books> list = new ArrayList<>();
list.add(books1);
list.add(books2);
//获得模板
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/poi1.xls"));
//打开模板
HSSFWorkbook workbook=new HSSFWorkbook(fs);
//获得名字为sheet的工作本对象,这个是看你的模板工作表的名字
HSSFSheet sheet = workbook.getSheet("sheet2");
//因为是模板,第一行有标题了,我们直接在第二行对应模板第一行插入数据即可
// 在第二行插数据
for (int i = 0; i < list.size(); i++) {
//获得第二行
HSSFRow row = sheet.createRow(i + 1);
//通过反射获得这个对象的属性字段数组
Field[] Fields = list.get(i).getClass().getDeclaredFields();
int a= 0;
for (Field field : Fields) {
//加这个才可以访问私有的属性
field.setAccessible(true);
//通过get方法得到value,等同于class。get**()
Object o = field.get(list.get(i));
//给改行的第0列赋值,后面a++,依次赋值
HSSFCell cell = row.createCell(a);
cell.setCellValue(String.valueOf(o));
a++;
}
}
//设置文件导出的保存路径
File file = new File("d:/poi.xls");
//创建文件
file.createNewFile();
//拿到文件的输出流
FileOutputStream fileOutputStream = FileUtils.openOutputStream(file);
//调用工作簿的write方法把这个流写出去
workbook.write(fileOutputStream);
}
模板样式
数据导入后
OK,栓Q!