1. 程式人生 > >java-SpringMVC框架匯出Excel格式資料

java-SpringMVC框架匯出Excel格式資料

1.控制層Controller,使用getLCCnsFeeCalMainExcel.do去接收

@SuppressWarnings("rawtypes")  //去除警告
	@RequestMapping("getLCCnsFeeCalMainExcel.do")
	public ModelAndView queryExcel(@RequestParam("req") String hreq)
			throws ParseException, IOException, SQLException {
		// 根據保單號查詢其他資訊
		hreq = URLDecoder.decode(hreq,"UTF-8");
		LCCnsFeeCalMainDto tLCCnsFeeCalMainDto = JsonUtils.toJsonObject(hreq,
				LCCnsFeeCalMainDto.class);
		List<Map> ptpList = tLCCnsFeeCalMainBlo.queryExcel(tLCCnsFeeCalMainDto);// 資料匯出資料查詢
		String excelName = "LCCnsFeeCalMain.xls";// 建立生成檔案的名字
		LCCnsFeeCalMainViewExcel tLCCnsFeeCalMainViewExcel = new LCCnsFeeCalMainViewExcel(
				excelName, ptpList);// 保單跟進檔案生成方法
		return new ModelAndView(tLCCnsFeeCalMainViewExcel);
	}

2.LCCnsFeeCalMainViewExcel

     LCCnsFeeCalMainViewExcel類繼承AbstractExcelView,呼叫構造方法及重寫的buildExcelDocument方法

       構造方法:建立變數templetFilePath,內容為模板地址,並賦值,賦值過程在步驟3中展示

package com.yunhui.oversea.policy.view;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import com.yunhui.oversea.policy.util.ExcelUtil;

public class LCCnsFeeCalMainViewExcel extends AbstractExcelView {
 String templetFilePath;
 String generateFilePath;
 Properties datas;
 @SuppressWarnings("rawtypes")
 List<Map> list;
    /***
     * 構造方法
     * @param generateFilePath
     * @param list
     */
 @SuppressWarnings("rawtypes")
 public LCCnsFeeCalMainViewExcel(String generateFilePath,List<Map> list) {
  //獲取檔案模板
  this.templetFilePath = System.getProperty("webServerRoot")+"/excel/LCCnsFeeCalMainView.xls";
  this.generateFilePath = generateFilePath;
  this.list = list;
 }
 
    /***
    * 向Excel表中寫資料,生成對應的Excel文件
    */
 @Override
 protected void buildExcelDocument(Map<String, Object> arg0,
   HSSFWorkbook arg1, HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  response.setContentType("application/vnd.ms-excel");
  response.setHeader("Content-disposition", "attachment;filename="
    + this.generateFilePath);
  ExcelUtil excel = new ExcelUtil(this.templetFilePath);
  excel.insertRow(1,this.list);
  
  OutputStream ouputStream = response.getOutputStream(); 
   BufferedOutputStream bos = new BufferedOutputStream(ouputStream);
  excel.wb.write(bos);
   bos.flush();     
   bos.close();
 }
}
      重寫的buildExcelDocument:將引數使用ExcelUtil類,插入Excel表中,程式碼如下:
	public void insertRow(int starRow,List<Map> list) throws IOException {

		HSSFSheet sheet = this.wb.getSheetAt(0);
		// 選擇一個區域,從startRow+1直到最後一行
		sheet.shiftRows(starRow + 1, sheet.getLastRowNum(), list.size(), true, false);

		//System.out.println("starRow1:" + starRow);
		starRow = starRow - 1;

		for (int i = 0; i < list.size(); i++) {
			HSSFRow sourceRow = null;
			HSSFRow targetRow = null;
			HSSFCell sourceCell = null;
			HSSFCell targetCell = null;
			short m;
			starRow = starRow + 1;
			sourceRow = sheet.getRow(starRow);

			//System.out.println("starRow2:" + starRow);
			if (sourceRow == null) {
				sourceRow = sheet.createRow(starRow);
			}
			// 從start建立新的一行
			targetRow = sheet.createRow(starRow + 1);
			targetRow.setHeight(sourceRow.getHeight());
			// sourceRow.setRowNum(sourceRow.getRowNum());
			// 處理剛剛建立的一行
			Map cellmap = (HashMap)list.get(i);
    		Object s[] = cellmap.keySet().toArray();
			for(m = 0; m < cellmap.size(); m++) {
			//for (m = sourceRow.getFirstCellNum(); m < cellList.size(); m++) {
				sourceCell = sourceRow.getCell(m);
				targetCell = targetRow.createCell(m);

				// 風格一樣
				HSSFCellStyle style = wb.createCellStyle();
				style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
				style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
				style.setBorderRight(HSSFCellStyle.BORDER_THIN);
				style.setBorderTop(HSSFCellStyle.BORDER_THIN);

				HSSFFont fontNormal = wb.createFont();
				fontNormal.setFontHeightInPoints((short) 10);
				fontNormal.setFontName("宋體");
				fontNormal.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
				style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
				style.setFont(fontNormal);

				targetCell.setCellStyle(style);
				//targetCell.setCellStyle(sourceCell.getCellStyle());
				//targetCell.setCellType(sourceCell.getCellType());
				String value = "";
				if (cellmap.get(s[m]) != null) 
				{
					if (cellmap.get(s[m]).getClass().equals(Timestamp.class)) {
						Timestamp timestamp = (Timestamp) cellmap.get(s[m]);
						Date date = new Date(timestamp.getTime());
						value = DateUtils.format(date, DateUtils.FORMAT_LONG);
					} else if (cellmap.get(s[m]).getClass().equals(BigDecimal.class)) {
						value = StringUtils.twoDecimal(((BigDecimal) cellmap.get(s[m])).doubleValue());
					} else {
						value = cellmap.get(s[m]) + "";
					}
				}
				targetCell.setCellType(HSSFCell.CELL_TYPE_STRING);
				targetCell.setEncoding(HSSFCell.ENCODING_UTF_16);
				targetCell.setCellValue(value);// 設定值
			}
		}
	}
3.web.xml配置         在tomcat下部署兩個或多個專案時,web.xml檔案中最好定義webAppRootKey引數,如果不定義,將會預設為“webapp.root”,最好保證每個專案的引數值不同,以免引起專案衝突。
<!--   <context-param>  
    <param-name>webAppRootKey</param-name>  
    <param-value>webServerRoot</param-value>  
  </context-param>  -->
<listener>
    <listener-class>com.yunhui.oversea.policy.servlet.GeneralListener
		</listener-class>
  </listener>
4.配置監聽器GeneralListener類        使用event.getServletContext().getRealPath("/")方法取得物理路徑,並把其作為key和value放到system.properties系統屬性中
public class GeneralListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent event) {
		String webServerRoot = event.getServletContext().getRealPath("/");
		System.setProperty("webServerRoot", webServerRoot);
		Properties properties = new Properties();  
        try  
        {  
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("system.properties"); 
            properties.load(inputStream);  
            inputStream.close(); //關閉流  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
		LogUtils.info(Log.BIZ_LOGGER, "webServerRoot:"+event.getServletContext().getRealPath("/"));

	}
5.ModelAndView         最後使用ModelAndView接收excel格式資料引數,並返回給前端展示 6.Excel檔案匯出成功
              



相關推薦

java-SpringMVC框架匯出Excel格式資料

1.控制層Controller,使用getLCCnsFeeCalMainExcel.do去接收 @SuppressWarnings("rawtypes") //去除警告 @RequestMapping("getLCCnsFeeCalMainExcel.do") pub

Java SpringMVC專案匯出excel多種類對應工具類整理(util)

上一章介紹如何匯入excel進系統處理成MAP集合(詳情請看上提供的連結),這次我又整理了一下如何快速匯出excel的工具。 1.匯出無表頭excel 檔案單個工作表(sheet),【fileName是標題名,titleList是列名,list就是

基於C#語言MVC框架NPOI控制元件匯出Excel資料

控制元件bin檔案下載地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "dcxx"; } <script type="text/javascript"

java 匯出excel格式

                        jxl.write.N

解決Java中POI匯入Excel表格資料時 日期格式資料解析錯誤的問題

用POI匯入excel資料時,日期格式(如2018/7/7)資料預設會被解析成double格式,解決方法如下: package com.test.util; import java.text.DateFormat; import java.text.SimpleDate

java匯入和匯出excel文件(支援xls,xlsx格式

好久沒寫部落格了,寫個簡單的估計也是常用的,歡迎評判指導交流 相關jar包,可以先百度,因為時間問題後續再補上 package main.java; import java.io.File; import java.io.FileInputStream; import

Java SpringMVC框架學習(二)httpServeltRequest和Model傳值的區別

urn ont ppi mode array style att 區別 () 為什麽大多程序在controller中給jsp傳值時使用model.addAttribute()而不使用httpServeletRequest.setAttribute()? 事實上model數

java使用poi匯出excel例子

java匯出某個頁籤: 第一步:先在jsp新建一個匯出介面按鈕: <a id="export" class="mini-button" iconCls="icon-download" onclick="exportexcel();" plain="true">匯出</a>

php 匯出excel大量資料方法

由於資料較大,常用的PHPexcel包需要把所有資料拿到後才能生成excel, 在面對生成超大資料量的excel檔案時這顯然是會造成記憶體溢位的,所以考慮使用讓PHP邊寫入輸出流邊讓瀏覽器下載的形式來完成需求。 通過PHP輸出流方式匯出 php://output是一個可寫的輸出流,允許程

Java中檔案匯出excel

首先是在HTML頁面中加上匯出按鈕: <div class="ibox-body"> <div id="exampleToolbar" role="group"> <button type="button" class="btn b

java根據模板匯出excel(二)

       最近在做一個專案,關於excel的匯出問題,上網查了很多,最後自己整理並編寫了關於模板匯出的方法,可能會有一些侷限性,但是對於簡單的模板匯出功能是可以實現的,先留下筆記,以供日後參考!思路其實很簡單,主要分為:(1)讀取模板excel(2)迴圈模

Beego框架:多種格式資料輸出

beego 當初設計的時候就考慮了 API 功能的設計,而我們在設計 API 的時候經常是輸出 JSON 或者 XML 資料,那麼 beego 提供了這樣的方式直接輸出: JSON 資料直接輸出: func (this *AddController) Get() {

java、jsp匯出excel功能備份

問題踩坑: ajax請求不能下載檔案 必須這樣: <a href="/media">點選下載Excel</a> 或者 location.href = '/media';   js取表單資料:   p.p1 { margin: 0.0px 0.0px

poi匯出Excel Java POI匯入匯出Excel

Java POI匯入匯出Excel   1、異常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException     解決方法:     

java後端匯出Excel

1.jxl匯出Excel的幾種方法 import jxl.CellView; import jxl.SheetSettings; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import

MongoDB匯出csv格式資料

第一步: 在cmd中進入mongodb的安裝目錄下的bin資料夾 C:\Users\zzz>cd C:\Program Files\MongoDB\Server\4.0\bin 第二步: 從MongoDB匯出csv格式資料 mongoexport

Java Web專案匯出Excel的實現

背景:本次實現基於原生JDBC連線資料庫、Struts2框架。 1.JDBC連線資料庫部分比較簡單,就不詳細介紹,簡述:建立一個JavaBean類,連線資料庫獲取該JavaBean物件的集合; 2.建立通用工具類,用於生成Excel模板: import org.apache.poi.hssf.

Java根據模板匯出Excel並生成多個Sheet

因為最近用報表匯出比較多,所有就提成了一個工具類,本工具類使用的場景為  根據提供的模板來匯出Excel報表 並且可根據提供的模板Sheet頁進行復制 從而實現多個Sheet頁的需求, 使用本工具類時,如果需求是每個Sheet頁中的資料都不一致,但是表格樣式和模板都一樣 那

SpringMvc實現匯出Excel檢視

   SpringMvc提供了AbstractXlsView提供Excel檢視,它是一個抽象類,提供了一個抽象方法-buildExcelDocument要去實現,其它方法,AbstractXlsView其它方法已經實現了     buildExcelDocuent主要任務是

JAVA之SAX解析XML格式資料--Jdom.jar

package com.yldyyn.test; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.