1. 程式人生 > >POI技術匯出資訊到.xls .xlsx Excel表

POI技術匯出資訊到.xls .xlsx Excel表

2、Controller
// 單號資訊service
@Autowired
public OrderService orderService ;		//服務層改為自己的
/**
		 * 匯出訂單資訊到Excel表
		 * @author Justin
		 */
		@RequestMapping("order_export.action")
		public void exportOrderToExcel(HttpServletResponse response) throws IOException {
			try {
			Order order= new Order();
			List<Order> orderList =  orderService.selectAll();	//列表,服務層改為自己的
			if(orderList .size()==0){
				response.sendRedirect("errornull.action");
			}else{
			// 在記憶體中建立一個Excel檔案,通過輸出流寫到客戶端提供下載
			// 記憶體中保留 10000 條資料,以免記憶體溢位,其餘寫入 硬碟
			SXSSFWorkbook workbook = new SXSSFWorkbook(10000);
			// 建立一個sheet頁
			SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("訂單資訊");
			// 分別設定Excel列的寬度
			sheet.setColumnWidth(0, 150 * 40);
			sheet.setColumnWidth(1, 100 * 40);
			sheet.setColumnWidth(2, 100 * 40);
			sheet.setColumnWidth(3, 100 * 40);

			// 建立標題
			SXSSFRow headRow = (SXSSFRow) sheet.createRow(0);
			headRow.createCell(0).setCellValue("訂單號");
			headRow.createCell(1).setCellValue("姓名");
			headRow.createCell(2).setCellValue("地址");
			headRow.createCell(3).setCellValue("電話");

			for (Order order: orderList) {
				// 建立行
				SXSSFRow dataRow = (SXSSFRow) sheet.createRow(sheet.getLastRowNum() + 1);

				dataRow.createCell(0).setCellValue(order.getOrderNumber().toString());
				dataRow.createCell(1).setCellValue(order.getName().toString());
				dataRow.createCell(2).setCellValue(order.getAddress().toString());
				dataRow.createCell(3).setCellValue(order.getPhone.toString());
			}
				// 設定Excel檔名,並以中文進行編碼
				String name = "訂單資訊"+ DateUtils.getyyyyMMddHHmmss(new Date());
				String codedFileName = new String(name.getBytes("gbk"), "iso-8859-1");
				response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName + ".xlsx");
				// 響應型別,編碼
				response.setContentType("application/octet-stream;charset=UTF-8");
				// 形成輸出流
				OutputStream osOut = response.getOutputStream();
				// 將指定的位元組寫入此輸出流
				workbook.write(osOut);
				// 重新整理此輸出流並強制將所有緩衝的輸出位元組被寫出
				osOut.flush();
				// 關閉流
				osOut.close();
				/*
				 * dispose of temporary files backing this workbook on disk 處理在磁碟上備份此工作簿的臨時檔案
				 * SXSSF分配臨時檔案,您必須始終清除顯式,通過呼叫dispose方法
				 */
				workbook.dispose();
				}
			} catch (Exception e) {
				e.printStackTrace();
				response.sendRedirect("error.action");
				log.error("系統錯誤", e.fillInStackTrace());
			}
		}