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

Java 中導出 Excel 文件的常見實現(xiàn)方法

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

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

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

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

一、基于 Apache POI(最常用)

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

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

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

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

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

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

示例代碼片段(XSSF)

// 創(chuàng)建.xlsx文檔
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
// 創(chuàng)建標題行
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 是阿里巴巴開源的 Excel 處理工具,基于 POI 封裝,專注于簡化代碼和優(yōu)化大數(shù)據(jù)量性能,避免 POI 的內(nèi)存占用問題。

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

優(yōu)點
代碼簡潔,無需手動處理行和單元格,降低開發(fā)成本。
性能優(yōu)異,適合大數(shù)據(jù)量導出(如報表、日志數(shù)據(jù))。

缺點
高級格式(如公式、圖表)支持較弱,復雜場景仍需結(jié)合 POI。

示例代碼片段

// 定義數(shù)據(jù)模型(通過注解映射Excel列)
@Data
public class User {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年齡")
    private Integer age;
}
// 導出邏輯
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),目前已停止維護,逐漸被 POI 替代。

優(yōu)點
輕量級,API 簡單,適合簡單的.xls 文件導出。

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

示例代碼片段

// 創(chuàng)建.xls文檔
WritableWorkbook workbook = Workbook.createWorkbook(new File("test_jxl.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 標題行
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)

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

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

優(yōu)點
樣式與邏輯分離,模板可由非開發(fā)人員(如運營)維護。
適合復雜格式報表,無需代碼中手動設(shè)置樣式。

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

示例(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(逗號分隔值)是一種簡單的文本格式,可被 Excel 直接打開,適合純數(shù)據(jù)導出(無格式要求)。

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

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

示例代碼片段

FileWriter writer = new FileWriter("data.csv");
// 標題行
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è)工具,功能強大(支持所有 Excel 特性),但需要付費授權(quán),適合企業(yè)級復雜場景。
JXLS:結(jié)合 POI 和模板引擎,通過標簽(如jx:each)在 Excel 模板中循環(huán)填充數(shù)據(jù),適合動態(tài)報表。

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

相關(guān)文章

  • idea撤銷git?commit操作詳解

    idea撤銷git?commit操作詳解

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

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

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

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

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

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

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

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

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

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

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

    通過實例解析Socket套接字通信原理

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

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

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

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

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

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

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

最新評論

逊克县| 左云县| 三亚市| 和平县| 荃湾区| 中卫市| 方正县| 体育| 霍州市| 仙居县| 滦南县| 哈巴河县| 新津县| 绥宁县| 饶阳县| 兰考县| 怀集县| 株洲市| 麻阳| 开鲁县| 太白县| 泰安市| 海原县| 安丘市| 武鸣县| 南部县| 黑河市| 辽源市| 扶沟县| 遂川县| 比如县| 迁安市| 溧水县| 锡林浩特市| 年辖:市辖区| 兴隆县| 盐城市| 铜鼓县| 含山县| 淮北市| 罗城|