Java利用Easyexcel導(dǎo)出excel表格的示例代碼
1.導(dǎo)入 EasyExcel Maven包
<!--easyexcel 導(dǎo)出excel依賴(lài)-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.7</version>
</dependency>
2.配置
配置表格表頭樣式,以及內(nèi)容的寫(xiě)入方式
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import java.util.List;
public class EasyExcelWriteHandler implements SheetWriteHandler {
/**
* 表頭數(shù)據(jù)
*/
private final List<String> headsDatas;
/**
* 內(nèi)容數(shù)據(jù)
*/
private final List<List<String>> bodyDatas;
/**
* 表頭樣式
*/
private CellStyle cellStyle;
/**
* 內(nèi)容樣式
*/
private CellStyle cellStyleHeader;
public EasyExcelWriteHandler(List<String> headsDatas, List<List<String>> bodyDatas) {
this.headsDatas = headsDatas;
this.bodyDatas = bodyDatas;
}
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
// 表頭樣式
if (cellStyleHeader == null) {
cellStyleHeader = workbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setFillForegroundColor(IndexedColors.WHITE.getIndex());
Font font = workbook.createFont();
// 字體大小
font.setFontHeightInPoints((short) 16);
// 字體
font.setFontName("微軟雅黑");
//加粗
font.setBold(true);
cellStyleHeader.setFont(font);
}
// 內(nèi)容樣式
if (cellStyle == null) {
cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
Font font = workbook.createFont();
font.setFontName("微軟雅黑");
font.setFontHeightInPoints((short) 12);
cellStyle.setFont(font);
}
//表頭內(nèi)容
Row row = sheet.getRow(0);
if (row == null) {
row = sheet.createRow(0);
}
//遍歷寫(xiě)入表頭
for (int rowInt = 0; rowInt < headsDatas.size(); rowInt++) {
//獲取列內(nèi)容
String cellValue = headsDatas.get(rowInt);
//根據(jù)表頭內(nèi)容設(shè)置表頭列寬(自適應(yīng)表頭寬度)
sheet.setColumnWidth(rowInt, cellValue.length() * 875);
Cell cell = row.getCell(rowInt);
if (cell == null) {
cell = row.createCell(rowInt);
}
cell.setCellStyle(cellStyleHeader);
cell.setCellValue(cellValue);
//遍歷寫(xiě)入內(nèi)容
if (rowInt < bodyDatas.size()) {
for (int bodyRowInt = 0; bodyRowInt < bodyDatas.get(rowInt).size(); bodyRowInt++) {
Row row0 = sheet.getRow(bodyRowInt + 1);
if (row0 == null) {
row0 = sheet.createRow(bodyRowInt + 1);
}
Cell cell0 = row0.getCell(rowInt);
if (cell0 == null) {
cell0 = row0.createCell(rowInt);
}
cell0.setCellStyle(cellStyle);
cell0.setCellValue(bodyDatas.get(rowInt).get(bodyRowInt));
}
}
}
}
}
3.輸出Excel到前端
public static void easyUtil1(ExcelBody excelBody) throws IOException {
//轉(zhuǎn)換內(nèi)容數(shù)據(jù)
List<List<String>> list2 = new ArrayList<>();
for (List<Object> objects : excelBody.getBodyDatas()) {
List<String> strs = new ArrayList<>();
for (Object object : objects) {
strs.add(String.valueOf(object));
}
list2.add(strs);
}
//設(shè)置表名
String simpleDateFormat = new String((new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())).getBytes(), "UTF-8");
//設(shè)置字符編碼
response.setCharacterEncoding("utf-8");
//設(shè)置內(nèi)容類(lèi)型
response.setContentType("application/vnd.ms-excel");
//設(shè)置標(biāo)題
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(excelBody.getFileName() + simpleDateFormat + ".xlsx", "utf-8"));
//核心代碼
//方式一:
//EasyExcel.write(response.getOutputStream()).head(list2).sheet("sheet1").doWrite(list2);
//方式二:
ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream());
writerBuilder.registerWriteHandler(new EasyExcelWriteHandler(excelBody.getHeads(), list2));
ExcelWriter excelWriter = writerBuilder.build();
ExcelWriterSheetBuilder writerSheetBuilder = EasyExcel.writerSheet("Sheet1");
excelWriter.write(new ArrayList<>(), writerSheetBuilder.build());
excelWriter.finish();
}
@Data
public class ExcelBody {
/**
* 文件名
*/
private String fileName;
/**
* 表頭
*/
private List<String> heads;
/**
* 數(shù)據(jù)體
*/
private List<List<Object>> bodyDatas;
}
到此這篇關(guān)于Java利用Easyexcel導(dǎo)出excel表格的示例代碼的文章就介紹到這了,更多相關(guān)Java Easyexcel導(dǎo)出excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot的三大開(kāi)發(fā)工具小結(jié)
本文主要介紹了SpringBoot的三大開(kāi)發(fā)工具,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
spring mvc 和ajax異步交互完整實(shí)例代碼
本篇文章主要介紹了spring mvc 和ajax異步交互完整實(shí)例代碼,簡(jiǎn)單的AJAX+SpringMVC的異步交互小例子,有興趣的可以了解一下。2017-02-02
詳解SpringBoot如何刪除引用jar包中的無(wú)用bean
為了趕速度和直接將之前多模塊的maven項(xiàng)目中的部分模塊,直接以jar包的形式引入到新項(xiàng)目中了,雖然省去了不少開(kāi)發(fā)時(shí)間,導(dǎo)致項(xiàng)目臃腫,啟動(dòng)很慢。本文將用@ComponentScan注解去實(shí)現(xiàn)讓項(xiàng)目只加載自己需要的bean,需要的可以參考一下2022-06-06
Java根據(jù)控制臺(tái)實(shí)現(xiàn)定位異常
這篇文章主要介紹了Java根據(jù)控制臺(tái)定位異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Java concurrency線程池之線程池原理(四)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
詳解application.properties和application.yml文件的區(qū)別
這篇文章主要介紹了詳解application.properties和application.yml文件的區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
使用Java實(shí)現(xiàn)將ppt轉(zhuǎn)換為文本
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)將ppt轉(zhuǎn)換為文本,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-01-01

