国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java中使用JXLS工具類導出復雜Excel表格

這篇具有很好參考價值的文章主要介紹了Java中使用JXLS工具類導出復雜Excel表格。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

? ?在項目開發(fā)中,我們會遇到各種文件導出的開發(fā)場景,但是這種情況并都不常用,于是本人將自己工作中所用的代碼封裝成工具類,旨在記錄工具類使用方法和技術(shù)分享。

一、Jxls的簡介

? ?Jxls是一個簡單的、輕量級的excel導出庫,使用特定的標記在excel模板文件中來定義輸出格式和布局。Java中成熟的excel導出工具備Pol、Jxl,但他們都是使用java代碼的方式來導出Excel,編碼效率很低且不方便維護。

二、快速開始

1、導入依賴

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.4.6</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>1.0.12</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-jexcel</artifactId>
    <version>1.0.6</version>
</dependency>


2、定義導出的模板

? ?導入依賴后,我們導出需要使用到模板,我們要先用word建立一個xlsx的模板(切記:新建excel工作表要使用xlsx格式,不要使用xls格式,因為使用xls導出的時候xlsx表格數(shù)據(jù)有可能會有問題)
建立好xlsx工作表了就根據(jù)實際需求的頁面在xlsx表格上把需要的導出的框架畫出來就可,賦值就要使用表達式了,表達式可以查看官網(wǎng)也可以查看我下方寫的。官方網(wǎng)址,模板弄好之后,需要放在resource目錄下,在Java中進行讀取,下面代碼中有具體實現(xiàn)。
如何寫表達式,在工作表中右鍵插入批注,office中添加批注快捷鍵(Shit + F2)

jxls,Java導入導出,excel,java,spring boot

jx:each(items="${collection}" var="item" lastCell="A3")

其中items是你傳入的集合的名稱,var是集合中每個對象的別名,lastCell是循環(huán)最后的位置

jxls,Java導入導出,excel,java,spring boot

jx:area(lastCell="H3")

這里設(shè)置標題范圍,最寬到H3

模板表達式

簡單列舉常用的幾個表達式

(1)單個值的注入:

${variable},variable是你傳入的參數(shù)的key

(2)迭代循環(huán)注入:

jx:each(items="${collection}" var="item" lastCell="A3")

其中items是你傳入的集合的名稱,var是集合中每個對象的別名,lastCell是循環(huán)最后的位置

(3)條件判斷:

jx:if test="${condition}"? ?條件為真時執(zhí)行的內(nèi)容

(4)合并單元格:

jx:mergeCells(lastCell="合并單元格范圍"
[, cols="合并的列數(shù)"]
[, rows="合并的行數(shù)"]
[, minCols="要合并的最小列數(shù)"]
[, minRows="要合并的最小行數(shù)"])

3、使用工具類

package com.sansint.industry.utils;
import org.jxls.common.Context;
import org.jxls.expression.JexlExpressionEvaluator;
import org.jxls.transform.Transformer;
import org.jxls.transform.poi.PoiTransformer;
import org.jxls.util.JxlsHelper;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


/**
 * @author DongJiYong
 * jxls工具類
 */
public class JxlsUtils {


    /**
     * 模板導出
     *
     * @param is
     * @param os
     * @param model
     * @throws IOException
     */
    public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException {
        Context context = PoiTransformer.createInitialContext();
        if (model != null) {
            for (Map.Entry<String, Object> Entry : model.entrySet()) {
                context.putVar(Entry.getKey(), Entry.getValue());
            }
        }
        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        Transformer transformer = jxlsHelper.createTransformer(is, os);
        //獲得配置
        JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig().getExpressionEvaluator();
        //設(shè)置靜默模式,不報警告
        evaluator.getJexlEngine().setSilent(true);
        //函數(shù)強制,自定義功能
        Map<String, Object> funcs = new HashMap<>();
        funcs.put("utils", new JxlsUtils());
        evaluator.getJexlEngine().setFunctions(funcs);
        //必須要這個,否則表格函數(shù)統(tǒng)計會錯亂
        jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer);
    }

    /**
     * 導出excel
     *
     * @param templatePath
     * @param os
     * @param model
     * @throws Exception
     */
    public static void exportExcel(String templatePath, OutputStream os, Map<String, Object> model) throws Exception {
        File template = getTemplate(templatePath);
        if (template != null) {
            exportExcel(new FileInputStream(template), os, model);
        } else {
            throw new Exception("Excel 模板未找到。");
        }
    }

    /**
     * 獲取jxls模板
     *
     * @param path
     * @return
     */
    public static File getTemplate(String path) {
        File template = new File(path);
        if (template.exists()) {
            return template;
        }
        return null;
    }


    /**
     * 設(shè)置響應(yīng)頭、文件名
     *
     * @param response
     * @param fileName
     * @throws UnsupportedEncodingException
     */
    public static void setResponse(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
        fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
    }
}

4、Controller層代碼

使用該工具類主要在Controller層或者Service層封裝好導出的數(shù)據(jù)和導出流即可,本人是在Controller層進行封裝的數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-777380.html

 /***
     * excel導出
     * @param request
     * @param sanSintUser
     */
    @GetMapping("/excel")
    public void excelDownload(ParamRequest request, SanSintUser sanSintUser, HttpServletResponse response) {
        try {
            //根據(jù)定義的excel模板 構(gòu)建導出的數(shù)據(jù)
            Map<String, Object> map = buildData(request, sanSintUser);
            //設(shè)置導出流
            JxlsUtils.setResponse(response, "能源檔案信息");
            // 獲取excel模版路徑
            InputStream tplIs = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/檔案列表.xlsx");
            JxlsUtils.exportExcel(tplIs, response.getOutputStream(), map);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


   private Map<String, Object> buildData(ParamRequest request, SanSintUser sanSintUser) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> energyFileExcelList = new ArrayList<>();
        //從數(shù)據(jù)庫查詢出的數(shù)據(jù)集合
        List<EnergyFile> list = new ArrayList<>();
        if (!CollectionUtils.isEmpty(request.getIds())) {
            //如果有id,則查詢id對應(yīng)的能源檔案信息
            list = energyFileService.selectEnergyFileByIds(request.getIds());
        } else {
            //如果沒有id,則查詢?nèi)磕茉礄n案信息
            EnergyFile energyFile = new EnergyFile();
            energyFile.setTenantId(sanSintUser.getTenantId());
            list = energyFileService.selectEnergy(energyFile);
        }
        //構(gòu)建excel數(shù)據(jù)
        for (int i = 0; i < list.size(); i++) {
            EnergyFile energyFile = list.get(i);
            Map<String, Object> dataMap = new LinkedHashMap<>();
            dataMap.put("num", i + 1);
            dataMap.put("categoryName", energyFile.getCategoryName());
            dataMap.put("itemName", energyFile.getItemName());
            dataMap.put("fileName", energyFile.getFileName());
            String fileType = buildFileType(energyFile);
            dataMap.put("fileType", fileType);
            String createUserName = energyFileService.selectCreateUserNameByUserId(energyFile.getCreateUser());
            dataMap.put("createUserStr", createUserName);
            dataMap.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(energyFile.getCreateTime()));
            dataMap.put("deptName", energyFile.getDeptName());
            dataMap.put("jobName", energyFile.getJobName());
            dataMap.put("fileUrl", energyFile.getFileUrl());
            energyFileExcelList.add(dataMap);
        }

到了這里,關(guān)于Java中使用JXLS工具類導出復雜Excel表格的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Jxls 實現(xiàn)動態(tài)導出功能

    Jxls 實現(xiàn)動態(tài)導出功能

    在實際做項目的過程中,導出報表時需要根據(jù)每個人所關(guān)注的點不一樣,所需導出的字段也不一樣,這時后端就需要根據(jù)每個所選的字段去相應(yīng)的報表,這就是本文要講的動態(tài)導出報表。 用戶在頁面上選擇要導出的字段,后端根據(jù)所選的字段進行導出 將要導出的所有字段做

    2024年01月18日
    瀏覽(19)
  • 【vue導入導出Excel】vue簡單實現(xiàn)導出和導入復雜表頭excel表格功能【純前端版本和配合后端版本】

    【vue導入導出Excel】vue簡單實現(xiàn)導出和導入復雜表頭excel表格功能【純前端版本和配合后端版本】

    前言 這是一個常用的功能,就是導入和導出excel表格 但是時常會遇到一些復雜表頭的表格導出和導入 比如我這個案例里面的三層表頭的表格。 網(wǎng)上看了下發(fā)現(xiàn)了一個非常簡單導出和導入方法 當然這個是純前端的版本,會出現(xiàn)分頁不好下載的情況。所以實際工作中,導出還是

    2024年02月11日
    瀏覽(27)
  • 【工具插件類教學】NPOI插件使用Excel表格的導入和導出(包含圖片)

    目錄 一.導入Excel?解析讀取 1.選擇導入的目標文件 2.解析讀取導入的文件

    2024年01月16日
    瀏覽(33)
  • Easys Excel的表格導入(讀)導出(寫)-----java

    Easys Excel的表格導入(讀)導出(寫)-----java

    可以學習一些新知識: EasyExcel官方文檔 - 基于Java的Excel處理工具 | Easy Excel excel的一些優(yōu)點和缺點 java解析excel的框架有很多 : poi jxl,存在問題:非常的消耗內(nèi)存, easyexcel 我們遇到再大的excel都不會出現(xiàn)內(nèi)存溢出的問題 能夠?qū)⒁粋€原本3M excel文件,poi來操作將會占用內(nèi)存 100MB,

    2024年02月13日
    瀏覽(24)
  • 使用Java導入、導出excel詳解(附有封裝好的工具類)

    使用Java導入、導出excel詳解(附有封裝好的工具類)

    ?? 作 ? ??????? 者 :是江迪呀 ?? 本文 : Java 、 Excel 、 導出 、 工具類 、 后端 ?? 每日?? 一言 :有些事情不是對的才去堅持,而是堅持了它才是對的! 我們在日常開發(fā)中,一定遇到過要將數(shù)據(jù)導出為 Excel 的需求,那么怎么做呢?在做之前,我們需要思考

    2024年02月06日
    瀏覽(22)
  • 使用EasyExcel實現(xiàn)Excel表格的導入導出

    使用EasyExcel實現(xiàn)Excel表格的導入導出

    Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。 easyexcel重

    2024年02月12日
    瀏覽(18)
  • EasyPio導入導出excel表格

    EasyPoi是一個功能強大且易于使用的Java Excel操作框架,其主要特點如下: 簡單易用:EasyPoi提供簡潔而直觀的API,使Java開發(fā)人員能夠輕松地進行Excel導入導出操作,無需繁瑣的代碼和復雜的配置。 支持多種數(shù)據(jù)源:EasyPoi支持從數(shù)據(jù)庫、List集合、Map等各種數(shù)據(jù)源快速生成Excel文

    2024年02月12日
    瀏覽(20)
  • C#讀寫導入導出Excel表格模板(NPOI)

    C#讀寫導入導出Excel表格模板(NPOI)

    NPOI是指構(gòu)建在POI 3.x版本之上的一個程序,NPOI可以在沒有安裝Office的情況下對Word或Excel文檔進行讀寫操作。 NPOI是一個開源的C#讀寫Excel、WORD等微軟OLE2組件文檔的項目。 1、您可以完全免費使用該框架 2、包含了大部分EXCEL的特性(單元格樣式、數(shù)據(jù)格式、公式等等) 3、專業(yè)的技

    2023年04月08日
    瀏覽(27)
  • [軟件工具]AI軟件離線表格識別工具使用教程圖像轉(zhuǎn)excel轉(zhuǎn)表格可復制文字表格導出實時截圖識別成表格

    [軟件工具]AI軟件離線表格識別工具使用教程圖像轉(zhuǎn)excel轉(zhuǎn)表格可復制文字表格導出實時截圖識別成表格

    【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介紹】 PaddleOCR是一個基于PaddlePaddle框架的開源光學字符識別(OCR)工具庫,由百度公司開發(fā)。它提供了一套完整的OCR解決方案,包括文字檢測、文字識別以及版面分析等功能。PaddleOCR旨在幫助開發(fā)者和研究者快速構(gòu)

    2024年01月18日
    瀏覽(25)
  • 前端vue+elementui導出復雜(單元格合并,多級表頭)表格el-table轉(zhuǎn)為excel導出

    前端vue+elementui導出復雜(單元格合并,多級表頭)表格el-table轉(zhuǎn)為excel導出

    需求 :前端對el-table表格導出 插件 : npm install xlsx -S npm install file-saver --save 原理 :直接導出el-table的表格里面的數(shù)據(jù),這樣就會存在缺點,只會導出當前頁面的數(shù)據(jù),如果需要導出全部數(shù)據(jù),可以自己重新渲染一個全部數(shù)據(jù)不可見的el-table表格,來導出就可以了 擴展 :經(jīng)過

    2024年02月04日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包