亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java Hutool 包工具類推薦 ExcelUtil詳解

 更新時間:2022年09月30日 17:14:45   作者:莫傷曉  
這篇文章主要介紹了Java Hutool 包工具類推薦 ExcelUtil詳解,需要引入hutool包,版本號可根據(jù)實(shí)際情況更換,除hutool包之外,還需要引入操作Excel必要包,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

Java Hutool 包工具類推薦 ExcelUtil

包引入

hutool包版本號可根據(jù)實(shí)際情況更換

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.4.M1</version>
</dependency>

除hutool包之外,還需要引入操作Excel必要包

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-full</artifactId> 
    <version>5.0.0</version>
</dependency>

一般簡單表頭Excel封裝工具類

直接上代碼

package io.supers.common.utils;

import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.style.StyleUtil;
import io.supers.framework.em.BaseErrorEnum;
import io.supers.framework.exception.RRException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * Excel 工具類
 *
 * @author guoc
 * @date 2022年05月31日 下午 17:21
 */
public class ExcelUtils {

    /**
     * 下載 Excel 模板 (只有表頭的 Excel)
     *
     * @param response response
     * @param headers  表頭
     * @param fileName 文件名
     */
    public static void exportHeaders(HttpServletResponse response, List<String> headers, String fileName) {
        export(response, null, headers, fileName);
    }

    /**
     * 導(dǎo)出或下載 Excel 公用方法
     *
     * @param response 當(dāng)前請求的 HttpServletResponse
     * @param rows     需要寫入的數(shù)據(jù) List
     * @param fileName 最終文件名
     */
    public static void export(HttpServletResponse response, List<Map<String, Object>> rows, List<String> headers, String fileName) {
        // 獲取 Writer
        ExcelWriter writer = ExcelUtil.getWriter(true);
        // 寫入表頭
        writer = writer.writeHeadRow(headers);
        // 若是有數(shù)據(jù) 則寫入數(shù)據(jù)
        if (CollectionUtils.isNotEmpty(rows)) {
            writer.write(rows);
        }
        Workbook workbook = writer.getWorkbook();
        CellStyle defaultCellStyle = StyleUtil.createDefaultCellStyle(workbook);
        DataFormat format = writer.getWorkbook().createDataFormat();
        // 默認(rèn)為 文本格式
        defaultCellStyle.setDataFormat(format.getFormat("@"));
        // 默認(rèn)為 居中
        defaultCellStyle.setAlignment(HorizontalAlignment.CENTER);
        for (int i = 0; i < headers.size(); i++) {
            String h = headers.get(i);
            h = h == null ? " " : h;
            writer.setColumnStyle(i, defaultCellStyle);
            // 默認(rèn)寬度為 3 * 表頭字符數(shù)
            writer.setColumnWidth(i, 3 * h.length());
        }
        try {
            // 彈出下載對話框的文件名,不能為中文,中文請自行編碼
            fileName = URLUtil.encode(fileName);
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
            response.setContentType(ExcelUtil.XLSX_CONTENT_TYPE);
            // 輸出
            ServletOutputStream out = response.getOutputStream();
            writer.flush(out, true);
            // 關(guān)閉writer,釋放內(nèi)存
            writer.close();
            //此處記得關(guān)閉輸出Servlet流
            IoUtil.close(out);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RRException(BaseErrorEnum.COMMON_ERROR, "下載文件失敗!\n" + e.getMessage());
        }
    }

    /**
     * 讀取上傳到后臺的excel
     *
     * @param file MultipartFile 上傳的文件
     * @return 數(shù)據(jù)列表
     * @throws IOException e
     */
    public static List<Map<String, Object>> readExcelRows(MultipartFile file) throws IOException {
        return ExcelUtil.getReader(file.getInputStream()).readAll();
    }
}

工具類封裝了三個方法, 只寫入表頭方法, 寫入表頭和數(shù)據(jù)方法 和 讀取表格數(shù)據(jù)列表方法。

三個方法的操作簡單,看代碼就能明白,不多贅述了。

復(fù)雜表頭或表格內(nèi)合并單元格寫入

合并單元格核心方法

// cn.hutool.poi.excel.ExcelWriter#merge(int, int, int, int, java.lang.Object, boolean)
	/**
	 * 合并某行的單元格,并寫入對象到單元格<br>
	 * 如果寫到單元格中的內(nèi)容非null,行號自動+1,否則當(dāng)前行號不變<br>
	 * 樣式為默認(rèn)標(biāo)題樣式,可使用{@link #getHeadCellStyle()}方法調(diào)用后自定義默認(rèn)樣式
	 *
	 * @param firstRow         起始行,0開始
	 * @param lastRow          結(jié)束行,0開始
	 * @param firstColumn      起始列,0開始
	 * @param lastColumn       結(jié)束列,0開始
	 * @param content          合并單元格后的內(nèi)容
	 * @param isSetHeaderStyle 是否為合并后的單元格設(shè)置默認(rèn)標(biāo)題樣式,只提取邊框樣式
	 * @return this
	 * @since 4.0.10
	 */
    public ExcelWriter merge(int firstRow, int lastRow, int firstColumn, int lastColumn, Object content, boolean isSetHeaderStyle) {
		Assert.isFalse(this.isClosed, "ExcelWriter has been closed!");

		CellStyle style = null;
		if (null != this.styleSet) {
			style = styleSet.getStyleByValueType(content, isSetHeaderStyle);
		}

		return merge(firstRow, lastRow, firstColumn, lastColumn, content, style);
	}

看完一般表頭寫入的代碼,可以得知,此工具類寫入表頭時只需傳入表頭的字符串列表,即 List<String>,若是遇到動態(tài)表頭時,則可以通過遍歷的操作,先生成出導(dǎo)出數(shù)據(jù)中所有需要的表頭信息,即可為下一步的寫入數(shù)據(jù)的數(shù)據(jù)列表List<Map<String,Object>> 做準(zhǔn)備了。

若是遇到某列或某些列中有合并單元格的,一般都有規(guī)律的,可以遍歷數(shù)據(jù)時根據(jù)合并的數(shù)據(jù)項(xiàng)內(nèi)容通過合并單元格方法進(jìn)行合并單元格操作。

總結(jié)

通過以上方法,可以處理絕大多數(shù)情況的導(dǎo)出寫入和基本所有的導(dǎo)入讀?。▽?dǎo)入時的模板盡量規(guī)定為簡單表頭)。

寫入寫出數(shù)據(jù)基本上都使用的是Map<String,Object>,若是要轉(zhuǎn)成JavaBean,自行寫方法對應(yīng)即可。

到此這篇關(guān)于Java Hutool 包工具類推薦 ExcelUtil的文章就介紹到這了,更多相關(guān)Java Hutool 包工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論