Excel作為一種非常常見的表格文件,通常用於存儲和展示大量的數據,也是很多程序員在日常工作中不可避免會碰到的。而Hutool是針對Java語言的一個開源工具包,提供了豐富的API,使程序員能夠快速、簡單地完成各種常見操作。
一、Hutool導出Excel的基本原理
在講解Hutool導出Excel之前,需要了解一下Excel的基本結構,通常由Workbook、Sheet、Row和Cell幾個對象組成。Workbook代表整個Excel文件,一個Workbook可以包含多個Sheet,而每個Sheet則包含多個Row,每個Row包含多個Cell。
導出Excel的流程一般為:先創建Workbook對象-> 在該對象中創建Sheet對象 -> 然後在Sheet對象中創建Row對象 -> 最後在每個Row對象中創建Cell對象並填充數據。而Hutool則為我們提供了非常方便的API,能夠在不需要我們手動創建這些對象的情況下,快速地完成Excel數據的導出。
二、Hutool導出Excel的使用方法
首先需要導入Hutool相關的依賴, 接下來我們使用Hutool導出一個簡單的Excel表格,表格內容為:姓名、性別、年齡。
1. 創建Excel對象
// 創建工作簿 Workbook workbook = ExcelUtil.getWorkbook(); // 創建工作表 Sheet sheet = workbook.createSheet("學生信息表");
使用ExcelUtil提供的方法,可以輕鬆地創建Excel對象。ExcelUtil的getWorkbook()方法默認會創建一個XSSFWorkbook對象,而如果想要創建一個HSSFWorkbook對象(即Excel 2003以前的版本),則可以使用getHSSFWorkbook()方法。
2. 創建表頭
Row header = sheet.createRow(0); header.createCell(0).setCellValue("姓名"); header.createCell(1).setCellValue("性別"); header.createCell(2).setCellValue("年齡");
在這裡我們創建了一個Row對象,即表頭,設置了表頭的列名。
3. 填充數據
for (int i = 0; i < students.size(); i++) { Row row = sheet.createRow(i + 1); row.createCell(0).setCellValue(students.get(i).getName()); row.createCell(1).setCellValue(students.get(i).getGender()); row.createCell(2).setCellValue(students.get(i).getAge()); }
填充數據和創建表頭很類似,只需要在每個Row對象中根據列號設置對應數據即可。
4. 導出Excel
ExcelWriter writer = ExcelUtil.getWriter("學生信息表.xlsx"); writer.write(workbook); writer.close();
使用ExcelWriter對象的write()方法將Workbook對象寫入到文件中,然後關閉ExcelWriter對象即可。在這裡我們導出了一個名稱為「學生信息表」的Excel文件。
三、Hutool導出Excel的高級用法
Hutool提供了豐富的API,能夠使Excel導出的過程更加簡單、高效地完成。這裡介紹兩種常見的高級用法。
1. 導出Excel的同時對數據進行格式化
可能出現這樣的情況,導出到Excel的數據需要進行一些數值格式化,例如將浮點數保留到小數點後兩位、轉換時間格式等等。Hutool提供了FormatCellValue接口,可以用來對導出到Excel的數據進行格式化。下面是一個簡單的示例:
Map map = CollUtil.newHashMap(); map.put("name", "張三"); map.put("age", 18); map.put("height", 175); ExcelWriter writer = ExcelUtil.getWriter(); writer.writeCellValue(0, 0, map, new FormatCellValue() { public Object format(Object value, Object key, Cell cell) { if (StrUtil.equals(key.toString(), "age")) { return value + "歲"; } else if (StrUtil.equals(key.toString(), "height")) { return value + "厘米"; } return value; } }); writer.flush(response.getOutputStream()); writer.close();
在這個示例中,我們定義了一個FormatCellValue的實現類,在這個實現類中,我們為數據的「年齡」和「身高」列添加了單位,使用setCellValue()方法導出數據即可。
2. 導出Excel並將其存儲在雲存儲平台中
不僅可以將Excel導出到本地文件系統中,還可以將其存儲在雲存儲平台中。Hutool提供了多種雲存儲平台的支持,例如:阿里雲OSS、騰訊雲COS等等。在這裡以阿里雲OSS為例進行介紹:
private static final String ENDPOINT = "oss-cn-hangzhou.aliyuncs.com"; private static final String ACCESS_KEY_ID = "xxxx"; private static final String ACCESS_KEY_SECRET = "xxxx"; private static final String BUCKET_NAME = "xxxx"; public void exportExcel(List<Student> students) { Workbook workbook = ExcelUtil.getWorkbook(); Sheet sheet = workbook.createSheet("學生信息表"); // 創建表頭 Row header = sheet.createRow(0); header.createCell(0).setCellValue("姓名"); header.createCell(1).setCellValue("性別"); header.createCell(2).setCellValue("年齡"); // 填充數據 for (int i = 0; i < students.size(); i++) { Row row = sheet.createRow(i + 1); row.createCell(0).setCellValue(students.get(i).getName()); row.createCell(1).setCellValue(students.get(i).getGender()); row.createCell(2).setCellValue(students.get(i).getAge()); } // 導出Excel ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ExcelWriter writer = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX); writer.write(workbook); writer.finish(); // 存儲到OSS ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); ossClient.putObject(BUCKET_NAME, "學生信息表.xlsx", inputStream); ossClient.shutdown(); }
在這個示例中,我們使用ExcelWriter將Workbook導出為一個流,然後將其轉為一個位元組數組,最後將其存儲到阿里雲OSS中。
總結
本文主要介紹了如何使用Hutool進行Excel數據導出,從Hutool導出Excel的基本原理、使用方法到高級用法中的格式化、存儲在雲平台中均有闡述。希望本文能夠幫助到初學者快速了解和使用Hutool中的Excel相關API。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197465.html