ApachePOI是用Java编写的免费开源的跨平台的JavaAPI,在程序中的使用一般是用来简单处理Excel文件。
1、引入包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
2、POI可以操作各种类型的Microsoft文档
HSSF-提供读写ExcelXLS
XSSF-提供读写ExcelOOXMLXLSX
HWPF-提供读写WordDOC
HSLF-提供读写PowerPoint
HDGF-提供读Visio
HPBF-提供读Publisher
HSMF-提供读Outlook
3、execl导出,ExcelUtil的三个方法。
(1)准备execl
1、准备创建相关数据
2、设置列头相关内容
3、渲染数据
4、列宽自适应
public static Workbook getWorkbook(String[] headers, List<Object[]> datas) {
//1、准备创建相关数据
//加载指定文件,创建一个Excel对象(工作簿)
Workbook workbook = new HSSFWorkbook();
//读取Excel文件中第一个Sheet标签页
Sheet sheet = workbook.createSheet();
//行
Row row = null;
//单元格
Cell cell = null;
//创建单元格样式
CellStyle style = workbook.createCellStyle();
//设置单元格水平居中
style.setAlignment(HorizontalAlignment.CENTER_SELECTION);
//设置字体格式
Font font = workbook.createFont();
int line = 0, maxColumn = 0;
// 2、设置列头相关内容
if (headers != null && headers.length > 0) {
//创建一行
row = sheet.createRow(line++);
//设置行高
row.setHeightInPoints(23);
//设置文字为粗体
font.setBold(true);
//设置高度
font.setFontHeightInPoints((short) 13);
//采用字体
style.setFont(font);
//设置首行单元格数目
maxColumn = headers.length;
//为每一单元格设置值和格式
for (int i = 0; i < maxColumn; i++) {
//创建单元格
cell = row.createCell(i);
//设置单元格列名
cell.setCellValue(headers[i]);
//设置单元格格式
cell.setCellStyle(style);
}
}
// 3、渲染数据
if (datas != null && datas.size() > 0) {
//遍历每一行数据
for (int index = 0, size = datas.size(); index < size; index++) {
Object[] data = datas.get(index);
if (data != null && data.length > 0) {
row = sheet.createRow(line++);
//设置行高
row.setHeightInPoints(20);
int length = data.length;
if (length > maxColumn) {
maxColumn = length;
}
//设置行内单元格
for (int i = 0; i < length; i++) {
cell = row.createCell(i);
//设置单元格内容
cell.setCellValue(data[i] == null ? null : data[i].toString());
}
}
}
}
//4、列宽自适应
for (int i = 0; i < maxColumn; i++) {
sheet.autoSizeColumn(i);
//如果该列为中文,会出现列宽不足现象。
// 解决自动设置列宽中文失效的问题
//sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10);
}
return workbook;
}
(2)导出到指定位置
1、获取execl
2、写出到字节流中
3、字节流转文件流写出到指定位置
4、关闭相关资源
public static void excelLocal(String path, String fileName, String[] headers, List<Object[]> datas) {
//1、获取execl
Workbook workbook = getWorkbook(headers, datas);
if (workbook != null) {
ByteArrayOutputStream byteArrayOutputStream = null;
FileOutputStream fileOutputStream = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
//2、写出到字节流中
workbook.write(byteArrayOutputStream);
String suffix = ".xls";
File file = new File(path + File.separator + fileName + suffix);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
fileOutputStream = new FileOutputStream(file);
//3、字节流转文件流写出到指定位置
fileOutputStream.write(byteArrayOutputStream.toByteArray());
} catch (Exception e) {
e.printStackTrace();
//4、关闭相关资源
} finally {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (byteArrayOutputStream != null) {
byteArrayOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(3)导出excel到浏览器
1、获取execl
2、写出到字节流中
3、设置相关响应参数
4、字节流转文件流写出到response
5、关闭相关资源
public static void excelExport(String fileName, String[] headers, List<Object[]> datas,
HttpServletResponse response) {
//1、获取execl
Workbook workbook = getWorkbook(headers, datas);
if (workbook != null) {
ByteArrayOutputStream byteArrayOutputStream = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
//2、写出到字节流中
workbook.write(byteArrayOutputStream);
//3、设置相关响应参数
String suffix = ".xls";
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + new String((fileName + suffix).getBytes(), "iso-8859-1"));
OutputStream outputStream = response.getOutputStream();
//4、字节流转文件流写出到response
outputStream.write(byteArrayOutputStream.toByteArray());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
//5、关闭相关资源
} finally {
try {
if (byteArrayOutputStream != null) {
byteArrayOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
|