首先在POM中引入需要的Jar
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
工具类:
import com.alibaba.fastjson.JSON;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel<T> {
private XSSFWorkbook workBook = null;
private XSSFSheet sheet = null;
public Excel(String sheetName, String... headers) {
workBook = new XSSFWorkbook();
sheet = workBook.createSheet(sheetName);
XSSFRow titleRow = sheet.createRow((short) 0);
int index = 0;
for (String header : headers) {
XSSFCell cell = titleRow.createCell((short) index);
cell.setCellValue(header);
index++;
}
}
public Excel(String sheetName) {
workBook = new XSSFWorkbook();
sheet = workBook.createSheet(sheetName);
}
private Map<String, Field> extract(T obj) {
List<Field> declaredFields = Arrays.asList(obj.getClass().getDeclaredFields());
return declaredFields.stream().collect(Collectors.toMap(Field::getName, Function.identity()));
}
public void export(OutputStream out) {
try {
workBook.write(out);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void setDatas(Collection<T> dataset, String... fieldNames) {
if (dataset == null || fieldNames == null) {
return;
}
Iterator<T> it = dataset.iterator();
int y = 0;
while (it.hasNext()) {
y++;
XSSFRow row = sheet.createRow(y);
T t = (T) it.next();
Map<String, Field> fieldMap = this.extract(t);
int x = -1;
for (String fieldName : fieldNames) {
Field field = fieldMap.get(fieldName);
if (field == null) {
continue;
}
x++;
try {
field.setAccessible(true);
String value;
Object obj = field.get(t);
if (obj instanceof Date) {
value = DateUtil.format((Date) obj, "yyyy-MM-dd HH:mm:ss");
} else if (obj instanceof String) {
value = String.valueOf(obj);
} else {
value = JSON.toJSONString(obj);
}
XSSFCell cell = row.createCell((short) x);
cell.setCellValue(value);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
在网页上导出:
@RequestMapping(value = "/api/export", method = RequestMethod.GET)
public void export(HttpServletRequest request, HttpServletResponse response) {
try {
List<TmpData> tmps = findTempDate();
String name = DateUtil.current("yyyyMMddHHmmsss");
response.setContentType("octets/stream");
response.addHeader("Content-Disposition", "attachment;filename = " + name + ".xlsx");
Excel<TmpData> export = new Excel<>("查询导出", "账号", "密码", "IP");
export.setDatas(tmps, "account", "password", "ip");
export.export(response.getOutputStream());
} catch (IOException ex) {
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。