Java導出Excel的Springmvc實例

来源:https://www.cnblogs.com/scau666/archive/2019/03/07/10493442.html
-Advertisement-
Play Games

@RequestMapping(value = "downloadExcel", method = RequestMethod.GET) public String download(HttpServletRequest request,HttpServletResponse response) t ...


 

 @RequestMapping(value = "downloadExcel", method = RequestMethod.GET)  public String download(HttpServletRequest request,HttpServletResponse response) throws IOException{         String fileName="excel文件";         //填充projects數據         ExcelUtil excelUtil = new ExcelUtil();         List<Project> projects = excelUtil.createData();         List<Map<String,Object>> list = excelUtil.createExcelRecord(projects);         String columnNames[]={"ID","項目名","銷售人","負責人","所用技術","備註"};//列名         String keys[]   =    {"id","name","saler","principal","technology","remarks"};//map中的key         ByteArrayOutputStream os = new ByteArrayOutputStream();         try {             ExcelUtil.createWorkBook(list,keys,columnNames).write(os);         } catch (IOException e) {             e.printStackTrace();         }         byte[] content = os.toByteArray();         InputStream is = new ByteArrayInputStream(content);         // 設置response參數,可以打開下載頁面         response.reset();         response.setContentType("application/vnd.ms-excel;charset=utf-8");         response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "utf-8"));         ServletOutputStream out = response.getOutputStream();         BufferedInputStream bis = null;         BufferedOutputStream bos = null;         try {             bis = new BufferedInputStream(is);             bos = new BufferedOutputStream(out);             byte[] buff = new byte[2048];             int bytesRead;             while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {                 bos.write(buff, 0, bytesRead);             }             bos.flush();         } catch (final IOException e) {                    logger.error("導出Excel異常:",e);             throw e;         } finally {             if (bis != null)                 bis.close();             if (bos != null)                 bos.close();         }         return null;     }    /**      * 導出Excel      * @param request      * @param response      */  @RequestMapping(value = "ProcessRequestExcel", method = RequestMethod.GET)     public void ProcessRequest(HttpServletRequest request,HttpServletResponse response){         java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMddhhmmss");         String now = format.format(new Date());         String exportFileName = "信息導出_"+now+".xls";//導出文件名         List<Basicinfo> list = getInfoList();         HSSFWorkbook workBook = null;         String[] cellTitle = {"序號", "姓名", "性別", "部門"};         try {             workBook = new HSSFWorkbook();//創建工作薄             HSSFSheet sheet = workBook.createSheet();             workBook.setSheetName(0, "訂單信息");//工作簿名稱             HSSFFont font = workBook.createFont();               font.setColor(HSSFFont.COLOR_NORMAL);             font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);             HSSFCellStyle cellStyle = workBook.createCellStyle();//創建格式             cellStyle.setFont(font);             cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);             cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);             //創建第一行標題             HSSFRow titleRow = sheet.createRow((short) 0);//第一行標題             for(int i = 0,size = cellTitle.length; i < size; i++){//創建第1行標題單元格                     sheet.setColumnWidth(i,4000);                 HSSFCell cell = titleRow.createCell(i,0);                         cell.setCellStyle(cellStyle);                 cell.setCellValue(cellTitle[i]);             }             //從第二行開始寫入數據             for(int i=1,size = list.size();i<size;i++){                 HSSFRow row = sheet.createRow((short) i);                 Basicinfo entity = list.get(i);                 for (int j = 0,length=cellTitle.length; j < length; j++) {                     HSSFCell cell = row.createCell(j, 0);// 在上面行索引0的位置創建單元格                     cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 定義單元格為字元串類型                     switch(j){// 在單元格中輸入一些內容                     case 0:                         cell.setCellValue(String.valueOf(i));                         break;                     case 1:                         cell.setCellValue(entity.getName());                         break;                     case 2:                         cell.setCellValue(entity.getSex());                         break;                     case 3:                         cell.setCellValue(entity.getDepart());                         break;                     }                 }             }                           // 表示以附件的形式把文件發送到客戶端             response.setHeader("Content-Disposition", "attachment;filename=" + new String((exportFileName).getBytes(), "ISO8859-1"));//設定輸出文件頭             response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定義輸出類型                           // 通過response的輸出流把工作薄的流發送瀏覽器形成文件             OutputStream outStream = response.getOutputStream();             workBook.write(outStream);             outStream.flush();             outStream.close();         }catch(IOException e){             System.out.println("IO 異常!"+e.getMessage());             e.printStackTrace();         }finally{                   }     }           /**      * 模擬資料庫獲取信息      * @return      */     @SuppressWarnings("unchecked")  public List<Basicinfo> getInfoList(){         List<Basicinfo> list = new ArrayList();         for(int i=1;i<101;i++){             Basicinfo entity = new Basicinfo();             entity.setName("員工"+i);             entity.setSex(i%2==1?"男":"女");             entity.setDepart(i>80?"銷售部":"財務部");             list.add(entity);         }         return list;     }  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • dfdfd ...
  • 1.瞭解Spring Spring是一個基於IOC和AOP的結構J2EE系統的框架 Spring是一種單純的管理代碼的框架,和web編程沒什麼直接關係. 作用:調用類對象的時候不採用new的方式而是提前聲明這些類,第一種採用註解的方式(@),第二種採用xml代碼聲明 將核心業務和周邊功能編織在一起. ...
  • 一、數據類型 1位元組=8位 boolean 1位元組 false byte 1位元組 0 -128 127 char 2位元組 空 short 2位元組 0 -32768 32767 int 4位元組 0 -2,147,483,648 2,147,485,647 float 4位元組 0.0 double 8字 ...
  • (見前: "中文代碼示例視頻演示Python入門第五章 數據結構" 仍然基於官方文檔, 歡迎建議(尤其是如何取材). "5. Data Structures More on Lists 列表詳述" "5. Data Structures Using Lists as Stacks 用列表實現棧" " ...
  • 1.異常 當出現錯誤時,程式就會發生異常 輸入num1=3,num2=0,程式產生異常 除了除零異常,還有許多種異常: (1)異常捕獲 使用try…except…語句來捕獲異常 輸出結果: 也可以在except後面加上具體的異常 (2)處理多個異常 上面的例子不止會出現除零異常,如果我輸入的不是數字 ...
  • "知乎原鏈" 5. "Data Structures" 中的第一個常式: 大多數讀者也許都認為這些字元串和數字並沒有特別意義. 如果真是這樣, 這個常式還不如用 之類來的一目瞭然, 省去多餘的猜度. 不巧發現"guido"是Python創作者的名字(Guido van Rossum), 就覺得不該這 ...
  • 通過深入分析Spring源碼,我們知道Spring框架包括大致六大模塊, 如Web模塊,資料庫訪問技術模塊,面向切麵模塊,基礎設施模塊,核心容器模塊和模塊, 其中,在Spring框架的Web模塊中,又包含很多前端技術,如SpringMVC,Spring WebSocket,Spring WebPor ...
  • 這次項目上需要去證書中解析公鑰所以這裡分享下方法: 首先準備一個證書文件比如叫:test.crt(一般是cer結尾) 下一步準備把證書導入到導入java中的cacerts證書庫里 方法如下: 比如本地的jdk路徑是C:\Program Files\Java\jdk1.8.0_181那麼接下來我們要進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...