在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

EasyExcel碰到問題記錄

京東云 ? 來源:京東工業(yè) 孫磊 ? 作者:京東工業(yè) 孫磊 ? 2025-01-13 13:34 ? 次閱讀

作者:京東工業(yè) 孫磊

1、富文本中文字設(shè)置不同顏色和字體不生效

                String stringCellValue = cell.getStringCellValue();
                if (StringUtils.isNotBlank(stringCellValue) && stringCellValue.contains(startIndex) && stringCellValue.contains(endIndex)) {
                    RichTextString richStringCellValue = cell.getRichStringCellValue();
                    Font redFont = workbook.createFont();
                    redFont.setColor(IndexedColors.RED.getIndex());

                    if (richStringCellValue instanceof XSSFRichTextString) {
                        XSSFRichTextString xssfRichTextString = new XSSFRichTextString(cell.getStringCellValue());
                        xssfRichTextString.applyFont(stringCellValue.indexOf(startIndex),stringCellValue.indexOf(endIndex) +endIndex.length() ,redFont);
                        cell.setCellValue(xssfRichTextString);
                    } else if (richStringCellValue instanceof HSSFRichTextString) {
                        HSSFRichTextString hssfRichTextString = new HSSFRichTextString(cell.getStringCellValue());
                        hssfRichTextString.applyFont(stringCellValue.indexOf(startIndex),stringCellValue.indexOf(endIndex) +endIndex.length() ,redFont);
                        cell.setCellValue(hssfRichTextString);
                    }
                    cellStyle.setFont(redFont);
                } else {
                    // 清空樣式
                    cell.setCellStyle(cellStyle);
                }

上面代碼設(shè)置了富文本指定范圍的文字設(shè)置新的字體,但是生成的文件還是不生效。

EasyExcelFactory.write(new File(pathName)).head(titleList())
        .inMemory(Boolean.TRUE)  // 指定這個屬性為true,才支持富文本和注釋
        .registerWriteHandler(new HeadRowWriteHandler()).sheet(0).doWrite(Lists.newArrayList());

原因:

在 EasyExcel 中,inMemory 方法用于設(shè)置是否在內(nèi)存中生成 Excel 文件。默認(rèn)情況下,EasyExcel 會在磁盤上創(chuàng)建一個緩存文件,然后將數(shù)據(jù)寫入這個緩存文件,最后再將緩存文件寫入到 Excel 文件中。

如果你調(diào)用 inMemory(true),EasyExcel 將會在內(nèi)存中生成 Excel 文件,而不是使用緩存文件。這意味著:

1.更快的寫入速度:因為不需要頻繁地讀寫磁盤,內(nèi)存模式下的寫入速度通常會更快。

2.支持 Comment 和 RichTextString:如果你需要在單元格中添加注釋或使用富文本字符串,這些功能只能在內(nèi)存模式下使用。

3.限制大文件寫入:內(nèi)存模式下,所有的數(shù)據(jù)都會被加載到內(nèi)存中,這可能會導(dǎo)致內(nèi)存溢出問題,特別是當(dāng)你處理大型數(shù)據(jù)集時。

使用內(nèi)存模式的主要優(yōu)點是它可以支持更復(fù)雜的單元格操作,如添加注釋或使用富文本字符串。然而,如果你的數(shù)據(jù)量很大,可能需要避免使用內(nèi)存模式以防止內(nèi)存問題。

?

2、凍結(jié)單元格

可以通過sheet.createFreezePane(column,row);方法指定凍結(jié)的列和行索引

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.Sheet;

import java.util.Objects;

/**
 * 凍結(jié)單元格
 **/
public class FreezePaneWriteHandler implements SheetWriteHandler {

    private int column;

    private int row;

    public FreezePaneWriteHandler(Integer column, Integer row) {
        this.column = column;
        this.row = row;
    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Sheet sheet = writeSheetHolder.getSheet();
        if (Objects.nonNull(sheet)) {
            sheet.createFreezePane(column,row);
        }
    }
}

3、不合并單元格

Easyexcel使用中,生成多行表頭模版時,同一行如果多個列內(nèi)容一樣,會被自動合并單元格,要避免這個問題,需要通過特殊處理。

import com.alibaba.excel.constant.OrderConstant;
import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

import java.util.Set;

/**
 * 表頭不合并策略
 * @author sunlei61
 * @date 2024/8/17
 **/
public class HeadNoMergeWriteHandler implements RowWriteHandler {
    /**
     * 指定哪些行需要合并單元格
     */
    private Set rowNum;
    /**
     * 排除哪些不合并單元格的行
     */
    private Set excludeRowNum;

    @Override
    public int order() {
        return OrderConstant.FILL_STYLE + 3;
    }

    public HeadNoMergeWriteHandler(){}

    public HeadNoMergeWriteHandler(Set rowNum){
        this.rowNum = rowNum;
    }

    public HeadNoMergeWriteHandler(Set rowNum, Set excludeRowNum){
        this.rowNum = rowNum;
        this.excludeRowNum = excludeRowNum;
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
       if (!isHead){
           return;
       }

        if (CollectionUtils.isEmpty(rowNum) || rowNum.contains(row.getRowNum())) {
            // 如果是表頭,取消合并
            Sheet sheet = writeSheetHolder.getSheet();
            int totalMergedRegions = sheet.getNumMergedRegions();
            for (int i = totalMergedRegions - 1; i >= 0; i--) {
                CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
                if (CollectionUtils.isEmpty(excludeRowNum) || !excludeRowNum.contains(mergedRegion.getFirstRow())) {
                    sheet.removeMergedRegion(i);
                }
            }
        }
    }
}

4、列寬自適應(yīng)寬度

生成表格列比較多,制定特定的寬度會讓表格很長,即使單元格內(nèi)容一個字,也會很寬,不是很友好,可以通過設(shè)置sheet的自適應(yīng)寬度來設(shè)置。

import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.util.Set;

/**
 * 列寬度自動適應(yīng)
 * @author sunlei61
 * @date 2024/9/26
 **/
public class AutoSizeColumnWriterHandler implements RowWriteHandler {
    /**不需要自動適用寬度的列集合*/
    private Set excludeColumns;

    public AutoSizeColumnWriterHandler(){
    }

    public AutoSizeColumnWriterHandler(Set excludeColumns) {
       this.excludeColumns = excludeColumns;
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
        Integer sheetNo = writeSheetHolder.getSheetNo();
        if (sheetNo == 0 ) {
            Sheet sheet = writeSheetHolder.getSheet();
            int columns = row.getPhysicalNumberOfCells();
            for (int i = 0; i < columns; i++) {
                if (CollectionUtils.isNotEmpty(excludeColumns) && excludeColumns.contains(i)) {
                    continue;
                }
                sheet.autoSizeColumn(i);
            }
        }
    }
}

審核編輯 黃宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Excel
    +關(guān)注

    關(guān)注

    4

    文章

    221

    瀏覽量

    55559
  • 富文本
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1511
收藏 0人收藏

    評論

    相關(guān)推薦

    求助,關(guān)于使用TPA3116D2時碰到的問題求解

    請教下使用TPA3116D2時碰到的問題。 PVCC=24V,在無輸入的情況下,萬用表測到左右聲道的OUTP/N的直流值都不是PVCC/2=12V,而是只有4V。 測到輸入端直流值只有2V,而不是3V。且FAULT一直是高電平,沒有錯誤。 請問這種情況可能的原因有哪些? 謝謝~
    發(fā)表于 10-25 06:26

    記錄到管理:單北斗工作記錄儀如何優(yōu)化工作流程

    在這個快節(jié)奏的時代,每一分效率的提升都是企業(yè)競爭力的關(guān)鍵。從繁瑣的手工記錄到智能化的數(shù)據(jù)管理,技術(shù)的飛躍正悄然改變著我們的工作方式。頂堅單北斗工作記錄儀如何成為優(yōu)化工作流程的得力助手,實現(xiàn)從記錄
    的頭像 發(fā)表于 08-30 11:09 ?293次閱讀
    從<b class='flag-5'>記錄</b>到管理:單北斗工作<b class='flag-5'>記錄</b>儀如何優(yōu)化工作流程

    精準(zhǔn)記錄,高效分析:單北斗現(xiàn)場記錄儀在各行各業(yè)的應(yīng)用

    在這個信息爆炸、效率至上的時代,每一個細(xì)節(jié)的記錄與分析都成為了推動行業(yè)進(jìn)步的關(guān)鍵力量。單北斗現(xiàn)場記錄儀,作為集高精度定位、高清視頻錄制、智能數(shù)據(jù)分析于一體的創(chuàng)新設(shè)備,正悄然改變著各行各業(yè)的作業(yè)模式
    的頭像 發(fā)表于 08-28 11:46 ?382次閱讀
    精準(zhǔn)<b class='flag-5'>記錄</b>,高效分析:單北斗現(xiàn)場<b class='flag-5'>記錄</b>儀在各行各業(yè)的應(yīng)用

    干貨分享 數(shù)據(jù)記錄儀自動測量與記錄加速度:振動,顛簸,沖擊和定位

    什么是加速度數(shù)據(jù)記錄儀?我們?nèi)绾?b class='flag-5'>記錄振動?顛簸或沖擊是什么意思?我們可以使用什么方法來檢測因沖擊而造成的貨物損壞?“快速峰值”是什么意思?一篇文章讓你弄懂所有問題!
    的頭像 發(fā)表于 07-04 14:46 ?424次閱讀
    干貨分享  數(shù)據(jù)<b class='flag-5'>記錄</b>儀自動測量與<b class='flag-5'>記錄</b>加速度:振動,顛簸,沖擊和定位

    使用example中的pwm播放mp3,在mp3_music_read_cb中使用fread讀取,會出現(xiàn)fread讀取異常怎么解決?

    使用example中的pwm播放mp3,默認(rèn)是沒問題。然后想把mp3放到spiffs中,然后從spiffs中調(diào)用,碰到問題: 1:如果在mp3_music_read_cb中使用fread讀取,最終
    發(fā)表于 06-28 07:37

    使用STM32MP157D的DSI來驅(qū)動屏幕,會出現(xiàn)花屏的原因?

    項目使用STM32MP157D的DSI來驅(qū)動屏幕,u-boot會顯示開機logo,進(jìn)入內(nèi)核后,會顯示一個動畫,現(xiàn)在碰到問題是,MIPI屏幕沒有buffer,完全靠DSI在VIDEO MODE 模式
    發(fā)表于 06-03 08:31

    4G執(zhí)法記錄儀,5G執(zhí)法記錄

    4G執(zhí)法記錄儀,5G執(zhí)法記錄儀系統(tǒng)設(shè)計
    的頭像 發(fā)表于 04-14 17:08 ?766次閱讀
    4G執(zhí)法<b class='flag-5'>記錄</b>儀,5G執(zhí)法<b class='flag-5'>記錄</b>儀

    Bose Soundlink Mini2_維修記錄

    Bose Soundlink Mini2_維修記錄
    的頭像 發(fā)表于 04-14 10:11 ?3257次閱讀
    Bose Soundlink Mini2_維修<b class='flag-5'>記錄</b>

    STM8 STVD + Cosmic編譯出錯的原因?怎么解決?

    大家好, 這是我第一次使用STM8來編程就碰到問題了, 還望各位高手指教指教。 編程工具:STVD(在ST官網(wǎng)下載的)+ COSMIC沒有限制版本(在COSMIC官網(wǎng)下載的, 已裝了license
    發(fā)表于 04-10 08:27

    STM32高手進(jìn)階之路與實用學(xué)習(xí)步驟

    CPU是相通的,相信大部分的同學(xué)都學(xué)習(xí)過單片機,是有一定基礎(chǔ)的。如果你碰到問題,去嘗試了,自己把問題解決了,你會很有成就感!
    的頭像 發(fā)表于 03-13 09:38 ?638次閱讀

    TSMaster 總線記錄功能操作指南

    總線記錄主要是指對CAN、LIN、FlexRay,Ethernet等總線系統(tǒng)的通信數(shù)據(jù)進(jìn)行記錄和分析,是工程師在故障診斷、性能分析和數(shù)據(jù)記錄方面的重要工具,作為TSMaster軟件中使用率很高
    的頭像 發(fā)表于 03-05 08:21 ?781次閱讀
    TSMaster 總線<b class='flag-5'>記錄</b>功能操作指南

    請問CAN數(shù)據(jù)記錄方式有哪些?

    使用CAN數(shù)據(jù)存儲設(shè)備進(jìn)行記錄:這種方式通過專門的CAN記錄儀來實現(xiàn),它是一種專門用于存儲CAN總線數(shù)據(jù)的模塊。
    的頭像 發(fā)表于 03-01 09:14 ?608次閱讀

    GD32 MCU碰到IIC總線卡死怎么辦?

    大家在使用MCU IIC通信時,若碰到設(shè)備復(fù)位或者總線干擾等情況,可能會導(dǎo)致IIC總線卡死,表現(xiàn)上總線上SDA或者SCL其中一根線為低電平,IIC總線一直處于busy狀態(tài)。此時若代碼上一直等待總線空閑,則可能導(dǎo)致軟件死機,為解決該問題,本視頻提供了軟件配置釋放IIC總線的方法。
    的頭像 發(fā)表于 02-24 09:46 ?3961次閱讀
    GD32 MCU<b class='flag-5'>碰到</b>IIC總線卡死怎么辦?

    LXTAL低頻晶振起振異常可能有哪些原因?

    還有頻偏等一系列的問題,這些問題主要原因就是低頻晶振適配的問題,那碰到問題后,該從哪幾個方面進(jìn)行排查呢?有以下建議可以參考:
    的頭像 發(fā)表于 02-20 10:20 ?817次閱讀
    LXTAL低頻晶振起振異常可能有哪些原因?

    什么是數(shù)據(jù)記錄器,數(shù)據(jù)記錄器與數(shù)據(jù)采集系統(tǒng)

    雖然有些數(shù)據(jù)記錄器只有一個傳感器和輸入,但許多數(shù)據(jù)記錄器有多個通道,在許多情況下,它們可以記錄來自不同類型傳感器的測量值。
    的頭像 發(fā)表于 02-08 12:28 ?1633次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 亚洲综合在线一区| 天天躁夜夜躁狠狠躁2021a| 日本一区二区三区视频在线观看| aa在线观看| 亚洲邪恶天堂影院在线观看| 欧美人成网站免费大全| 欧美一区二区三区四区视频 | 欧美三级成人| 国产精品免费看久久久| 欧美极品| 美女用手扒开尿口给男生桶爽| 精品国产污污免费网站入口| 亚洲午夜久久久久久噜噜噜| 亚洲国产成人在人网站天堂| 欧美国产日本高清不卡| lsj老司机精品视频在线观看| 一区二区三区无码高清视频| 男女一进一出无遮挡黄| 亚洲三级毛片| 欧美黄色片在线观看| 国产tube| 人人干人人舔| 手机在线完整视频免费观看| 日本一区二区视频| 天堂网ww| 美女被拍拍拍拍拍拍拍拍| 日本国产黄色片| 激情网址在线观看| 午夜在线免费观看| 天天玩天天操| 天天热天天干| 天天做天天爱夜夜爽| 狠狠操天天操夜夜操| 亚洲一区二区三区四区在线 | 国产精品成人观看视频国产奇米| 新午夜影院| 久久人人网| 男同小黄文| 色老板在线视频一区二区| 色老二精品视频在线观看| 黄色大片a级|