使用Apache POI導出echarts圖表到Excel表格


轉自:https://blog.csdn.net/weixin_44009447/article/details/105794496

引言:在實際項目統計報表模塊中,報表的內容不單單只有數據,用戶為了更能直觀的觀察數據,往往還提出將數據圖表導出到excel的需求,比如數據柱狀圖、餅狀圖以及折線圖等等。這些數據圖形可以用echarts來進行動態實現,那么我們如何將echarts構建的圖表導出到excel文件中呢?

 

本篇文章主要說明如何使用Apache POI導出echarts圖表到Excel表格,詳細導出數據步驟在我的另一篇博文中有:使用Apache POI導出數據到Excel表格,在這里就簡單說明一下導出echarts圖形的新添加的步驟以及代碼,希望能對大家有所幫助。

 

1.首先我們要了解到導出echarts圖表大概是一個什么樣子的流程:得到echarts圖表的base64編碼→將該圖表的base64編碼解碼得到圖片文件→將該圖片文件寫入流中→最后將該圖片畫在excel畫布上

注:(Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。)

 

2.echarts圖表構建好之后,得到該圖表的echarts編碼,並傳入后台,如下圖所示:

 

3.控制器中去接收該數據,如下圖所示:

 

 

4.相對於之前導出數據,導出echarts圖表只是多傳入了一個imgBase64Info參數,所以在導出的工具中,我們也需要添加一塊構建echarts圖表的代碼,添加的代碼如下所示:

 

添加的代碼塊:

 

 /*將echarts數據生成圖表*/

        if(!StringUtils.isEmpty(imgUrl)) {

            // 1)截取獲取到的base64編碼,去掉前綴"data:image/png;base64," || "data:image/jpeg;base64,",只取base64編碼

            String[] imgUrlArr = imgUrl.split("base64,");//拆分base64編碼后部分

            // 2)重點:在傳 base64編碼 的時候,會把 base64編碼 中的 "+" 號換成空格,所以需要先將base64中的空格轉換回來,再進行保存操作!!!

            byte[] buffer = new BASE64Decoder().decodeBuffer(imgUrlArr[1].replaceAll(" ", "+"));

            //生成圖片保存路徑

            String picPath = "C:\\Users\\My\\Desktop\\echarts" + ".png";

            File file = new File(picPath);//圖片文件

 

            try {

                //生成圖片

                OutputStream out = new FileOutputStream(file);//圖片輸出流

                out.write(buffer);

                out.flush();//清空流

                out.close();//關閉流

                ByteArrayOutputStream outStream = new ByteArrayOutputStream(); // 將圖片寫入流中

                BufferedImage bufferImg = ImageIO.read(new File(picPath));

                ImageIO.write(bufferImg, "PNG", outStream);

 

                // 利用HSSFPatriarch將圖片寫入EXCEL

                HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

                //short 寬度:0-12列,從第0列開始,到第12列結束

                //row1-row2:高度:8-31列,從第12行開始,到第35行結束

                HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 0, 12, (short) 12, 35);

                //畫圖

                patriarch.createPicture(anchor, workbook.addPicture(outStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));

            } catch (Exception ex) {

                ex.printStackTrace();

            }

            if (file.exists()) {

                file.delete();//刪除圖片

            }

        }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

注意!!!

如上代碼所示:在前后台傳遞base64編碼的時候,會把 base64編碼 中的 “+” 號換成空格,所以需要先將base64中的空格轉換回來,再進行保存操作!!!

5.debug后控制台打印出該base64編碼存在空格,會導致圖片解編碼失敗,我就是因為這個問題搞了差不多一天,真的是血淋淋的教訓!!!希望大家看了以后不要再重復犯這種錯誤!

 

 

6.沒有把“ ”替換成“+”號會出現以下報錯:

 

7.還有一個問題需要注意,因為base64編碼過長,直接傳入后台會出現以下請求頭過長報錯:

 

8.這個時候我們就需要在application.yml添加一行代碼,重新定義請求頭的大小,如下圖所示:

9.執行完上述步驟后,我們就能把數據以及echarts數據圖表都導出到excel表格中去了,頁面效果圖以及導出后的excel效果圖如下所示:

 

 

 

————————————————

版權聲明:本文為CSDN博主「Keson Z」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_44009447/article/details/105794496

使用Apache POI導出echarts圖表到Excel表格

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM