最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用jxls自定義命令設(shè)置動(dòng)態(tài)行高

 更新時(shí)間:2024年08月15日 09:58:06   作者:專注寫bug  
這篇文章主要介紹了使用jxls自定義命令設(shè)置動(dòng)態(tài)行高,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

之前的博客中都簡(jiǎn)單說了數(shù)據(jù)的渲染和導(dǎo)出excel文件。包括固定的表頭結(jié)構(gòu),以及動(dòng)態(tài)表頭和表數(shù)據(jù)等方式。

本篇博客主要說明自定義命令的方式,控制輸出excel文件每行記錄的行高。

依賴引入

主要依賴以及版本如下所示:

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.4.5</version>
</dependency>
<dependency>
    <!-- 可以使用poi的實(shí)現(xiàn)也可以用jexcelapi的 -->
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>1.0.15</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-jexcel</artifactId>
    <version>1.0.7</version>
</dependency>
<dependency>
    <groupId>net.sf.jxls</groupId>
    <artifactId>jxls-core</artifactId>
    <version>1.0.6</version>
</dependency>

繪制 jxls 批注的 excel 模板

其中兩個(gè)批注分別如下:

  • 整體數(shù)據(jù)范圍:
Administrator:
jx:area(lastCell=”H3”)
  • 列表數(shù)據(jù)渲染范圍:
Administrator:
jx:each(items=“bDatas” var=“vo” lastCell=“H3” varIndex=“ojbIndex” )

測(cè)試類編寫

編寫一個(gè)簡(jiǎn)單的數(shù)據(jù)填充邏輯,并生成對(duì)應(yīng)的excel文件。

代碼如下所示:

import cn.xj.test.UserPo;
import com.google.common.collect.Lists;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import java.io.*;
import java.util.*;

public class Test1 {

    public static void main(String[] args) throws IOException {
        Context context = new Context();
        // 數(shù)據(jù)集合
        List<UserPo> dataList = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
            UserPo userPo = new UserPo();
            userPo.setNum("1_"+i);
            userPo.setName("xj_"+i);
            userPo.setAge(i+1);
            userPo.setMail("專注寫bug測(cè)試中文11111");
            dataList.add(userPo);
        }
        // ${item.num}
        context.putVar("bDatas",dataList);

		// 模板文件再resources 目錄下
        Resource resource = new ClassPathResource("/report/test_user1.xlsx");
        InputStream is = resource.getInputStream();

        String outFile = System.getProperty("user.dir")+ File.separator+"springboot-poi"+File.separator+"pdf"+File.separator+System.currentTimeMillis()+ ".xlsx";
        OutputStream outputStream = new FileOutputStream(outFile);

        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        jxlsHelper.getAreaBuilder().getTransformer();
        jxlsHelper.processTemplate(is, outputStream, context);
		
		// JxlsHelper.getInstance().processTemplate(is, outputStream, context);
    }
}

執(zhí)行后,生成excel文件中內(nèi)容的效果如下所示:

每行的行高太大,畢竟再模板中就是配置的這么大,顯得很散亂。

此時(shí)則可以使用自定義命令的方式,動(dòng)態(tài)地修改行高。

自定義命令

jxls中自定義命令,可以采取繼承 AbstractCommand 類實(shí)現(xiàn)。自定義命令需要定義命令名稱命令邏輯。

如下所示:

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.jxls.area.Area;
import org.jxls.command.AbstractCommand;
import org.jxls.common.CellRef;
import org.jxls.common.Context;
import org.jxls.common.Size;
import org.jxls.transform.poi.PoiTransformer;

/**
 * 自定義列高指令
 * 如:
 * jx:autoRowHeight(lastCell ="C3")
 *
 * 還需要在對(duì)應(yīng)的主程序中調(diào)用
 */
public class AutoRowHeightCommand extends AbstractCommand {

    /**
     * 批注中的自定義指令
     * @return
     */
    @Override
    public String getName() {
        return "autoRowHeight";
    }

    /**
     * 列高邏輯
     * @param cellRef
     * @param context
     * @return
     */
    @Override
    public Size applyAt(CellRef cellRef, Context context) {
        Area area=getAreaList().get(0);
        Size size = area.applyAt(cellRef, context);

        PoiTransformer transformer = (PoiTransformer) area.getTransformer();

        Sheet sheet = transformer.getWorkbook().getSheet(cellRef.getSheetName());
//        List bDatas = (List) context.getVar("bDatas");
//        int firstDefaultCol = cellRef.getCol(); // 最開始的第一列
//        if(!CollectionUtils.isEmpty(bDatas)){
//            for (int i = 0; i < bDatas.size(); i++) {
//                // 計(jì)算中文、字符的長(zhǎng)度  設(shè)定列寬
//                Object data = bDatas.get(i);
//                if(!StringUtils.isEmpty(data) && (data.getBytes().length+4)>sheet.getColumnWidth(i)){
//                    sheet.setColumnWidth(i+firstDefaultCol,data.getBytes().length+4);
//                }else{
//                    sheet.setColumnWidth(i+firstDefaultCol,30); // 默認(rèn)
//                }
//
//            }
//        }
        //sheet.setColumnWidth(cellRef.getCol(),50);

        Row row = sheet.getRow(cellRef.getRow());
        row.setHeight((short) -1);

        return size;
    }
}

自定義命令后,需要再模板中增加命令的標(biāo)識(shí),否則不會(huì)生效。

jx:autoRowHeight(lastCell =“H3”)

其次,還需要再調(diào)用jxls做填充渲染之前,補(bǔ)充命令和邏輯的調(diào)用。

import cn.xj.jxls.AutoRowHeightCommand;
import cn.xj.test.UserPo;
import com.google.common.collect.Lists;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import java.io.*;
import java.util.*;

public class Test1 {

    public static void main(String[] args) throws IOException {
        Context context = new Context();
        // 數(shù)據(jù)集合
        List<UserPo> dataList = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
            UserPo userPo = new UserPo();
            userPo.setNum("1_"+i);
            userPo.setName("xj_"+i);
            userPo.setAge(i+1);
            userPo.setMail("專注寫bug測(cè)試中文11111");
            dataList.add(userPo);
        }
        // ${item.num}
        context.putVar("bDatas",dataList);

        // 模板文件再resources 目錄下
        Resource resource = new ClassPathResource("/report/test_user1.xlsx");
        InputStream is = resource.getInputStream();

        String outFile = System.getProperty("user.dir")+ File.separator+"springboot-poi"+File.separator+"pdf"+File.separator+System.currentTimeMillis()+ ".xlsx";
        OutputStream outputStream = new FileOutputStream(outFile);

        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        jxlsHelper.getAreaBuilder().getTransformer();
        // 渲染前  載入 自定義 命令
        XlsCommentAreaBuilder.addCommandMapping("autoRowHeight", AutoRowHeightCommand.class);
        jxlsHelper.processTemplate(is, outputStream, context);
    }
}

執(zhí)行后的效果如下所示:

關(guān)于自動(dòng)換行

jxls沒有對(duì)應(yīng)的自動(dòng)換行操作,但是jxls可以在模板中定義對(duì)應(yīng)的單元格樣式。只需要在模板中對(duì)需要做自動(dòng)換行的列增加如下配置。

再次執(zhí)行上述的代碼邏輯,查看顯示效果。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于String.format使用詳解

    關(guān)于String.format使用詳解

    文章介紹了Java中String.format的使用,通過格式說明符實(shí)現(xiàn)簡(jiǎn)潔、可維護(hù)的字符串拼接,適用于日志生成、數(shù)據(jù)格式化、編號(hào)處理等場(chǎng)景,支持靈活的格式控制與null值處理,顯著提升代碼可讀性和靈活性
    2025-08-08
  • Java中方法的重寫與成員變量的隱藏

    Java中方法的重寫與成員變量的隱藏

    這篇文章討論了Java面向?qū)ο蟾拍钪幸粋€(gè)基本的概念–Field Hiding(隱藏成員變量),文中給大家介紹了java中的重寫知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-11-11
  • SpringBoot自定義消息轉(zhuǎn)換器的實(shí)現(xiàn)與應(yīng)用

    SpringBoot自定義消息轉(zhuǎn)換器的實(shí)現(xiàn)與應(yīng)用

    Spring Boot 默認(rèn)提供了多種消息轉(zhuǎn)換器,如 Jackson 用于 JSON 格式轉(zhuǎn)換、JAXB 用于 XML 格式轉(zhuǎn)換等,然而,實(shí)際開發(fā)中往往需要根據(jù)業(yè)務(wù)需求進(jìn)行自定義的消息轉(zhuǎn)換器,文將詳細(xì)介紹如何在 Spring Boot 中實(shí)現(xiàn)自定義消息轉(zhuǎn)換器,探討其工作原理、配置方式以及實(shí)際應(yīng)用場(chǎng)景
    2025-01-01
  • Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹

    Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹,本文用一個(gè)老師點(diǎn)名的現(xiàn)象描述了迭代模式的使用,需要的朋友可以參考下
    2015-03-03
  • 支持生產(chǎn)阻塞的Java線程池

    支持生產(chǎn)阻塞的Java線程池

    在各種并發(fā)編程模型中,生產(chǎn)者-消費(fèi)者模式大概是最常用的了。在實(shí)際工作中,對(duì)于生產(chǎn)消費(fèi)的速度,通常需要做一下權(quán)衡
    2014-04-04
  • 第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了第三方網(wǎng)站微信登錄的java代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • springboot+vue實(shí)現(xiàn)登錄功能的最新方法整理

    springboot+vue實(shí)現(xiàn)登錄功能的最新方法整理

    最近做項(xiàng)目時(shí)使用到了springboot+vue實(shí)現(xiàn)登錄功能的技術(shù),所以下面這篇文章主要給大家介紹了關(guān)于springboot+vue實(shí)現(xiàn)登錄功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • SpringSecurity?鑒權(quán)與授權(quán)的具體使用

    SpringSecurity?鑒權(quán)與授權(quán)的具體使用

    本文介紹了Spring?Security在前后端分離架構(gòu)中的核心應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • java SpringSecurity使用詳解

    java SpringSecurity使用詳解

    這篇文章主要介紹了java中Spring Security的實(shí)例詳解的相關(guān)資料,spring security是一個(gè)多方面的安全認(rèn)證框架,提供了基于JavaEE規(guī)范的完整的安全認(rèn)證解決方案,需要的朋友可以參考下
    2021-08-08
  • JAVA面向?qū)ο?封裝原理及實(shí)例解析

    JAVA面向?qū)ο?封裝原理及實(shí)例解析

    這篇文章主要介紹了JAVA面向?qū)ο?封裝原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

和硕县| 朝阳县| 奉新县| 依兰县| 西和县| 西充县| 太湖县| 香港 | 年辖:市辖区| 西宁市| 陕西省| 磐石市| 休宁县| 金昌市| 浑源县| 莱阳市| 康马县| 泸定县| 通州区| 榆林市| 仲巴县| 柳州市| 冷水江市| 获嘉县| 博爱县| 凌源市| 富平县| 东莞市| 西华县| 廊坊市| 西昌市| 宜兴市| 天等县| 启东市| 犍为县| 泗水县| 桃园县| 双流县| 冀州市| 罗田县| 台北县|