前臺需用表單提交方式!
導包:
<!--excel導入導出 start-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15</version>
</dependency>
<!--excel導入導出 end-->
ExcelUtil類
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* Excel工具類.
* <p><br>
* @author ZLJ 2019-11-17 下午09:21:33
* @version 1.0.0
*/
public class ExcelUtil {
/**
* 取得標題單元格樣式.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午10:56:15<br>
* <p><b>修改人:</b><br> 2019-11-17 下午10:56:15<br>
* <p><b>修改說明:</b><br> <br>
* @param wb
* @return
*/
private static HSSFCellStyle getTitleCellStyle(HSSFWorkbook wb){
//創建單元格樣式
HSSFCellStyle styleTemp = wb.createCellStyle();
//創建字體
HSSFFont fontTemp = wb.createFont();
//字號
fontTemp.setFontHeightInPoints((short) 11);
//粗體寬度
fontTemp.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//設置對齊方式
styleTemp.setAlignment((short)2);
//將文字樣式設置給樣式
styleTemp.setFont(fontTemp);
//設置邊框
styleTemp.setBorderBottom(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderTop(HSSFCellStyle.BORDER_THIN);
return styleTemp;
}
/**
* 取得內容單元格樣式.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午10:56:43<br>
* <p><b>修改人:</b><br> 2019-11-17 下午10:56:43<br>
* <p><b>修改說明:</b><br> <br>
* @param wb
* @return
*/
private static HSSFCellStyle getContentCellStyle(HSSFWorkbook wb){
//創建單元格樣式
HSSFCellStyle styleTemp = wb.createCellStyle();
//設置邊框
styleTemp.setBorderBottom(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleTemp.setBorderTop(HSSFCellStyle.BORDER_THIN);
return styleTemp;
}
/**
* 創建單元格.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午02:56:06<br>
* <p><b>修改人:</b><br> 2019-11-17 下午02:56:06<br>
* <p><b>修改說明:</b><br> <br>
* @param row 行
* @param cellNo 列號,從0開始
* @param cellContent 列內容
* @return 列
*/
private static HSSFCell createCell(HSSFRow row, HSSFCellStyle style, int cellNo, String cellContent){
//創建第一列:註冊號
HSSFCell cell=row.createCell(cellNo);
//將樣式設置給單元格
cell.setCellStyle(style);
//設置單元格的值
HSSFRichTextString rts = new HSSFRichTextString(cellContent);
cell.setCellValue(rts);
return cell;
}
/**
* 創建單元格.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午02:51:58<br>
* <p><b>修改人:</b><br> 2019-11-17 下午02:51:58<br>
* <p><b>修改說明:</b><br> <br>
* @param wb 工作簿
* @param sheet 工作表
* @param style 單位格樣式
* @param row 行
* @param cellNo 列號,從0開始
* @param cellWidth 列寬
* @param cellContent 列內容
* @return 列對象
*/
private static HSSFCell createCell(HSSFWorkbook wb, HSSFSheet sheet, HSSFRow row, HSSFCellStyle style,
int cellNo, int cellWidth, String cellContent){
//創建列
HSSFCell cell=row.createCell(cellNo);
//將樣式設置給單元格
cell.setCellStyle(style);
//設置列寬
sheet.setColumnWidth(cellNo, cellWidth * 256);
//設置單元格的值
HSSFRichTextString rts = new HSSFRichTextString(cellContent);
cell.setCellValue(rts);
return cell;
}
/**
* 取得單元格數據.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午05:07:00<br>
* <p><b>修改人:</b><br> 2019-11-17 下午05:07:00<br>
* <p><b>修改說明:</b><br> <br>
* @param cell 單元格對象
* @return 單元格數據,字符串
*/
@SuppressWarnings({ "deprecation" })
public static String getCellStringValue(HSSFCell cell) {
if(cell == null) {
return "";
}
String cellValue = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING://字符串類型
cellValue = cell.getStringCellValue();
if(cellValue.trim().equals("")||cellValue.trim().length() <= 0)
cellValue = "";
break;
case HSSFCell.CELL_TYPE_NUMERIC: //數值類型
// 判斷當前的cell是否爲Date
if (HSSFDateUtil.isCellDateFormatted(cell)){
// 如果是Date類型則,取得該Cell的Date值
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cellValue = sdf.format(date);
} else{ // 如果是純數字
DecimalFormat df = new DecimalFormat("#");//轉換成整型
cellValue = String.valueOf(df.format(cell.getNumericCellValue()));
}
break;
case HSSFCell.CELL_TYPE_FORMULA: //公式
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
return cellValue;
}
/**
* 導出報表.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午11:43:57<br>
* <p><b>修改人:</b><br> 2019-11-17 下午11:43:57<br>
* <p><b>修改說明:</b><br> <br>
* @param response
* @param reportFileName 報表文件名
* @param colWidths 列寬度
* @param titles 標題列數組
* @param contents 內容數組
*/
public static void ExportReport(HttpServletResponse response, String reportFileName,
int[] colWidths, String[] titles, String[][] contents){
//創建HSSFWorkbook對象
HSSFWorkbook wb = new HSSFWorkbook();
//創建HSSFSheet對象
HSSFSheet sheet = wb.createSheet("sheet1");
//取得標題單元格樣式
HSSFCellStyle styleTitle = getTitleCellStyle(wb);
//創建HSSFRow對象
HSSFRow row = sheet.createRow((short)0);
row.setHeight((short) (1.5 * 256));
//創建列頭
for(int i=0;i<colWidths.length;i++) {
createCell(wb, sheet, row, styleTitle, i, colWidths[i], titles[i]);
}
if(contents != null && contents.length > 0) {
//取得內容單元格樣式
HSSFCellStyle styleContent = getContentCellStyle(wb);
for(int i=0;i<contents.length;i++) {
//創建HSSFRow對象
row = sheet.createRow((short)(i + 1));
row.setHeight((short) (1.2 * 256));
for(int j=0;j<contents[i].length;j++) {
createCell(row, styleContent, j, contents[i][j]);
}
}
}
try {
//將Excel數據發送到客戶端瀏覽器
ExportFileUtil.writeToClient(response, wb, reportFileName + ".xls");
} catch (Exception e) {
e.printStackTrace();
}
}
}
ExportFileUtil導出文件工具:
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* 導出文件工具.
* <p><br>
* @author ZLJ 2019-11-17 下午08:29:47
* @version 1.0.0
*/
public class ExportFileUtil {
/**
* 將文件寫到客戶端.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午08:32:44<br>
* <p><b>修改人:</b><br> 2019-11-17 下午08:32:44<br>
* <p><b>修改說明:</b><br> <br>
* @param response
* @param mimeType MIMI類型
* @param fileName 文件名
* @param bos 文件字節數組
* @throws Exception
*/
public static void writeToClient(HttpServletResponse response, String mimeType, String fileName, ByteArrayOutputStream bos) throws Exception{
response.reset();
response.setContentType(mimeType);
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GBK"), "iso8859-1") );
response.setContentLength(bos.size());
//禁止頁面緩存
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
ServletOutputStream sos = response.getOutputStream();
bos.writeTo(sos);
sos.flush();
sos.close();
bos.close();
}
/**
* 將Excel文件在客戶端導出.
* <p><b>創建人:</b><br> ZLJ 2019-11-17 下午09:40:06<br>
* <p><b>修改人:</b><br> 2019-11-17 下午09:40:06<br>
* <p><b>修改說明:</b><br> <br>
* @param response
* @param wb
* @param defaultFileName 客戶端保存時顯示的文件名稱
*/
public static void writeToClient(HttpServletResponse response, HSSFWorkbook wb, String defaultFileName){
OutputStream toClient = null;
ByteArrayOutputStream bOut = null;
try {
bOut = new ByteArrayOutputStream();
//把相應的Excel工作簿寫入內存流
wb.write(bOut);
response.reset();
response.setHeader("Access-Control-Allow-Origin", "*");//允許所有域名訪問
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(defaultFileName.getBytes("GBK"), "iso8859-1"));
response.setContentLength(bOut.size());
//得到向客戶端輸出二進制數據的對象
toClient = new BufferedOutputStream(response.getOutputStream());
//設置瀏覽器mime類型
response.setContentType("application/vnd.ms-excel; charset=GBK");
//輸出數據
toClient.write(bOut.toByteArray());
toClient.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bOut.close();
toClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
int[] colWidth = { 30, 60,60,20,20,30};
測試調:
ExcelUtil.ExportReport(response, reportFileName, colWidth, title, strarrs);//傳入對應的參數即可`在這裏插入代碼片`