package com.cloud.attendance.utils;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.cloud.attendance.model.EsAttExcelData;
|
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.Font;
|
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
import org.apache.poi.xssf.usermodel.XSSFColor;
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
|
import org.springframework.stereotype.Component;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.awt.*;
|
import java.awt.Color;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.List;
|
|
public class ExportExcelUtils {
|
|
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
// videoReqNum indeviceid
|
private static String[] esColumn = {"pid","pname","idcard","identity","onlinetime","videoReqNum","picAddress","indevicename"};// wp 2018-12-11 去掉 photo ,"Snapshotpath"
|
|
public static void exportExcel(HttpServletResponse response, String fileName, EsAttExcelData data) throws Exception {
|
// 告诉浏览器用什么软件可以打开此文件
|
response.setHeader("content-Type", "application/vnd.ms-excel"); // application/octet-stream
|
// 下载文件的默认名称
|
response.setHeader("Content-Disposition", "attachment;filename=\""+ URLEncoder.encode(fileName, "utf-8")+"\"");
|
exportExcel(data, response.getOutputStream());
|
}
|
public static void exportObjectExcel(HttpServletResponse response, String fileName, EsAttExcelData data) throws Exception {
|
// 告诉浏览器用什么软件可以打开此文件
|
response.setHeader("content-Type", "application/vnd.ms-excel"); // application/vnd.ms-excel
|
// 下载文件的默认名称
|
// response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "iso-8859-1")); // + URLEncoder.encode(fileName, "iso-8859-1")
|
|
// response.setContentType("application/x-download");//下面三行是关键代码,处理乱码问题
|
response.setCharacterEncoding("utf-8"); // iso8859-1
|
response.setHeader("Content-Disposition", "attachment;filename=\""+new String(fileName.getBytes("utf-8"), "iso8859-1")+"\"");
|
|
exportObjectExcel(data, response.getOutputStream());
|
}
|
public static void exportMoreExcel(HttpServletResponse response, String fileName, EsAttExcelData data) throws Exception {
|
// 告诉浏览器用什么软件可以打开此文件
|
response.setHeader("content-Type", "application/vnd.ms-excel");
|
// 下载文件的默认名称
|
response.setHeader("Content-Disposition", "attachment;filename=\""+ URLEncoder.encode(fileName, "utf-8")+"\"");
|
exportExcelMoreSheet(null,data, response.getOutputStream());
|
}
|
|
public static void exportExcel(EsAttExcelData data, OutputStream out) throws Exception {
|
XSSFWorkbook wb = new XSSFWorkbook();
|
try {
|
String sheetName = data.getName();
|
if (null == sheetName) {
|
sheetName = "考勤流水数据"+sdf.format(new Date());
|
}
|
XSSFSheet sheet = wb.createSheet(sheetName);
|
writeExcel(wb, sheet, data);
|
wb.write(out);
|
} finally {
|
wb.close();
|
}
|
}
|
public static void exportObjectExcel(EsAttExcelData data, OutputStream out) throws Exception {
|
XSSFWorkbook wb = new XSSFWorkbook();
|
try {
|
String sheetName = data.getName();
|
if (null == sheetName) {
|
sheetName = "考勤流水数据"+sdf.format(new Date());
|
}
|
XSSFSheet sheet = wb.createSheet(sheetName);
|
writeObjectExcel(wb, sheet, data);
|
wb.write(out);
|
} finally {
|
wb.close();
|
}
|
}
|
public static void exportExcelMoreSheet(XSSFWorkbook wb,EsAttExcelData data, OutputStream out) throws Exception {
|
if (wb ==null){
|
wb = new XSSFWorkbook();
|
}
|
try {
|
String sheetName = data.getName();
|
if (null == sheetName) {
|
sheetName = "考勤流水数据"+sdf.format(new Date());
|
}
|
XSSFSheet sheet = wb.createSheet(sheetName);
|
writeExcel(wb, sheet, data);
|
wb.write(out);
|
} finally {
|
wb.close();
|
}
|
}
|
private static void writeExcel(XSSFWorkbook wb, XSSFSheet sheet, EsAttExcelData data) {
|
int rowIndex = 0;
|
rowIndex = writeTitlesToExcel(wb, sheet, data.getTitles());
|
writeJsonRowsToExcel(wb, sheet, data.getRows(), rowIndex);
|
autoSizeColumns(sheet, data.getTitles().size() + 1);
|
}
|
private static void writeObjectExcel(XSSFWorkbook wb, XSSFSheet sheet, EsAttExcelData data) {
|
int rowIndex = 0;
|
rowIndex = writeTitlesToExcel(wb, sheet, data.getTitles());
|
writeRowsToExcel(wb, sheet, data.getRows(), rowIndex);
|
autoSizeColumns(sheet, data.getTitles().size() + 1);
|
}
|
|
private static void autoSizeColumns(XSSFSheet sheet, int columnNumber) {
|
for (int i = 0; i < columnNumber; i++) {
|
int orgWidth = sheet.getColumnWidth(i);
|
sheet.autoSizeColumn(i, true);
|
int newWidth = (int) (sheet.getColumnWidth(i) + 100);
|
if (newWidth > orgWidth) {
|
sheet.setColumnWidth(i, newWidth);
|
}else {
|
sheet.setColumnWidth(i, orgWidth);
|
}
|
}
|
}
|
private static int writeRowsToExcel(XSSFWorkbook wb, XSSFSheet sheet, List<List<Object>> rows, int rowIndex) {
|
int colIndex = 0;
|
|
Font dataFont = wb.createFont();
|
dataFont.setFontName("simsun");
|
// dataFont.setFontHeightInPoints((short) 14);
|
dataFont.setColor(IndexedColors.BLACK.index);
|
|
XSSFCellStyle dataStyle = wb.createCellStyle();
|
dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
|
dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
|
dataStyle.setFont(dataFont);
|
setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0)));
|
|
for (List<Object> rowData : rows) {
|
Row dataRow = sheet.createRow(rowIndex);
|
// dataRow.setHeightInPoints(25);
|
colIndex = 0;
|
for (Object cellData : rowData) {
|
Cell cell = dataRow.createCell(colIndex);
|
if (cellData != null) {
|
cell.setCellValue(cellData.toString());
|
} else {
|
cell.setCellValue("");
|
}
|
|
cell.setCellStyle(dataStyle);
|
colIndex++;
|
}
|
rowIndex++;
|
}
|
return rowIndex;
|
}
|
|
private static int writeJsonRowsToExcel(XSSFWorkbook wb, XSSFSheet sheet, List<JSONObject> rows, int rowIndex) {
|
int colIndex = 0;
|
|
Font dataFont = wb.createFont();
|
dataFont.setFontName("simsun");
|
// dataFont.setFontHeightInPoints((short) 14);
|
dataFont.setColor(IndexedColors.BLACK.index);
|
|
XSSFCellStyle dataStyle = wb.createCellStyle();
|
dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
|
dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
|
dataStyle.setFont(dataFont);
|
setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0)));
|
|
|
for (JSONObject rowData : rows) {
|
Row dataRow = sheet.createRow(rowIndex);
|
colIndex = 0;
|
for (int i=0,item=esColumn.length;i<item;i++) {
|
|
Cell cell = dataRow.createCell(colIndex);
|
Object cData = rowData.get(esColumn[i]);
|
if (cData != null) {
|
cell.setCellValue(cData.toString());
|
} else {
|
cell.setCellValue("");
|
}
|
cell.setCellStyle(dataStyle);
|
colIndex++;
|
}
|
rowIndex++;
|
}
|
return rowIndex;
|
}
|
|
private static int writeTitlesToExcel(XSSFWorkbook wb, XSSFSheet sheet, List<String> titles) {
|
int rowIndex = 0;
|
int colIndex = 0;
|
|
Font titleFont = wb.createFont();
|
titleFont.setFontName("simsun");
|
titleFont.setBold(true);
|
// titleFont.setFontHeightInPoints((short) 14);
|
titleFont.setColor(IndexedColors.BLACK.index);
|
|
XSSFCellStyle titleStyle = wb.createCellStyle();
|
titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
|
titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
|
titleStyle.setFillForegroundColor(new XSSFColor(new Color(182, 184, 192)));
|
titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
|
titleStyle.setFont(titleFont);
|
setBorder(titleStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0)));
|
|
Row titleRow = sheet.createRow(rowIndex);
|
// titleRow.setHeightInPoints(25);
|
colIndex = 0;
|
|
for (String field : titles) {
|
Cell cell = titleRow.createCell(colIndex);
|
cell.setCellValue(field);
|
cell.setCellStyle(titleStyle);
|
colIndex++;
|
}
|
|
rowIndex++;
|
return rowIndex;
|
}
|
|
private static void setBorder(XSSFCellStyle style, BorderStyle border, XSSFColor color) {
|
style.setBorderTop(border);
|
style.setBorderLeft(border);
|
style.setBorderRight(border);
|
style.setBorderBottom(border);
|
style.setBorderColor(XSSFCellBorder.BorderSide.TOP, color);
|
style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, color);
|
style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, color);
|
style.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, color);
|
}
|
|
|
}
|