Excel匯出 並完成後自動開啟
java 設定Response 實現自動下載Excel並完成後自動開啟
實現 下載檔案完成後自動開啟 本文以Excel為例子 環境為SpringMVC
maven依賴如下:
<!--檔案上傳-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!--poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
//SpringMVC
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
//java.io
import java.io.InputStream;
import java.io.IOException;
//Servlet
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
//poi
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
我們可以設定response的請求頭來讓瀏覽器識別,做出相應的效果
// 故障匯出
@RequestMapping(value = "doExportHideFaultGuide")
public ModelAndView doExportHideFaultGuide(@RequestParam String[] trainType,HttpServletResponse response){
//表示“我不清楚程式碼內容,只需要儲存為一個檔案
response.setContentType("application/octet-stream");
//檔案的名字
response.setHeader("name", "隱性規則.xls");
//Cach-Control的作用: https://blog.csdn.net/u012375924/article/details/82806617
//關於 Cache-Control 的 must-revalidate 表示強制頁面不快取,作用與 no-cache 相同,但是是強制的意思
//詳細請參考:http://hi.baidu.com/chenleibupt/blog/item/9627bec6932e5a179c163df2.html
//post-check=0, pre-check=0 為IE5的指令
response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
//快取指令
response.setHeader("Pragma", "public");
//設定頁面立即過期 頁面立刻過期 (關閉)
response.setDateHeader("Expires", 0);
//資料集合
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
try {
//設定檔名和編碼
response.setHeader("Content-disposition", "attachment; filename=\""
+ new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\"");
try {
//需要匯出的map集合(獲取資料集合)
list = evGroupService.selectHideFaultGuide(trainType);
} catch (Exception e) {
e.printStackTrace();
}
//也開這樣寫evGroupService.doExport(list).write(response.getOutputStream());
//這裡的操作為 將資料集合抓換成SXSSFWorkbook 物件
SXSSFWorkbook doExport = evGroupService.doExport(list);
doExport.write(response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (Exception e) {
Log.warn("引數統計分析匯出異常!!!",e);
}
return null;
}
//evGroupService.doExport 方法 此處的使用 poi
@Override
public SXSSFWorkbook doExport(List<Map<String, Object>> list) throws Exception {
//工作簿構建時指定視窗大小
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
//建立工作簿的一個工作表
Sheet sheet = workbook.createSheet();
//凍結工作表前兩行
sheet.createFreezePane(0, 1, 0, 1); /
// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));//合併單元格
// sheet.setColumnWidth(0, 32 * 80);// 對A列設定寬度為180畫素
//匯出的title陣列
String[] headerTitles = { "序號", "車型", "頻率型別", "頻率次數","預警等級", "故障程式碼", "預警提示" };
//setColumnWidth設定每列寬度(第幾列,寬度)
for (int i = 0; i < headerTitles.length; i++) {
sheet.setColumnWidth(i, 32 * 180);// 對A列設定寬度為180畫素
}
//獲取樣式
CellStyle headerStyle0 = ExcelStyle.getHeaderStyleA(workbook);
CellStyle contentStyle = ExcelStyle.getContentStyle(workbook);
//建立下標為0一行(第一行)
Row row = sheet.createRow(0);// 設定第一行資訊
//setHeight高
row.setHeight((short) (32 * 18));
//格子
Cell cell = null;
for (int i = 0; i < headerTitles.length; i++) {
//建立第一格
cell = row.createCell(i);
//設定值和樣式
cell.setCellValue(headerTitles[i]);
cell.setCellStyle(headerStyle0);
}
//要匯出的物件 遍歷第一行
for (int i = 0; i < list.size(); i++) {
//從第二行開始
row = sheet.createRow(i + 1);
//設值和樣式
for (int j = 0; j < headerTitles.length; j++) {
cell = row.createCell(j);
cell.setCellStyle(contentStyle);
}
//獲取當前行 資料物件
Map<String, Object> map = list.get(i);
//設定第一格序號
row.getCell(0).setCellValue(String.valueOf(i + 1));
//第二格資料
row.getCell(1).setCellValue(map.get("TRAINNAME").toString());
//頻率型別 對值進行判斷
if(map.get("DTYPE") != null){
if("0".equals(map.get("DTYPE").toString())){
row.getCell(2).setCellValue("任何一次");
}else if("3".equals(map.get("DTYPE").toString())){
row.getCell(2).setCellValue("日均");
}else if("8".equals(map.get("DTYPE").toString())){
row.getCell(2).setCellValue("持續天數");
}
}
//頻率次數 第四格資料
if(map.get("DSCOPE") != null ){
row.getCell(3).setCellValue(map.get("DSCOPE").toString());
}else{
row.getCell(3).setCellValue("");
}
//預警等級 第五格資料
if(map.get("LVL") != null){
row.getCell(4).setCellValue(map.get("LVL").toString());
}else{
row.getCell(4).setCellValue("");
}
//故障程式碼 第六格資料
if(map.get("FT_CODE") != null){
row.getCell(5).setCellValue(map.get("FT_CODE").toString());
}else{
row.getCell(5).setCellValue("");
}
//預警提示 第七格資料
if(map.get("EVENT") != null){
row.getCell(6).setCellValue(map.get("EVENT").toString());
}else{
row.getCell(6).setCellValue("");
}
}
return workbook;
}
/**
*
* @Description: 2007擴充套件方法
* @param workbook
* @return CellStyle
* @throws
* @author LiLW
* @date 2017年4月19日 下午3:13:25
* @version V1.0
*/
public static CellStyle getHeaderStyleA(SXSSFWorkbook workbook) {
// 建立樣式
Font font1 = workbook.createFont();
// 字型加粗
font1.setFontName("黑體");
font1.setFontHeightInPoints((short) 12);// 設定字型大小
// font1.setColor(HSSFColor.LIGHT_BLUE.index); //綠字
font1.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
CellStyle headerStyle = workbook.createCellStyle();
// 設定垂直居中
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
// 設定邊框
headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
headerStyle.setFont(font1);
headerStyle.setWrapText(true);
return headerStyle;
}
/**
*
* @Description: 2007擴充套件方法
* @param workbook
* @return CellStyle
* @throws
* @author LiLW
* @date 2017年4月19日 下午3:18:46
* @version V1.0
*/
public static CellStyle getContentStyle(SXSSFWorkbook workbook) {
// 設定內容行格式
CellStyle contentStyle = workbook.createCellStyle();
// 設定垂直居中
contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
// 設定邊框
contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
return contentStyle;
}
相關文章
- EasyExcel完成excel檔案的匯入匯出Excel
- 【瀏覽器開啟匯出的excel】瀏覽器Excel
- DcatAdmin 配合 `maatwebsite/excel` 擴充套件 在後臺增加 excel 匯出的功能,並可匯出圖片WebExcel套件
- Excel模板匯出之動態匯出Excel
- iOS 自動打包匯出並安裝ipaiOS
- 不想用POI?幾行程式碼完成Excel匯出匯入行程Excel
- 踹掉後端,前端匯出Excel!後端前端Excel
- 匯出excelExcel
- 匯出Excel後再匯入檔案使用easyexcel讀取,報錯,用WPS開啟對應Excel隨便動一下然後儲存又可以正常讀取了。Excel
- vue excel匯入匯出VueExcel
- Java匯出ExcelJavaExcel
- Vue匯出ExcelVueExcel
- PHP 匯出 ExcelPHPExcel
- PHP匯出EXCELPHPExcel
- python自動開啟瀏覽器下載zip,並且提取內容寫入excelPython瀏覽器Excel
- ASP.NET 開源匯入匯出庫Magicodes.IE 完成Csv匯入匯出ASP.NET
- java匯出Excel定義匯出模板JavaExcel
- Angular Excel 匯入與匯出AngularExcel
- VnTrader 實現CTA策略初始化完成後,自動啟動該策略
- 匯出 Excel 模板自動生成規則,避免使用者來回修改Excel
- python驅動SAP完成資料匯出(二)Python
- VMware在windows自啟動,並開啟虛擬機器Windows虛擬機
- Excel匯出實列Excel
- js匯出Excel表格JSExcel
- vue 前端匯出 excelVue前端Excel
- poi的excel匯出Excel
- vue匯出Excel表格VueExcel
- Excel優雅匯出Excel
- Activiti 學習(三)—— Activiti 流程啟動並完成
- vue + element + 匯入、匯出excel表格VueExcel
- kxcel, 方便匯入和匯出 ExcelExcel
- JAVA使用poi匯出Excel,合併單元格,設定自動列寬JavaExcel
- 微信小程式匯出Excel檔案並轉發給好友微信小程式Excel
- Vue框架下實現匯入匯出Excel、匯出PDFVue框架Excel
- 騰訊文件怎樣匯出excel表格 騰訊文件如何匯出excelExcel
- 前端匯出Excel之動態多級表頭前端Excel
- element-ui 匯出excelUIExcel
- springboot poi匯出excel表格Spring BootExcel