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

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

人不走空

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????????個人主頁:人不走空??????

??系列專欄:算法專題

?詩詞歌賦:斯是陋室,惟吾德馨

?文章來源地址http://www.zghlxwxcb.cn/news/detail-831279.html

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

目錄

?

????????個人主頁:人不走空??????

??系列專欄:算法專題

?詩詞歌賦:斯是陋室,惟吾德馨

前言

1.異步處理

1.1 使用job

1.2 使用mq

2.使用easyexcel

3.分頁查詢

4.多個sheet

5.計算limit的起始位置

6.文件上傳到OSS

7.通過WebSocket推送通知

8.總條數(shù)可配置

9.order by商品編號

總結(jié)

作者其他作品:


?

?

前言

最近我做過一個MySQL百萬級別數(shù)據(jù)的excel導(dǎo)出功能,已經(jīng)正常上線使用了。

這個功能挺有意思的,里面需要注意的細(xì)節(jié)還真不少,現(xiàn)在拿出來跟大家分享一下,希望對你會有所幫助。

原始需求:用戶在UI界面上點擊全部導(dǎo)出按鈕,就能導(dǎo)出所有商品數(shù)據(jù)。

乍一看,這個需求挺簡單的。

但如果我告訴你,導(dǎo)出的記錄條數(shù),可能有一百多萬,甚至兩百萬呢?

這時你可能會倒吸一口氣。

因為你可能會面臨如下問題:

  1. 如果同步導(dǎo)數(shù)據(jù),接口很容易超時。

  2. 如果把所有數(shù)據(jù)一次性裝載到內(nèi)存,很容易引起OOM。

  3. 數(shù)據(jù)量太大sql語句必定很慢。

  4. 相同商品編號的數(shù)據(jù)要放到一起。

  5. 如果走異步,如何通知用戶導(dǎo)出結(jié)果?

  6. 如果excel文件太大,目標(biāo)用戶打不開怎么辦?

我們要如何才能解決這些問題,實現(xiàn)一個百萬級別的excel數(shù)據(jù)快速導(dǎo)出功能呢?

?

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

1.異步處理

做一個MySQL百萬數(shù)據(jù)級別的excel導(dǎo)出功能,如果走接口同步導(dǎo)出,該接口肯定會非常容易超時。

因此,我們在做系統(tǒng)設(shè)計的時候,第一選擇應(yīng)該是接口走異步處理。

說起異步處理,其實有很多種,比如:使用開啟一個線程,或者使用線程池,或者使用job,或者使用mq等。

為了防止服務(wù)重啟時數(shù)據(jù)的丟失問題,我們大多數(shù)情況下,會使用job或者mq來實現(xiàn)異步功能。

1.1 使用job

如果使用job的話,需要增加一張執(zhí)行任務(wù)表,記錄每次的導(dǎo)出任務(wù)。

用戶點擊全部導(dǎo)出按鈕,會調(diào)用一個后端接口,該接口會向表中寫入一條記錄,該記錄的狀態(tài)為:待執(zhí)行

有個job,每隔一段時間(比如:5分鐘),掃描一次執(zhí)行任務(wù)表,查出所有狀態(tài)是待執(zhí)行的記錄。

然后遍歷這些記錄,挨個執(zhí)行。

需要注意的是:如果用job的話,要避免重復(fù)執(zhí)行的情況。比如job每隔5分鐘執(zhí)行一次,但如果數(shù)據(jù)導(dǎo)出的功能所花費的時間超過了5分鐘,在一個job周期內(nèi)執(zhí)行不完,就會被下一個job執(zhí)行周期執(zhí)行。

所以使用job時可能會出現(xiàn)重復(fù)執(zhí)行的情況。

為了防止job重復(fù)執(zhí)行的情況,該執(zhí)行任務(wù)需要增加一個執(zhí)行中的狀態(tài)。

具體的狀態(tài)變化如下:

  1. 執(zhí)行任務(wù)被記錄到執(zhí)行任務(wù)表,是待執(zhí)行狀態(tài)。

  2. 當(dāng)job第一次執(zhí)行該執(zhí)行任務(wù)時,該記錄在數(shù)據(jù)庫中的狀態(tài)改為:執(zhí)行中。

  3. 當(dāng)job跑完了,該記錄的狀態(tài)變成:完成失敗。

這樣導(dǎo)出數(shù)據(jù)的功能,在第一個job周期內(nèi)執(zhí)行不完,在第二次job執(zhí)行時,查詢待處理狀態(tài),并不會查詢出執(zhí)行中狀態(tài)的數(shù)據(jù),也就是說不會重復(fù)執(zhí)行。

此外,使用job還有一個硬傷即:它不是立馬執(zhí)行的,有一定的延遲。

如果對時間不太敏感的業(yè)務(wù)場景,可以考慮使用該方案。

1.2 使用mq

用戶點擊全部導(dǎo)出按鈕,會調(diào)用一個后端接口,該接口會向mq服務(wù)端,發(fā)送一條mq消息

有個專門的mq消費者,消費該消息,然后就可以實現(xiàn)excel的數(shù)據(jù)導(dǎo)出了。

相較于job方案,使用mq方案的話,實時性更好一些。

對于mq消費者處理失敗的情況,可以增加補償機制,自動發(fā)起重試。

RocketMQ自帶了失敗重試功能,如果失敗次數(shù)超過了一定的閥值,則會將該消息自動放入死信隊列。

2.使用easyexcel

我們知道在Java中解析和生成Excel,比較有名的框架有Apache POIjxl。

但它們都存在一個嚴(yán)重的問題就是:非常耗內(nèi)存,POI有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。

百萬級別的excel數(shù)據(jù)導(dǎo)出功能,如果使用傳統(tǒng)的Apache POI框架去處理,可能會消耗很大的內(nèi)存,容易引發(fā)OOM問題。

easyexcel重寫了POI對07版Excel的解析,之前一個3M的excel用POI sax解析,需要100M左右內(nèi)存,如果改用easyexcel可以降低到幾M,并且再大的Excel也不會出現(xiàn)內(nèi)存溢出;03版依賴POI的sax模式,在上層做了模型轉(zhuǎn)換的封裝,讓使用者更加簡單方便。

需要在mavenpom.xml文件中引入easyexcel的jar包:

<dependency>
????<groupId>com.alibaba</groupId>
????<artifactId>easyexcel</artifactId>
????<version>3.0.2</version>
</dependency>

之后,使用起來非常方便。

讀excel數(shù)據(jù)非常方便:

@Test
public?void?simpleRead()?{
????String?fileName?=?TestFileUtil.getPath()?+?"demo"?+?File.separator?+?"demo.xlsx";
????//?這里?需要指定讀用哪個class去讀,然后讀取第一個sheet 文件流會自動關(guān)閉
????EasyExcel.read(fileName,?DemoData.class,?new?DemoDataListener()).sheet().doRead();
}

寫excel數(shù)據(jù)也非常方便:

?@Test
public?void?simpleWrite()?{
????String?fileName?=?TestFileUtil.getPath()?+?"write"?+?System.currentTimeMillis()?+?".xlsx";
????//?這里?需要指定寫用哪個class去讀,然后寫到第一個sheet,名字為模板?然后文件流會自動關(guān)閉
????//?如果這里想使用03?則?傳入excelType參數(shù)即可
????EasyExcel.write(fileName,?DemoData.class).sheet("模板").doWrite(data());
}

easyexcel能大大減少占用內(nèi)存的主要原因是:在解析Excel時沒有將文件數(shù)據(jù)一次性全部加載到內(nèi)存中,而是從磁盤上一行行讀取數(shù)據(jù),逐個解析。

3.分頁查詢

百萬級別的數(shù)據(jù),從數(shù)據(jù)庫一次性查詢出來,是一件非常耗時的工作。

即使我們可以從數(shù)據(jù)庫中一次性查詢出所有數(shù)據(jù),沒出現(xiàn)連接超時問題,這么多的數(shù)據(jù)全部加載到應(yīng)用服務(wù)的內(nèi)存中,也有可能會導(dǎo)致應(yīng)用服務(wù)出現(xiàn)OOM問題。

因此,我們從數(shù)據(jù)庫中查詢數(shù)據(jù)時,有必要使用分頁查詢。比如:每頁5000條記錄,分為200頁查詢。

public?Page<User>?searchUser(SearchModel?searchModel)?{
????List<User>?userList?=?userMapper.searchUser(searchModel);
????Page<User>?pageResponse?=?Page.create(userList,?searchModel);
????pageResponse.setTotal(userMapper.searchUserCount(searchModel));
????return?pageResponse;
}

每頁大小pageSize和頁碼pageNo,是SearchModel類中的成員變量,在創(chuàng)建searchModel對象時,可以設(shè)置設(shè)置這兩個參數(shù)。

然后在Mybatis的sql文件中,通過limit語句實現(xiàn)分頁功能:

limit?#{pageStart},?#{pageSize}

其中的pagetStart參數(shù),是通過pageNo和pageSize動態(tài)計算出來的,比如:

pageStart?=?(pageNo?-?1)?*?pageSize;

4.多個sheet

我們知道,excel對一個sheet存放的最大數(shù)據(jù)量,是有做限制的,一個sheet最多可以保存1048576行數(shù)據(jù)。否則在保存數(shù)據(jù)時會直接報錯:

invalid?row?number?(1048576)?outside?allowable?range?(0..1048575)

如果你想導(dǎo)出一百萬以上的數(shù)據(jù),excel的一個sheet肯定是存放不下的。

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

因此我們需要把數(shù)據(jù)保存到多個sheet中。

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

5.計算limit的起始位置

我之前說過,我們一般是通過limit語句來實現(xiàn)分頁查詢功能的:

limit?#{pageStart},?#{pageSize}

其中的pagetStart參數(shù),是通過pageNo和pageSize動態(tài)計算出來的,比如:

pageStart?=?(pageNo?-?1)?*?pageSize;

如果只有一個sheet可以這么玩,但如果有多個sheet就會有問題。因此,我們需要重新計算limit的起始位置。

例如:

ExcelWriter?excelWriter?=?EasyExcelFactory.write(out).build();
int?totalPage?=?searchUserTotalPage(searchModel);

if(totalPage?>?0)?{
???Page<User>?page?=?Page.create(searchModel);
???int?sheet?=?(totalPage?%?maxSheetCount?==?0)???totalPage?/?maxSheetCount:?(totalPage?/?maxSheetCount)?+?1;
???for(int?i=0;i<sheet;i++)?{
??????WriterSheet?writeSheet?=?buildSheet(i,"sheet"+i);
??????int?startPageNo?=?i*(maxSheetCount/pageSize)+1;
??????int?endPageNo?=?(i+1)*(maxSheetCount/pageSize);
??????while(page.getPageNo()>=startPageNo?&&?page.getPageNo()<=endPageNo)?{
????????page?=?searchUser(searchModel);
????????if(CollectionUtils.isEmpty(page.getList()))?{
????????????break;
????????}
????????
????????excelWriter.write(page.getList(),writeSheet);
????????page.setPageNo(page.getPageNo()+1);
?????}
???}
}

這樣就能實現(xiàn)分頁查詢,將數(shù)據(jù)導(dǎo)出到不同的excel的sheet當(dāng)中。

6.文件上傳到OSS

由于現(xiàn)在我們導(dǎo)出excel數(shù)據(jù)的方案改成了異步,所以沒法直接將excel文件,同步返回給用戶。

因此我們需要先將excel文件存放到一個地方,當(dāng)用戶有需要時,可以訪問到。

這時,我們可以直接將文件上傳到OSS文件服務(wù)器上。

通過OSS提供的上傳接口,將excel上傳成功后,會返回文件名稱訪問路徑。

我們可以將excel名稱和訪問路徑保存到中,這樣的話,后面就可以直接通過瀏覽器,訪問遠(yuǎn)程excel文件了。

而如果將excel文件保存到應(yīng)用服務(wù)器,可能會占用比較多的磁盤空間。

一般建議將應(yīng)用服務(wù)器文件服務(wù)器分開,應(yīng)用服務(wù)器需要更多的內(nèi)存資源或者CPU資源,而文件服務(wù)器需要更多的磁盤資源

7.通過WebSocket推送通知

通過上面的功能已經(jīng)導(dǎo)出了excel文件,并且上傳到了OSS文件服務(wù)器上。

接下來的任務(wù)是要本次excel導(dǎo)出結(jié)果,成功還是失敗,通知目標(biāo)用戶。

有種做法是在頁面上提示:正在導(dǎo)出excel數(shù)據(jù),請耐心等待

然后用戶可以主動刷新當(dāng)前頁面,獲取本地導(dǎo)出excel的結(jié)果。

但這種用戶交互功能,不太友好。

還有一種方式是通過webSocket建立長連接,進(jìn)行實時通知推送。

如果你使用了SpringBoot框架,可以直接引入webSocket的相關(guān)jar包:

<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

使用起來挺方便的。

我們可以加一張專門的通知表,記錄通過webSocket推送的通知的標(biāo)題、用戶、附件地址、閱讀狀態(tài)、類型等信息。

能更好的追溯通知記錄。

webSocket給客戶端推送一個通知之后,用戶的右上角的收件箱上,實時出現(xiàn)了一個小窗口,提示本次導(dǎo)出excel功能是成功還是失敗,并且有文件下載鏈接。

當(dāng)前通知的閱讀狀態(tài)是未讀。

用戶點擊該窗口,可以看到通知的詳細(xì)內(nèi)容,然后通知狀態(tài)變成已讀。

8.總條數(shù)可配置

我們在做導(dǎo)出百萬級數(shù)據(jù)這個需求時,是給用戶用的,也有可能是給運營同學(xué)用的。

其實我們應(yīng)該站在實際用戶的角度出發(fā),去思考一下,這個需求是否合理。

用戶拿到這個百萬級別的excel文件,到底有什么用途,在他們的電腦上能否打開該excel文件,電腦是否會出現(xiàn)太大的卡頓,導(dǎo)致文件使用不了。

如果該功能上線之后,真的發(fā)生發(fā)生這些情況,那么導(dǎo)出excel也沒有啥意義了。

因此,非常有必要把記錄的總條數(shù),做成可配置的,可以根據(jù)用戶的實際情況調(diào)整這個配置。

比如:用戶發(fā)現(xiàn)excel中有50萬的數(shù)據(jù),可以正常訪問和操作excel,這時候我們可以將總條數(shù)調(diào)整成500000,把多余的數(shù)據(jù)截取掉。

其實,在用戶的操作界面,增加更多的查詢條件,用戶通過修改查詢條件,多次導(dǎo)數(shù)據(jù),可以實現(xiàn)將所有數(shù)據(jù)都導(dǎo)出的功能,這樣可能更合理一些。

此外,分頁查詢時,每頁的大小,也建議做成可配置的。

通過總條數(shù)和每頁大小,可以動態(tài)調(diào)整記錄數(shù)量和分頁查詢次數(shù),有助于更好滿足用戶的需求。

9.order by商品編號

之前的需求是要將相同商品編號的數(shù)據(jù)放到一起。

例如:

編號 商品名稱 倉庫名稱 價格
1 筆記本 北京倉 7234
1 筆記本 上海倉 7235
1 筆記本 武漢倉 7236
2 平板電腦 成都倉 7236
2 平板電腦 大連倉 3339

但我們做了分頁查詢的功能,沒法將數(shù)據(jù)一次性查詢出來,直接在Java內(nèi)存中分組或者排序。

因此,我們需要考慮在sql語句中使用order by?商品編號,先把數(shù)據(jù)排好順序,再查詢出數(shù)據(jù),這樣就能將相同商品編號,倉庫不同的數(shù)據(jù)放到一起。

此外,還有一種情況需要考慮一下,通過配置的總記錄數(shù)將全部數(shù)據(jù)做了截取。

但如果最后一個商品編號在最后一頁中沒有查詢完,可能會導(dǎo)致導(dǎo)出的最后一個商品的數(shù)據(jù)不完整。

因此,我們需要在程序中處理一下,將最后一個商品刪除。

但加了order by關(guān)鍵字進(jìn)行排序之后,如果查詢sql中join了很多張表,可能會導(dǎo)致查詢性能變差。

那么,該怎么辦呢?

總結(jié)

最后用兩張圖,總結(jié)一下excel異步導(dǎo)數(shù)據(jù)的流程。

如果是使用mq導(dǎo)數(shù)據(jù):

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

如果是使用job導(dǎo)數(shù)據(jù):

【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn),java,開發(fā)語言

這兩種方式都可以,可以根據(jù)實際情況選擇使用。

?

以下文章來源于蘇三說技術(shù)?,作者蘇三呀


作者其他作品:

【Redis】利用 Redis List 實現(xiàn) Java 數(shù)據(jù)庫分頁快速查詢-CSDN博客

【前端】深入了解React JSX語法及實例應(yīng)用-CSDN博客

【JVM】雙親委派機制詳細(xì)解讀(通俗易懂)-CSDN博客

【瀏覽器】五大最好用的瀏覽器 最受歡迎的瀏覽器軟件-CSDN博客

【軟件工程】單元測試:構(gòu)建堅固軟件基石的不可或缺一環(huán)-CSDN博客???

【JVM】深入理解Java引用類型:強引用、軟引用、弱引用和虛引用-CSDN博客

【Linux】Linux 系統(tǒng)中的注銷、重啟和關(guān)機命令詳解-CSDN博客

UDP協(xié)議:特點、應(yīng)用場景及市面上常見軟件案例-CSDN博客

https://blog.csdn.net/double222222/article/details/135280922?spm=1001.2014.3001.5501

?

?

?

?

?

?

?

?

?

?

?

到了這里,關(guān)于【Java】百萬數(shù)據(jù)excel導(dǎo)出功能如何實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java POI 百萬規(guī)模數(shù)據(jù)的導(dǎo)入和導(dǎo)出

    Java POI 百萬規(guī)模數(shù)據(jù)的導(dǎo)入和導(dǎo)出

    使用POI基于事件模式解析案例提供的Excel文件 **用戶模式:**加載并讀取Excel時,是通過一次性的將所有數(shù)據(jù)加載到內(nèi)存中再去解析每個單元格內(nèi)容。當(dāng)Excel數(shù)據(jù)量較大時,由于不同的運行環(huán)境可能會造成內(nèi)存不足甚至OOM異常。 例如讀取我們剛剛導(dǎo)出的百萬數(shù)據(jù): 會直接報內(nèi)存

    2024年02月08日
    瀏覽(29)
  • java實現(xiàn)excel的導(dǎo)入導(dǎo)出(帶參數(shù)校驗:非空校驗、數(shù)據(jù)格式校驗)

    java實現(xiàn)excel的導(dǎo)入導(dǎo)出(帶參數(shù)校驗:非空校驗、數(shù)據(jù)格式校驗)

    本次封裝引入阿里開源框架EasyExcel,EasyExcel是一個基于Java的簡單、省內(nèi)存的讀寫Excel的開源項目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫百M的Excel。 github地址:GitHub - alibaba/easyexcel: 快速、簡潔、解決大文件內(nèi)存溢出的java處理Excel工具 。 64M內(nèi)存20秒讀取75M(46W行25列)的Excel(3.0.2

    2024年02月01日
    瀏覽(42)
  • 根據(jù)實體excel導(dǎo)入導(dǎo)出百萬數(shù)據(jù),可修改表頭名稱

    根據(jù)實體excel導(dǎo)入導(dǎo)出百萬數(shù)據(jù),可修改表頭名稱

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 所有對excel都是根據(jù)實體類進(jìn)行操作 根據(jù)實體導(dǎo)出的excel模板展示 讀取結(jié)果返回,和表格上傳數(shù)據(jù)一致 也支持將已有的數(shù)據(jù)導(dǎo)出為表格 部分情況,表頭需要為中文,可以使用注解,對表格進(jìn)行標(biāo)注,導(dǎo)

    2024年02月08日
    瀏覽(28)
  • java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

    java實現(xiàn)將數(shù)據(jù)導(dǎo)出為word功能(文字,表格,圖片的循環(huán)導(dǎo)出)

    這里需要注意的點!?。。。。。。。。。。。。。。。?easypoi的版本必須在4.3.0以上,否則在導(dǎo)出圖片的時候,只會導(dǎo)出圖片的內(nèi)存地址,卻不能顯示出圖片。 ?解釋一下模板中所填充的東西: 1.像這種:用兩個花括號括起來的變量名,到時候會將變量名所指代的數(shù)據(jù)填充進(jìn)

    2024年02月02日
    瀏覽(31)
  • java中用SXSSFWorkbook把多個list數(shù)據(jù)和單個實體dto導(dǎo)出到excel如何導(dǎo)出到多個sheet頁詳細(xì)實例?(親測)

    以下是一個詳細(xì)的示例,展示了如何使用SXSSFWorkbook將多個List數(shù)據(jù)和單個實體DTO導(dǎo)出到多個Sheet頁: import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFCell; import java.io.FileOutputStream;

    2024年02月11日
    瀏覽(26)
  • java中用SXSSFWorkbook把多個字段的list數(shù)據(jù)和單個實體dto導(dǎo)出到excel如何導(dǎo)出到多個sheet頁詳細(xì)實例?

    要使用SXSSFWorkbook將多個字段的List數(shù)據(jù)和單個實體DTO導(dǎo)出到多個Sheet頁,你可以按照以下步驟進(jìn)行操作: 創(chuàng)建一個SXSSFWorkbook對象作為工作簿。 針對每個字段的List數(shù)據(jù),創(chuàng)建一個新的Sheet頁,并將數(shù)據(jù)寫入該Sheet頁。 創(chuàng)建一個新的Sheet頁,用于單個實體DTO的數(shù)據(jù)。 將單個實體

    2024年02月11日
    瀏覽(26)
  • <Java導(dǎo)出Excel> 1.0 Java實現(xiàn)Excel動態(tài)模板導(dǎo)出

    <Java導(dǎo)出Excel> 1.0 Java實現(xiàn)Excel動態(tài)模板導(dǎo)出

    思路: 1,先創(chuàng)建動態(tài)模板(必須要在數(shù)據(jù)庫建一張表,可隨時修改模板) 例如: 建表語句: 模板中的字段腳本: 2,編寫一個查詢接口:返回一個List map 注意:order by id 根據(jù)表中字段:id排序的作用是控制導(dǎo)出的EXCEL表中字段列的順序; mapper.xml層: mapper接口層: serviceIm

    2024年02月12日
    瀏覽(19)
  • Java導(dǎo)出數(shù)據(jù)到Excel

    當(dāng)今數(shù)據(jù)處理的場景中,Excel仍然是一個不可或缺的工具,用于存儲、分析和共享數(shù)據(jù)。在Java應(yīng)用程序中,有時候需要將數(shù)據(jù)導(dǎo)出到Excel文件,以便用戶能夠方便地查看和處理數(shù)據(jù)。本文將詳細(xì)介紹如何使用Java來導(dǎo)出數(shù)據(jù)到Excel文件。 數(shù)據(jù)分析和可視化: Excel提供了強大的數(shù)

    2024年02月12日
    瀏覽(20)
  • java根據(jù)excel模板進(jìn)行導(dǎo)出數(shù)據(jù)

    java根據(jù)excel模板進(jìn)行導(dǎo)出數(shù)據(jù)

    ?一、pom文件添加以下依賴 二、添加util包 三、在resources目錄下添加template并添加xlsx模板 ?注意:xlsx模板使用${list.XXX}? ? ?XXX表示數(shù)據(jù)源list(map形式的list)的數(shù)據(jù)key值,如果list是對象形式的,那么就是該業(yè)務(wù)字段 ?四、業(yè)務(wù)層使用:

    2024年02月11日
    瀏覽(28)
  • SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    本文主要介紹基于SpringBoot +MyBatis-Plus+Easyexcel+Vue實現(xiàn)缺陷跟蹤系統(tǒng)中導(dǎo)出缺陷數(shù)據(jù)的功能,實現(xiàn)效果如下圖: EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。 本文

    2024年02月14日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包