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

【Java結(jié)合EasyExcel,模板文件填充并導出Excel】

這篇具有很好參考價值的文章主要介紹了【Java結(jié)合EasyExcel,模板文件填充并導出Excel】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求描述:

客戶網(wǎng)頁上填一個Excel表格,數(shù)據(jù)存到數(shù)據(jù)庫,這個導出接口要做的就是從數(shù)據(jù)庫中的獲取數(shù)據(jù)并填充到模板文件,最后通過response返給前端一個下載鏈接,用戶即可獲取填充好的Excel文件。

方案一:

一開始使用的是easypoi,發(fā)現(xiàn)當填充一行數(shù)據(jù)時是OK的,但是如果是多行數(shù)據(jù),處理對象集合會拋異常,所以在小組長的建議下最終放棄選擇使用EasyExcel;

方案二:

組長給了個圖示 直接看懂 如下兩圖:

java excel模板填充,java

java excel模板填充,java

?模糊的數(shù)據(jù)是模板數(shù)據(jù)不用關(guān)注,目的是往空格里填充數(shù)據(jù)

?左邊模板,右邊結(jié)果,一目了然,我覺得挺簡單寫了個demo也成功了(文件生成在本地)

后面我想著網(wǎng)上找找樣例,把輸出流設(shè)置到response里面應該不難,我自己寫好了調(diào)試卻發(fā)現(xiàn)一直報錯,各種改都不行,我調(diào)試+修改搞了一上午,后面我跟組長匯報了情況,他說他來改,半小時就改好了。

我寫的代碼是這樣的:

<!--EasyExcel-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>3.1.1</version>
		</dependency>
@GetMapping("/exportExcel")
    @ApiOperation(value = "導出", notes = "導出", httpMethod = "GET")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "code", paramType = "query", value = "單位編碼", required = true, dataType = "String", example = "12312311")
    })
    public void exportExcel(@RequestParam String code, HttpServletResponse response)throws Exception {
        reportService.exportExcel(code, response);
    }
  @Override
    public void exportExcel(String code, HttpServletResponse response) throws Exception{
        //先查詢詳情列表是否存在
        List<ReportDetailDO> reportDetailDOS = reportDetailDAO.select(
                ReportDetailDO.builder()
                        .code(code)
                        .build());
        //不存在時拋異?!床樵兊教顖笥涗?        if (CollectionUtils.isEmpty(reportDetailDOS)) {
            throw new BusException(ResultEnum.NO_FILLED_IN_RECORDS_FOUND);
        }
        ReportOrgDO reportOrgDO = reportOrgDAO.selectOne(
                ReportOrgDO.builder()
                        .code(code)
                        .build());

 String templateFileName = "template/vnd.xlsx";

        // 這里URLEncoder.encode可以防止中文亂碼
        String fileName = URLEncoder.encode(reportOrgDO.getName() + TABLE_NAME+".xlsx", "UTF-8").replaceAll("\\+", "%20");

        //文件名=公司名+表名
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        ServletOutputStream outputStream = response.getOutputStream();

        InputStream templateFile = this.getClass().getClassLoader().getResourceAsStream(templateFileName);
        ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(templateFile).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();

        //開啟自動換行,自動換行表示每次寫入一條list數(shù)據(jù)是都會重新生成一行空行,此選項默認是關(guān)閉的,需要提前設(shè)置為true
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        List<ReportDetailExcelDTO>list=OrikaHelper.convertList(reportDetailDOS, ReportDetailExcelDTO.class);
excelWriter.fill(list, fillConfig, writeSheet);
        excelWriter.finish();

}

用戶導出過度的類如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("匯報詳情Excel")
public class ReportDetailExcelDTO {
    @ExcelProperty("2019年度")
    private String content1;
    @ExcelProperty("2020年度")
    private String content2;
    @ExcelProperty("2021年度")
    private String content3;
    @ExcelProperty("2022年度")
    private String content4;
    @ExcelProperty("備注")
    private String remark;
}

組長是這樣寫的:

 <!--EasyExcel-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>2.2.10</version>
		</dependency>
//省略獲取數(shù)據(jù)對象集合的方法。。。(list)

 String templateFileName = "template/vnd.xlsx";

        // 這里URLEncoder.encode可以防止中文亂碼
        String fileName = URLEncoder.encode(reportOrgDO.getName() + TABLE_NAME + ".xlsx", "UTF-8")
                .replaceAll("\\+", "%20");

        //文件名=公司名+表名
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

//ReportDetailDO是數(shù)據(jù)對象的泛型 相當于數(shù)據(jù)庫的實體類 不需要加特殊的EasyExcel注解
        InputStream templateFile = this.getClass().getClassLoader().getResourceAsStream(templateFileName);
        EasyExcel.write(response.getOutputStream(), ReportDetailDO.class)
                .withTemplate(templateFile).sheet().doFill(Optional.ofNullable(list).orElse(new ArrayList<>()));

組長簡簡單單改了下依賴的版本,業(yè)務(wù)代碼寫了幾行然后云淡風輕告訴我可以了,我當時真的很不理解,心情很復雜,一方面覺得自己為什么搞不出來,另外覺得像改變版本這種問題真的很難找到排查出來,經(jīng)歷這件事讓我覺得,同樣是程序員,有的人還在埋頭苦苦調(diào)試找原因,有的人輕而易舉的可以找到問題并修改,閱歷和經(jīng)驗決定了你的實力,自己還是太嫩,路漫漫其修遠兮...

另外我發(fā)現(xiàn)我用postman居然測不成功,最后用swagger才能返回一個下載鏈接,無語。。。

這件事給我的啟發(fā)是,不要新高氣傲覺得一切OK的樣子,實際上如果網(wǎng)上沒有一些開源代碼,自己是很難順利完成某個業(yè)務(wù)的編寫,還是要對技術(shù)保持敬畏,自己平時要學會復盤和總結(jié),爭取不會被同一個問題難倒兩次。另外還要感謝為我們開路的大佬,正所謂前人種樹,后人乘涼,respect!文章來源地址http://www.zghlxwxcb.cn/news/detail-709248.html

到了這里,關(guān)于【Java結(jié)合EasyExcel,模板文件填充并導出Excel】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 工具類——Java導出EXCEL2(設(shè)置樣式、加載并填充圖片、加載指定模板、大數(shù)據(jù)量設(shè)置窗口大小與刷新頻率)

    工具類——Java導出EXCEL2(設(shè)置樣式、加載并填充圖片、加載指定模板、大數(shù)據(jù)量設(shè)置窗口大小與刷新頻率)

    書接上篇:工具類——Java 瀏覽器導入、導出Excel(Java import、export)demo POI的導出方式:創(chuàng)建/加載Workbook,設(shè)置樣式,填充數(shù)據(jù),然后生成本地臨時文件,最終以瀏覽器的形式打開,完成整個導出動作。 demo如下, demo如下, XSSFClientAnchor anchor = new XSSFClientAnchor(int dx1, int dy1,

    2024年02月01日
    瀏覽(19)
  • JAVA(EasyExcel)通過遠程調(diào)用模板 導出數(shù)據(jù) 復雜表頭

    JAVA(EasyExcel)通過遠程調(diào)用模板 導出數(shù)據(jù) 復雜表頭

    最近接手一個需求,單組數(shù)據(jù)的顯示,也有多組數(shù)據(jù)的顯示,查了好多文章,都不是很明白.但是這篇文章和我的需求差不多非常相似(鏈接放在文末),根據(jù)這篇文章然后將自己的實現(xiàn)過程記錄了下來,以防之后再用到. 這是我需要導出的excel格式 開頭是單條數(shù)據(jù)的展示 之后是多條數(shù)據(jù)

    2024年02月03日
    瀏覽(32)
  • java實現(xiàn)excel的導出之使用easyExcel

    java實現(xiàn)excel的導出之使用easyExcel

    在我們的項目需求中,經(jīng)常會遇到導出的需求,其中excel的導出最為常見。生成Excel比較有名的框架有Apache poi,jxl等,但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來后一定會OOM或者JVM頻繁的full gc. EasyExcel是阿里巴巴

    2024年02月15日
    瀏覽(24)
  • Java 導出Excel表格生成下拉框-EasyExcel
  • Java——使用EasyExcel導出動態(tài)列的Excel

    多多點贊,會變好看! 多多留言,會變有錢! 有些時候列表的列可能是動態(tài)的,需要根據(jù)動態(tài)表頭導出Excel文件,這時候可以使用下面的方法解決: 靜態(tài)列導出代碼:

    2024年02月15日
    瀏覽(35)
  • easyexcel poi根據(jù)模板導出Excel

    easyexcel poi根據(jù)模板導出Excel

    參考:https://blog.csdn.net/weixin_45742032/article/details/119593288?spm=1001.2101.3001.6650.1utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119593288-blog-86538258.235%5Ev38%5Epc_relevant_anti_t3_basedepth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-11959328

    2024年02月10日
    瀏覽(32)
  • Java根據(jù)excel模版導出Excel(easyexcel、poi)——含項目測試例子拿來即用

    Java根據(jù)excel模版導出Excel(easyexcel、poi)——含項目測試例子拿來即用

    一般列表導出以及個性化樣式設(shè)置請看下面的文章: JAVA導出Excel通用工具類——第一篇:詳細介紹POI 導出excel的多種復雜情況,包括動態(tài)設(shè)置篩選、動態(tài)合并橫向(縱向)單元格等多種復雜情況. JAVA導出Excel通用工具——第二篇:使用EasyExcel導出excel的多種情況的例子介紹.

    2024年04月29日
    瀏覽(25)
  • <Java導出Excel> 1.0 Java實現(xiàn)Excel動態(tài)模板導出

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

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

    2024年02月12日
    瀏覽(19)
  • EasyExcel導出帶下拉選數(shù)據(jù)的Excel數(shù)據(jù)導入模板

    EasyExcel導出帶下拉選數(shù)據(jù)的Excel數(shù)據(jù)導入模板

    #因為項目中需要導入一些信息,但是這些信息比較不常見,且在項目字典數(shù)據(jù)中維護有這些數(shù)據(jù),所以在導出模板的時候,把這些數(shù)據(jù)一并導出,可以減少用戶的編寫,避免在導入的時候因為數(shù)據(jù)錯誤,發(fā)生一些業(yè)務(wù)問題 直接開始 1、以崗位類型為例,展示數(shù)據(jù)的實現(xiàn)方式

    2024年02月03日
    瀏覽(32)
  • java-EasyExcel導出excel設(shè)置單元格為文本格式(含代碼)

    java-EasyExcel導出excel設(shè)置單元格為文本格式(含代碼)

    java-EasyExcel導出excel設(shè)置單元格為文本格式(含代碼) 在使用EasyExcel導出excel模板時。我們會發(fā)現(xiàn)導出的日期和大長度數(shù)字都會自動更換格式,不是文本格式。并且在空白單元格輸入日期也是格式有問題的,如下所示,可以看到當輸入相同的日期時,格式會變成自適應,不是文

    2023年04月15日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包