摘要:的使用及導出報表首先,了解是什么一基本概念是軟件基金會的開放源碼函式庫,提供給程序對格式檔案讀和寫的功能。
POI的使用及導出excel報表
首先,了解poi是什么?
一、基本概念
? Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。
二、基本結構
? HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
? XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
? HWPF - 提供讀寫Microsoft Word格式檔案的功能。
? HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
? HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
一開始模仿公司項目的代碼,使用一些工具類ExcelHelper、ExportUtil 來創建excel,并導出,部分代碼如下:
// ... ExcelHelper.writeExcel(fileName, excelVOList, ProblemLiveVO.class, null, titles); ExportUtil.exportToClient(response, ContentType.MULTIPART_FORM_DATA.toString(), ParamsUtil.EXCEL, fileName, true);
? 后來發現,用此方式不太合適,一般我們要做報表的話,產品經理會先給一個報表模板,我們可以將此報表模板做得美觀一些(設置好表頭顏色等),然后先用poi讀取這份模板,再添加修改,最后直接導出到客戶端。這樣效率也更高。其實poi的使用是比較簡單的,可參考以下代碼:(有詳細注釋)
@Transactional(propagation = Propagation.REQUIRED, readOnly = true) public ResponseEntitydownloadExcel() { // 1.封裝數據到 List(此處需按實際情況封裝數據) List list = reportFinancialDao.findAll(); try { // 2.讀取報表模板 URL resource = this.getClass().getClassLoader() .getResource("excel/NiceReportForm.xlsx"); Assert.notNull(resource, "讀取不到財務報表模板"); String path = resource.getPath(); FileInputStream fis = new FileInputStream(path); String fileName = "財務報表" + new SimpleDateFormat("yyyyMMddHHmmss") .format(new Date()) + ".xlsx"; // 創建Workbook XSSFWorkbook workbook = new XSSFWorkbook(fis); // 讀取sheet1 XSSFSheet sheet = workbook.getSheetAt(0); // 設置表格居中 XSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER); // 3.向excel中添加數據 int rowLine = 2; // 2即為第三行, 從0開始算, 根據實際情況設置 for (ReportFinancial report : list) { XSSFRow row = sheet.createRow(rowLine++); row.createCell(0).setCellValue(report.getReportFinancialId()); row.createCell(1).setCellValue(report.getNickName()); row.createCell(2).setCellValue(report.getMoney()); row.createCell(3).setCellValue(report.getCreateTime()); // ...根據實際數據添加 // 設置以上添加的表格數據居中 for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) { row.getCell(i).setCellStyle(cellStyle); } } // 4.將workbook中的數據寫到輸出流中 ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); baos.close(); // 5.設置請求頭, 返回一個ResponseEntity HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.CONTENT_ENCODING, "UTF-8"); headers.setContentDispositionFormData("attachment", fileName); headers.setPragma(fileName); headers.setCacheControl("No-cache"); headers.setDate("Expires", 0); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<>(baos.toByteArray(), headers, HttpStatus.CREATED); } catch (Exception e) { e.printStackTrace(); } return null; }
此部分代碼為Service層的代碼,返回值為ResponseEntity
此 downloadExcel 方法可作為參考,需要更改的有:
第一步,根據實際情況封裝數據
第二步,模板報表的位置,我是放在resources/excel下
第三步,將實際數據添加到表格的某行某列中 row.createCell(0).setCellValue( )
當然,將數據寫回客戶端,還有另一種方式,寫到 HttpServletResponse response 的輸出流,可自行選擇。
最后,此篇文章只是實現簡單的excel表格,需要更加具體詳細的設置,可自行查看API
廣州蘆葦科技Java開發團隊
蘆葦科技-廣州專業互聯網軟件服務公司
抓住每一處細節 ,創造每一個美好
關注我們的公眾號,了解更多
想和我們一起奮斗嗎?lagou搜索“ 蘆葦科技 ”或者投放簡歷到 server@talkmoney.cn 加入我們吧
關注我們,你的評論和點贊對我們最大的支持
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72835.html
摘要:積分消費明細對賬單其中,有四個參數,分別是,,,。導出讀取數據庫的信息,轉成。 public void detailExport() { String sourceSystem = getPara(source_system); String dataDate = getPara(data_date); Integer pointsType = get...
摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統的區別也是很明顯的。能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。放寬了一部分約束,來實現流式讀取文件系統數據的目的。是項目的一部分。 關鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業務需求方面,每個企業或多或少都會有報表導出的作業,量少則可是使用輸出流或者字符串的...
摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統的區別也是很明顯的。能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。放寬了一部分約束,來實現流式讀取文件系統數據的目的。是項目的一部分。 關鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業務需求方面,每個企業或多或少都會有報表導出的作業,量少則可是使用輸出流或者字符串的...
摘要:閱讀原文如何高效導出百萬級數據在一個具有統計功能的系統中,導出功能幾乎是一定的,如何導出導出的數據有多少如何高效的導出簡介什么是就不用介紹了,這里主要說明不同版本下每個下的行列限制。 閱讀原文:POI如何高效導出百萬級Excel數據? 在一個具有統計功能的系統中,導出excel功能幾乎是一定的,如何導出excel?導出的數據有多少?如何高效的導出? Excel簡介什么是excel就不用...
摘要:接著上一篇基于的和開源庫導出大數據報表一的遺留的問題開始,這篇做優化處理。這個錯誤造成的直接問題是數據空白,因為只會執行一次,第二次條件就為了。幾經波折,終于知道,引起錯誤的原因是包沖突,和包的沖突。 接著上一篇《基于haddop的HDFS和Excel開源庫POI導出大數據報表(一)》的遺留的問題開始,這篇做優化處理。 優化導出流程 在一開始的時候,當我獲取到訂單的數量,遍歷訂單,獲取...
閱讀 924·2021-09-29 09:35
閱讀 1266·2021-09-28 09:36
閱讀 1538·2021-09-24 10:38
閱讀 1087·2021-09-10 11:18
閱讀 647·2019-08-30 15:54
閱讀 2513·2019-08-30 13:22
閱讀 1977·2019-08-30 11:14
閱讀 712·2019-08-29 12:35