欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java動態(tài)填充Excel模板實戰(zhàn)教程

 更新時間:2025年07月20日 09:40:09   作者:SunnyDays1011  
在日常開發(fā)中,我們經(jīng)常需要生成格式統(tǒng)一的 Excel 文件,比如報表、發(fā)票、訂單清單、成績單等,手動創(chuàng)建 Excel 文件不僅效率低,而且難以保證樣式的一致性相比之下,所以本文將介紹如何通過Java實現(xiàn)Excel模板的數(shù)據(jù)填充與自動化導(dǎo)出,需要的朋友可以參考下

引言

在日常開發(fā)中,我們經(jīng)常需要生成格式統(tǒng)一的 Excel 文件,比如報表、發(fā)票、訂單清單、成績單等。手動創(chuàng)建 Excel 文件不僅效率低,而且難以保證樣式的一致性。相比之下,使用預(yù)先設(shè)計好的 Excel 模板,通過Java代碼自動填充數(shù)據(jù),既省時省力,又能確保輸出文檔專業(yè)規(guī)范。

這種“基于模板生成Excel”的方式,特別適用于處理結(jié)構(gòu)固定、數(shù)據(jù)來源動態(tài)的場景,比如從數(shù)據(jù)庫導(dǎo)出銷售記錄、根據(jù)用戶輸入生成報價單、批量生成發(fā)票等。本文將介紹如何通過Java實現(xiàn)Excel模板的數(shù)據(jù)填充與自動化導(dǎo)出。主要涵蓋內(nèi)容如下:

  • 為什么選擇Java編程方式填充Excel模板
  • 準備工作
  • Java填充Excel模板的實現(xiàn)方式
    • 方法一、替換模板中的占位符文本
    • 方法二、使用Smart Marker動態(tài)插入數(shù)據(jù)
    • 進階示例:填充自定義數(shù)據(jù)對象
    • 將導(dǎo)出結(jié)果保存為PDF(可選操作)

為什么選擇Java編程方式填充Excel模板

相比手動填充,采用Java編程方式按模板生成Excel文件具有多方面的優(yōu)勢:

  • 提高效率:快速處理大量數(shù)據(jù),節(jié)省人力和時間成本。
  • 保持樣式統(tǒng)一:繼承模板樣式,確保文檔美觀、規(guī)范。
  • 支持動態(tài)數(shù)據(jù):自動填充來自數(shù)據(jù)庫或接口的實時數(shù)據(jù)。
  • 便于批量生成:輕松創(chuàng)建多份文檔,如報表、發(fā)票等。
  • 易于集成:可嵌入業(yè)務(wù)系統(tǒng),實現(xiàn)自動化文檔處理流程。
  • 降低錯誤率:避免手動輸入失誤,提高數(shù)據(jù)準確性。

準備工作

1. 引入 Spire.XLS for Java

Spire.XLS for Java是一款功能全面的 Excel 操作類庫,支持讀取、編輯、生成、格式化以及導(dǎo)出 Excel 文檔。在開始前,確保項目中已正確引入該庫:

如果使用 Maven,可添加如下依賴(當(dāng)前版本號15.6.3):

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls</artifactId>
    <version>15.6.3</version>
</dependency>

2. 準備 Excel 模板文件

根據(jù)業(yè)務(wù)需求,設(shè)計好 Excel 模板。模板中可以包含:

  • 占位符文本:用于簡單替換;
  • 或Smart Marker:用于綁定結(jié)構(gòu)化數(shù)據(jù)。

模板應(yīng)預(yù)設(shè)好樣式、布局和表頭,確保填充后文檔整潔規(guī)范。

Java填充Excel模板的實現(xiàn)方式

方法一、替換模版中的占位符文本

適用場景說明

當(dāng)模板結(jié)構(gòu)固定,僅需填充個別字段(如姓名、職位、日期等)時,可在模板中設(shè)置占位符文字,通過程序自動查找并替換這些占位符,實現(xiàn)數(shù)據(jù)的動態(tài)填充。

實現(xiàn)步驟

創(chuàng)建Excel模板

新建一個Excel模板文檔,在模板中預(yù)設(shè)占位符文字,例如{姓名}、{年齡}、{職位} 等:

使用Java查找并替換模板中的占位符文字

以下代碼展示了如何在模板中查找占位符文字,并將其替換為實際數(shù)據(jù):

import com.spire.xls.*;

import java.awt.*;
import java.util.EnumSet;
import java.util.HashMap;

public class ReplacePlaceholderText {
    public static void main(String[] args) {
        // 打開Excel模板
        Workbook workbook = new Workbook();
        workbook.loadFromFile("占位符模板.xlsx");

        // 獲取指定工作表(工作表索引從0開始)
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 定義要替換的占位符及對應(yīng)值
        HashMap<String, Object> replacements = new HashMap<>();
        replacements.put("{姓名}", "張立強");
        replacements.put("{年齡}", 28);
        replacements.put("{職位}", "財務(wù)總監(jiān)");

        // 在工作表中查找占位符并替換為對應(yīng)值
        for (String placeholder : replacements.keySet()) {
            Object value = replacements.get(placeholder);
            CellRange[] foundRanges = sheet.findAll(placeholder, EnumSet.of(FindType.Text), EnumSet.of(ExcelFindOptions.MatchEntireCellContent));
            for (int i = 0; i < foundRanges.length; i++) {
                CellRange cell = foundRanges[i];
                cell.setValue2(value);
                // 高亮替換后的單元格 (可選)
                cell.getStyle().setColor(Color.YELLOW);
            }
        }

        // 保存結(jié)果文件
        workbook.saveToFile("替換占位符.xlsx", ExcelVersion.Version2016);
        workbook.dispose();
    }
}

結(jié)果文檔如圖:

方法二、使用Smart Marker動態(tài)插入數(shù)據(jù)

什么是Smart Marker(智能標記)

Smart Marker 是一種用在Excel 模板中的特殊語法標識符,用于將外部數(shù)據(jù)源動態(tài)填充到工作表的指定位置。它在模板中以占位符的形式存在,程序運行過程中會根據(jù)綁定的數(shù)據(jù)源自動替換為實際內(nèi)容,從而實現(xiàn)批量生成報表、訂單、清單等文檔。

借助 Smart Marker,開發(fā)者可快速、靈活地將數(shù)據(jù)自動寫入 Excel,提高文檔生成的效率和自動化程度。

Smart Marker語法說明

Smart Marker的寫法會根據(jù)所綁定的數(shù)據(jù)類型有所不同。每個標記必須單獨放置在一個單元格中,一個單元格中只能包含一個智能標記,不能與其他文本混合使用,以確保正確解析和填充數(shù)據(jù)。

常見的語法格式包括:

  • &=變量名:將一個單一值插入當(dāng)前單元格。適用于填充如姓名、日期或編號等基礎(chǔ)數(shù)據(jù)項。
    示例:&=姓名,表示將姓名變量的值插入該單元格。
  • &=集合對象:將一個集合對象中的元素按垂直方向(即逐行)填充到多個單元格中。適用于批量插入記錄,如員工姓名、產(chǎn)品名稱或訂單編號等。
    示例:&=Language,表示將Language集合中的每一項按垂直方向依次填入各行。
  • &=數(shù)據(jù)源.字段名:用于綁定結(jié)構(gòu)化數(shù)據(jù)源中的具體字段。數(shù)據(jù)源可以是數(shù)據(jù)庫查詢結(jié)果、對象集合、DataTable 等。此語法適用于需要從復(fù)雜數(shù)據(jù)結(jié)構(gòu)中提取字段值進行批量填充的場景。
    示例:&=Student.Name ,表示從名為 Student 的數(shù)據(jù)源中提取 Name 字段的數(shù)據(jù)并逐行填充。

實現(xiàn)步驟

創(chuàng)建Excel模板

新建一個Excel模板文檔,并插入以下Smart Marker智能標記:

使用Java填充數(shù)據(jù)到模板

以下代碼展示了如何創(chuàng)建一個結(jié)構(gòu)化表格DataTable,將DataTable數(shù)據(jù)綁定到模板的Smart Marker智能標記,并應(yīng)用Smart Marker來填充數(shù)據(jù)到模板:

import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import com.spire.xls.data.table.DataColumn;
import com.spire.xls.data.table.DataRow;
import com.spire.xls.data.table.DataTable;

public class ApplySmartMarker {
    public static void main(String[] args) throws Exception {
        // 加載 Excel 模板
        Workbook workbook = new Workbook();
        workbook.loadFromFile("智能標記模板.xlsx");

        // 獲取第一個工作表
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 創(chuàng)建一個新的 DataTable 對象,并命名為 "data"
        DataTable dt = new DataTable();
        dt.setTableName("data");

        // 添加三列:姓名、年齡、職位
        dt.getColumns().add(new DataColumn("姓名"));
        dt.getColumns().add(new DataColumn("年齡"));
        dt.getColumns().add(new DataColumn("職位"));

        // 創(chuàng)建數(shù)據(jù)行
        DataRow row1 = dt.newRow();
        row1.setString("姓名", "張三");
        row1.setString("年齡", "28");
        row1.setString("職位", "銷售經(jīng)理");

        DataRow row2 = dt.newRow();
        row2.setString("姓名", "李四");
        row2.setString("年齡", "32");
        row2.setString("職位", "市場主管");

        DataRow row3 = dt.newRow();
        row3.setString("姓名", "王五");
        row3.setString("年齡", "25");
        row3.setString("職位", "技術(shù)支持");

        // 添加數(shù)據(jù)行到表格中
        dt.getRows().add(row1);
        dt.getRows().add(row2);
        dt.getRows().add(row3);

        // 綁定表格的數(shù)據(jù)
        workbook.getMarkerDesigner().addDataTable("data", dt);

        // 應(yīng)用Smart Marker,填充數(shù)據(jù)
        workbook.getMarkerDesigner().apply();

        // 自動調(diào)整行高和列寬 (可選)
        //sheet.getAllocatedRange().autoFitRows();
        //sheet.getAllocatedRange().autoFitColumns();

        // 保存結(jié)果文件
        workbook.saveToFile("應(yīng)用智能標記.xlsx", ExcelVersion.Version2016);
        workbook.dispose();
    }
}

結(jié)果文檔如圖:

Smart Marker附加設(shè)置

1. 格式復(fù)制

從以上結(jié)果文檔中可以看出,后兩行的格式與前兩行不同,沒有居中,這是因為在插入數(shù)據(jù)的時候沒有復(fù)制格式。要解決這一問題,可以在模版的Smart Marker中添加add:styles參數(shù),如下圖所示:

保存模板文檔,再執(zhí)行代碼,結(jié)果文檔如圖:

2. 數(shù)據(jù)填充方向設(shè)置

默認情況下,Smart Marker的數(shù)據(jù)填充方向為垂直方向。在模板的Smart Marker中添加horizontal參數(shù),即可調(diào)整填充方向為水平方向。

示例:&=data.姓名(horizontal)

進階示例:填充自定義數(shù)據(jù)對象

在實際開發(fā)中,除了使用基礎(chǔ)數(shù)據(jù)類型和表格數(shù)據(jù),我們有時還需要將自定義的對象集合填充到 Excel 模板中。

下面的代碼展示了如何創(chuàng)建一個 Excel 模板,定義自定義數(shù)據(jù)對象,并通過 Smart Marker 將對象屬性的數(shù)據(jù)插入到模板中:

import com.spire.xls.*;
import java.util.ArrayList;

public class BindCustomObjects {
    // 定義一個Student類
    public static class Student {
        private String Name;
        private String Course;
        private int Score;
        // 定義構(gòu)造函數(shù),參數(shù)包括:學(xué)生姓名、課程、分數(shù)
        public Student(String name, String course, int score) {
            this.Name = name;
            this.Course = course;
            this.Score = score;
        }
    }
    public static void main(String[] args) {
        // 創(chuàng)建Excel模板文檔
        Workbook workbook = new Workbook();

        // 獲取第一個工作表
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 添加表頭
        sheet.getCellRange("A1").setValue("姓名");
        sheet.getCellRange("B1").setValue("課程");
        sheet.getCellRange("C1").setValue("分數(shù)");

        // 添加Smart Marker智能標記
        sheet.getCellRange("A2").setValue("&=Student.Name(add:styles)");
        sheet.getCellRange("B2").setValue("&=Student.Course(add:styles)");
        sheet.getCellRange("C2").setValue("&=Student.Score(add:styles)");

        // 設(shè)置單元格格式
        sheet.getCellRange("A1:C2").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
        sheet.getCellRange("A1:C1").getCellStyle().getFont().isBold(true);
        sheet.getCellRange("A1:C1").getCellStyle().getFont().setSize(12);
        sheet.getCellRange("A2:C2").getCellStyle().getFont().setSize(11);

        // 創(chuàng)建一個ArrayList來存儲Student對象
        ArrayList<Student> list = new ArrayList<>();

        // 添加3個學(xué)生對象
        list.add(new Student("喬治", "語文", 62));
        list.add(new Student("佩琪", "數(shù)學(xué)", 88));
        list.add(new Student("艾米麗", "英語", 95));

        // 綁定ArrayList數(shù)據(jù)到Smart Marker
        workbook.getMarkerDesigner().addParameter("Student", list);

        // 應(yīng)用Smart Marker,填充數(shù)據(jù)
        workbook.getMarkerDesigner().apply();

        // 保存結(jié)果文件
        workbook.saveToFile("添加自定義數(shù)據(jù)類型.xlsx", ExcelVersion.Version2013);
        workbook.dispose();
    }
}

將導(dǎo)出結(jié)果保存為PDF(可選操作)

要將填充后的Excel模板保存為PDF,只需使用Workbook.saveToFile()方法并指定格式為FileFormat.PDF即可:

workbook.saveToFile("添加自定義數(shù)據(jù)類型.pdf", FileFormat.PDF);

總結(jié)

通過 Java 編程方式填充 Excel 模板,可以高效地生成樣式一致、數(shù)據(jù)準確的文檔,尤其適用于批量生成、自動化導(dǎo)出等場景。借助 Java和Spire.XLS庫,開發(fā)者無需手動構(gòu)建復(fù)雜表格結(jié)構(gòu),即可靈活填充各類動態(tài)數(shù)據(jù),提升辦公自動化水平和開發(fā)效率。

以上就是Java動態(tài)填充Excel模板實戰(zhàn)教程的詳細內(nèi)容,更多關(guān)于Java填充Excel模板的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java跨域cookie失效問題及解決

    java跨域cookie失效問題及解決

    文章介紹了現(xiàn)代Web應(yīng)用中前后端分離架構(gòu)下跨域請求和Cookie處理的問題,包括現(xiàn)象描述、跨域Cookie的原理、解決方案(如Java后端、前端Vue、Nginx配置,以及使用window.localStorage存儲數(shù)據(jù)),以及實踐案例和常見問題排查
    2025-01-01
  • Java實現(xiàn)父子線程共享數(shù)據(jù)的幾種方法

    Java實現(xiàn)父子線程共享數(shù)據(jù)的幾種方法

    本文主要介紹了Java實現(xiàn)父子線程共享數(shù)據(jù)的幾種方法,包括直接共享變量、使用?ThreadLocal、同步機制、線程安全的數(shù)據(jù)結(jié)構(gòu)以及ExecutorService,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • java web實現(xiàn)分頁查詢實例方法

    java web實現(xiàn)分頁查詢實例方法

    在本篇文章里我們給大家分享了java web實現(xiàn)分頁查詢的詳細方法知識點,有需要的朋友們參考學(xué)習(xí)下。
    2018-10-10
  • SpringBoot 動態(tài)配置Profile環(huán)境的方式

    SpringBoot 動態(tài)配置Profile環(huán)境的方式

    這篇文章主要介紹了SpringBoot 動態(tài)配置Profile環(huán)境的方式,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Java字節(jié)流和字符流及IO流的總結(jié)

    Java字節(jié)流和字符流及IO流的總結(jié)

    本文主要將Java中的IO流進行了梳理,通過將其分成字節(jié)流和字符流,以及輸入流和輸出流分別統(tǒng)計,來建立一個對 Java中IO流全局的概念,通過一些實例來演示了如何通過不同類型的流來組合實現(xiàn)強大靈活的輸入和輸出,最后介紹了同時支持輸入和輸出的 RandomAccessFile。
    2021-04-04
  • 一文帶你搞懂Java單例模式

    一文帶你搞懂Java單例模式

    單例就是單實例的意思,即在系統(tǒng)全局,一個類只創(chuàng)建一個對象,并且在系統(tǒng)全局都可以訪問這個對象而不用重新創(chuàng)建。本文將通過示例為大家詳細講解Java單例模式的使用,需要的可以參考一下
    2022-11-11
  • MyBatis結(jié)果映射(ResultMap)的使用

    MyBatis結(jié)果映射(ResultMap)的使用

    在MyBatis中,結(jié)果映射是實現(xiàn)數(shù)據(jù)庫結(jié)果集到Java對象映射的核心,它不僅支持簡單的字段映射,還能處理字段名不一致、嵌套對象和集合映射等復(fù)雜場景,通過ResultMap,開發(fā)者可以靈活定義映射關(guān)系,以適應(yīng)各種需求,感興趣的可以了解一下
    2024-09-09
  • Java如何獲取視頻文件的視頻時長

    Java如何獲取視頻文件的視頻時長

    文章介紹了如何使用Java獲取視頻文件的視頻時長,包括導(dǎo)入maven依賴和代碼案例,同時,也討論了在運行過程中遇到的SLF4J加載問題,并給出了解決方案
    2025-02-02
  • Java去除字符串中的空格實現(xiàn)方式

    Java去除字符串中的空格實現(xiàn)方式

    這篇文章主要介紹了Java去除字符串中的空格實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 【面試】Spring事務(wù)面試考點吐血整理(建議珍藏)

    【面試】Spring事務(wù)面試考點吐血整理(建議珍藏)

    本文是小編給大家收藏整理的Spring事務(wù)面試考點,非常不錯,值得收藏,感興趣的朋友參考下吧
    2019-04-04

最新評論