Java按模板導出Excel———基於Aspose實現

開發環境

  1. jdk 1.8
  2. Maven 3.6
  3. SpringBoot 2.1.4.RELEASE
  4. aspose-cells 8.5.2
  5. Idea

java

參照: 基於SpringBoot構建分模塊項目工具

先看效果

模板:模板測試

導出後效果:導出後效果url

引入jar包

pom.xml設計

如遇到jar沒法下載的狀況,可自行下載到本地,而後手動添加到項目中code

<dependencies>
        <!-- 你的其餘jar -->
        
        <!-- aspose -->
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-cells</artifactId>
            <version>8.5.2</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>AsposeJavaAPI</id>
            <name>Aspose Java API</name>
            <url>http://repository.aspose.com/repo/</url>
        </repository>
    </repositories>

校驗許可證

Aspose默認引入的是評估版(未指定許可證),此版本可以使用所有功能,可是有如下兩個限制:xml

  • 運行程序時,只能打開100個Excel文件。若是您的應用程序超過此數量,將引起異常。
  • 帶有評估水印的工做表

若是你的應用場景不能接受以上兩點限制,可在官網購買許可證,而後經過校驗許可證解除限制;若是你能夠接受,請忽略此操做;htm

官網提供多種校驗方式,此處只列舉其中一種將License配置在項目中對象

在resources包下添加license.xml

License

建立AsposeUtils工具類,添加方法校驗方法

package com.wayne.common.utils;

import com.aspose.cells.License;
import java.io.InputStream;

/**
 * Aspose工具類
 * @author Wayne
 * @date 2019/6/10
 */
public class AsposeUtils {

       /**
     * 校驗Aspose的License
     */
    private static Boolean checkLicense() {
        try {
            InputStream license = AsposeUtils.class.getClassLoader().getResourceAsStream("license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(license);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return License.isLicenseSet();
    }
}

導出方法

此處列舉爲較簡單的單個sheet,且不分頁導出,更多使用方式請參考官網文檔

package com.wayne.common.utils;

import com.aspose.cells.License;
import com.aspose.cells.Workbook;
import com.aspose.cells.WorkbookDesigner;

import java.io.InputStream;
import java.util.List;

/**
 * Aspose工具類
 * @author Wayne
 * @date 2019/6/10
 */
public class AsposeUtils {

    /**
     * @param head 單個對象,將對象做爲此參數傳入。如沒有,傳入null
     * @param list 多個對象時,將對象做爲此參數傳入。如沒有,傳入null
     * @param templateName 模板所在的位置,如:E:/template/studentTemplate.xlsx
     * @param resultFilePath 生成後的文件所存放的文件夾,如:E:/data/
     * @return 生成後的文件路徑及文件名,如:E:/data/student.xlsx
     */
    public static <H> String exportExcelByAsposeWithTemplate(H head, List list, String templateName, String resultFilePath) {
        // 校驗許可證
        if(!checkLicense()) {
            return null;
        }
        // 生成後文件名
        String resultFile = resultFilePath + System.currentTimeMillis() + ".xlsx";

        try {
            // 加載模板
            Workbook wb = new Workbook(templateName);
            // 加載設計器
            WorkbookDesigner designer = new WorkbookDesigner();
            designer.setWorkbook(wb);
            // 單個對象和集合區分(在模板中定義方式不一樣)
            if(null != head) {
                designer.setDataSource("Head", head);
            }
            if(null != list) {
                designer.setDataSource("List", list);
            }

            designer.process();
            wb.save(resultFile);
            wb.dispose();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultFile;
    }

    /**
     * 校驗Aspose的License
     */
    private static Boolean checkLicense() {
        try {
            InputStream license = AsposeUtils.class.getClassLoader().getResourceAsStream("license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(license);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return License.isLicenseSet();
    }
}

測試結果

@Test
public void exportExcelByAsposeWithTemplateTestCase() {
    String templateName = "E:/Temp/Template.xlsx";
    String resultFilePath = "E:/Temp/";

    // 單個對象測試
    UserOne userOne = new UserOne();
    userOne.setId(1);
    userOne.setUsername("Tom");
    userOne.setPassword("123123");

    // 集合測試
    List<UserTwo> lists = new ArrayList<>();
    for(int i = 0; i < 10; i++) {
        UserTwo temp = new UserTwo();
        temp.setId(i*10);
        temp.setUsername(String.valueOf((i*100)));
        lists.add(temp);
    }

    String resultFileName = AsposeUtils.exportExcelByAsposeWithTemplate(userOne, lists, templateName, resultFilePath);
    assert null != resultFileName;
}

測試結果

運行測試用例,綠了~~~

佔位符

常規佔位 (¬_¬)…

相關文章
相關標籤/搜索