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

Java 中導(dǎo)出 Excel 文件的常見(jiàn)實(shí)現(xiàn)方法

 更新時(shí)間:2025年09月05日 09:48:40   作者:我像在與風(fēng)相愛(ài)  
這篇文章給大家介紹Java 中導(dǎo)出 Excel 文件的常見(jiàn)實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

在 Java 中導(dǎo)出 Excel 文件的方法有多種,主要依賴不同的類庫(kù)或工具,每種方法適用于不同的場(chǎng)景(如數(shù)據(jù)量大小、格式復(fù)雜度、易用性等)。以下是常見(jiàn)的幾種實(shí)現(xiàn)方式:

選擇建議
簡(jiǎn)單格式 + 小數(shù)據(jù)量:Apache POI(XSSF/HSSF)EasyExcel。
復(fù)雜格式 + 中大數(shù)據(jù)量:EasyExcel(優(yōu)先)或 POI + 自定義樣式。
超大數(shù)據(jù)量(百萬(wàn)級(jí)):EasyExcel(默認(rèn)優(yōu)化)或 POISXSSF
固定模板報(bào)表:Freemarker/Thymeleaf 模板引擎。
純數(shù)據(jù)導(dǎo)出(無(wú)格式):CSV 格式。

其中,EasyExcel 因易用性和性能優(yōu)勢(shì),成為目前 Java 導(dǎo)出 Excel 的主流選擇,尤其在業(yè)務(wù)系統(tǒng)中廣泛應(yīng)用。

一、基于 Apache POI(最常用)

Apache POI 是 Apache 基金會(huì)的開(kāi)源項(xiàng)目,是 Java 處理 Microsoft Office 文檔(包括 Excel)的主流工具,支持.xls(Excel 97-2003)和.xlsx(Excel 2007+)格式。

核心類
HSSF:處理 .xls 格式(最多 65536 行,適合小數(shù)據(jù)量)。
核心類:HSSFWorkbook(文檔)、HSSFSheet(工作表)、HSSFRow(行)、HSSFCell(單元格)。

XSSF:處理 .xlsx 格式(支持百萬(wàn)級(jí)行,適合中大數(shù)據(jù)量)。
核心類:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell。

SXSSF:XSSF的擴(kuò)展,支持大數(shù)據(jù)量導(dǎo)出(通過(guò)內(nèi)存優(yōu)化,適合十萬(wàn)級(jí)以上數(shù)據(jù),避免 OOM)。

優(yōu)點(diǎn)
功能全面,支持復(fù)雜格式(單元格樣式、合并單元格、公式、圖表等)。
兼容性好,支持所有 Excel 版本。

缺點(diǎn)
代碼相對(duì)繁瑣,需要手動(dòng)創(chuàng)建行、單元格并設(shè)置樣式。
處理大數(shù)據(jù)時(shí)(如十萬(wàn)級(jí)以上),XSSF 可能占用較多內(nèi)存(需用 SXSSF 優(yōu)化)。

示例代碼片段(XSSF)

// 創(chuàng)建.xlsx文檔
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
// 創(chuàng)建標(biāo)題行
XSSFRow row = sheet.createRow(0);
row.createCell(0).setCellValue("姓名");
row.createCell(1).setCellValue("年齡");
// 填充數(shù)據(jù)
XSSFRow dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("張三");
dataRow.createCell(1).setCellValue(25);
// 輸出到文件或響應(yīng)流
FileOutputStream fos = new FileOutputStream("test.xlsx");
workbook.write(fos);
fos.close();
workbook.close();

二、基于 Alibaba EasyExcel

EasyExcel 是阿里巴巴開(kāi)源的 Excel 處理工具,基于 POI 封裝,專注于簡(jiǎn)化代碼和優(yōu)化大數(shù)據(jù)量性能,避免 POI 的內(nèi)存占用問(wèn)題。

核心特點(diǎn)
注解驅(qū)動(dòng):通過(guò)@ExcelProperty等注解映射 Java 對(duì)象與 Excel 列,無(wú)需手動(dòng)創(chuàng)建單元格。
低內(nèi)存:默認(rèn)采用 SXSSF 的內(nèi)存優(yōu)化機(jī)制,支持百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)出。
支持復(fù)雜格式:合并單元格、表頭樣式、自定義轉(zhuǎn)換器等。

優(yōu)點(diǎn)
代碼簡(jiǎn)潔,無(wú)需手動(dòng)處理行和單元格,降低開(kāi)發(fā)成本。
性能優(yōu)異,適合大數(shù)據(jù)量導(dǎo)出(如報(bào)表、日志數(shù)據(jù))。

缺點(diǎn)
高級(jí)格式(如公式、圖表)支持較弱,復(fù)雜場(chǎng)景仍需結(jié)合 POI。

示例代碼片段

// 定義數(shù)據(jù)模型(通過(guò)注解映射Excel列)
@Data
public class User {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年齡")
    private Integer age;
}
// 導(dǎo)出邏輯
List<User> data = new ArrayList<>();
data.add(new User("卡布大帝", 25));
// 輸出到文件
EasyExcel.write("test_easy.xlsx", User.class)
          .sheet("Sheet1")
          .doWrite(data);

三、基于 JXL(僅支持.xls)

JXL(Java Excel API) 是早期的 Excel 處理工具,僅支持 .xls 格式(不支持.xlsx),目前已停止維護(hù),逐漸被 POI 替代。

優(yōu)點(diǎn)
輕量級(jí),API 簡(jiǎn)單,適合簡(jiǎn)單的.xls 文件導(dǎo)出。

缺點(diǎn)
不支持.xlsx 格式,功能有限(如不支持公式、圖表),且不再更新。

示例代碼片段

// 創(chuàng)建.xls文檔
WritableWorkbook workbook = Workbook.createWorkbook(new File("test_jxl.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 標(biāo)題行
Label nameLabel = new Label(0, 0, "姓名");
Label ageLabel = new Label(1, 0, "年齡");
sheet.addCell(nameLabel);
sheet.addCell(ageLabel);
// 數(shù)據(jù)行
Label name = new Label(0, 1, "張三");
Number age = new Number(1, 1, 25);
sheet.addCell(name);
sheet.addCell(age);
workbook.write();
workbook.close();

四、基于模板引擎(如 Freemarker、Thymeleaf)

通過(guò)Excel 模板(如.xlsx模板)結(jié)合模板引擎,動(dòng)態(tài)填充數(shù)據(jù)后導(dǎo)出。適用于格式固定、樣式復(fù)雜的報(bào)表(如財(cái)務(wù)報(bào)表、合同模板)。

原理
準(zhǔn)備 Excel 模板,用占位符(如${name})標(biāo)記需要填充的位置。
用模板引擎解析模板,替換占位符為實(shí)際數(shù)據(jù)。
生成最終 Excel 文件。

優(yōu)點(diǎn)
樣式與邏輯分離,模板可由非開(kāi)發(fā)人員(如運(yùn)營(yíng))維護(hù)。
適合復(fù)雜格式報(bào)表,無(wú)需代碼中手動(dòng)設(shè)置樣式。

缺點(diǎn)
靈活性較低,模板變更需同步更新占位符。
大數(shù)據(jù)量場(chǎng)景性能較差。

示例(Freemarker)
模板文件(template.xlsx.ftl)中單元格設(shè)置為 ${user.name}。
代碼填充數(shù)據(jù):

Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setDirectoryForTemplateLoading(new File("templates"));
Template template = cfg.getTemplate("template.xlsx.ftl");
Map<String, Object> data = new HashMap<>();
data.put("user", new User("張三", 25));
FileOutputStream fos = new FileOutputStream("report.xlsx");
template.process(data, new OutputStreamWriter(fos));
fos.close();

五、基于 CSV 格式(偽 Excel)

CSV(逗號(hào)分隔值)是一種簡(jiǎn)單的文本格式,可被 Excel 直接打開(kāi),適合純數(shù)據(jù)導(dǎo)出(無(wú)格式要求)。

優(yōu)點(diǎn)
實(shí)現(xiàn)簡(jiǎn)單,無(wú)需依賴任何 Excel 類庫(kù)。
生成速度快,適合超大數(shù)據(jù)量(如千萬(wàn)級(jí))。

缺點(diǎn)
不支持任何樣式(如單元格合并、顏色、公式),僅能存儲(chǔ)純文本數(shù)據(jù)。

示例代碼片段

FileWriter writer = new FileWriter("data.csv");
// 標(biāo)題行
writer.write("姓名,年齡\n");
// 數(shù)據(jù)行
writer.write("張三,25\n");
writer.write("李四,30\n");
writer.close();

六、其他工具

Alibaba EasyExcel:如前文所述,是 POI 的優(yōu)化封裝,推薦優(yōu)先使用。
Aspose.Cells:商業(yè)工具,功能強(qiáng)大(支持所有 Excel 特性),但需要付費(fèi)授權(quán),適合企業(yè)級(jí)復(fù)雜場(chǎng)景。
JXLS:結(jié)合 POI 和模板引擎,通過(guò)標(biāo)簽(如jx:each)在 Excel 模板中循環(huán)填充數(shù)據(jù),適合動(dòng)態(tài)報(bào)表。

到此這篇關(guān)于Java 中導(dǎo)出 Excel 文件的方法的文章就介紹到這了,更多相關(guān)java導(dǎo)出excel文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea撤銷git?commit操作詳解

    idea撤銷git?commit操作詳解

    這篇文章主要為大家介紹了idea撤銷git?commit操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    在寫(xiě)程序的時(shí)候,有時(shí)候可能需要設(shè)置小數(shù)的位數(shù),所以下面這篇文章主要給大家介紹了關(guān)于JAVA把結(jié)果保留兩位小數(shù)的3種方法,文章通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 詳解Java虛擬機(jī)管理的內(nèi)存運(yùn)行時(shí)數(shù)據(jù)區(qū)域

    詳解Java虛擬機(jī)管理的內(nèi)存運(yùn)行時(shí)數(shù)據(jù)區(qū)域

    這篇文章主要介紹了詳解Java虛擬機(jī)管理的內(nèi)存運(yùn)行時(shí)數(shù)據(jù)區(qū)域的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn)

    springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn)

    本文主要介紹了springboot2.x 接入阿里云市場(chǎng)短信發(fā)送的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Maven?自動(dòng)化構(gòu)建的實(shí)現(xiàn)示例

    Maven?自動(dòng)化構(gòu)建的實(shí)現(xiàn)示例

    本文主要介紹了Maven?自動(dòng)化構(gòu)建的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • SpringBoot整合任務(wù)系統(tǒng)quartz和SpringTask的方法

    SpringBoot整合任務(wù)系統(tǒng)quartz和SpringTask的方法

    這篇文章主要介紹了SpringBoot整合任務(wù)系統(tǒng)(quartz和SpringTask),Quartz是一個(gè)比較成熟了的定時(shí)任務(wù)框架,但是捏,它稍微的有些許繁瑣,本文先給大家講解下Quartz的一些基本概念結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • 通過(guò)實(shí)例解析Socket套接字通信原理

    通過(guò)實(shí)例解析Socket套接字通信原理

    這篇文章主要介紹了通過(guò)實(shí)例解析Socket套接字通信原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • springboot項(xiàng)目如何配置多數(shù)據(jù)源

    springboot項(xiàng)目如何配置多數(shù)據(jù)源

    本文介紹了如何在SpringBoot項(xiàng)目中配置多數(shù)據(jù)源,包括配置多個(gè)數(shù)據(jù)源、創(chuàng)建數(shù)據(jù)源配置類、配置事務(wù)管理器以及使用不同的Mapper,從而實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)操作
    2025-03-03
  • SpringBoot自定義實(shí)現(xiàn)內(nèi)容協(xié)商的三種策略

    SpringBoot自定義實(shí)現(xiàn)內(nèi)容協(xié)商的三種策略

    內(nèi)容協(xié)商是HTTP協(xié)議中的一個(gè)重要概念,允許同一資源URL根據(jù)客戶端的偏好提供不同格式的表示,這篇文章主要介紹了SpringBoot自定義實(shí)現(xiàn)內(nèi)容協(xié)商的三種策略,希望對(duì)大家有一定的幫助
    2025-04-04
  • Spring攔截器和過(guò)濾器的區(qū)別在哪?

    Spring攔截器和過(guò)濾器的區(qū)別在哪?

    相信很多小伙伴都對(duì)Spring攔截器和過(guò)濾器的區(qū)別有疑惑,今天特地整理了本篇文章,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

抚顺县| 伊金霍洛旗| 黑山县| 汶上县| 平原县| 田阳县| 广南县| 怀远县| 图们市| 贡觉县| 保山市| 新田县| 上高县| 辉县市| 沐川县| 河西区| 闸北区| 花莲县| 平凉市| 连州市| 白城市| 长白| 筠连县| 吉安市| 怀宁县| 称多县| 佛学| 商洛市| 柘城县| 黄龙县| 颍上县| 建水县| 洞头县| 喀什市| 辽源市| 旌德县| 广平县| 德保县| 普宁市| 阿坝县| 元朗区|