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

Java實(shí)戰(zhàn)之利用POI生成Excel圖表

 更新時(shí)間:2025年02月27日 14:44:29   作者:小洋酸q糖  
Apache POI是Java生態(tài)中處理Office文檔的核心工具,這篇文章主要為大家詳細(xì)介紹了如何在Excel中創(chuàng)建折線(xiàn)圖,柱狀圖,餅圖等常見(jiàn)圖表,需要的可以參考下

Apache POI是Java生態(tài)中處理Office文檔的核心工具,支持Excel圖表的動(dòng)態(tài)生成與數(shù)據(jù)綁定。本文以POI 5.x版本為例,詳解如何在Excel中創(chuàng)建折線(xiàn)圖、柱狀圖、餅圖等常見(jiàn)圖表,并提供代碼示例與最佳實(shí)踐。

一、環(huán)境配置與依賴(lài)管理

使用POI生成圖表需引入以下核心依賴(lài)(以Maven為例):

<dependency>  
    <groupId>org.apache.poi</groupId>  
    <artifactId>poi-ooxml</artifactId>  
    <version>5.2.3</version>  
</dependency>  

注意:POI 5.x版本與舊版本(如3.x)API差異較大,需避免依賴(lài)沖突

二、數(shù)據(jù)源準(zhǔn)備與工作表構(gòu)建

創(chuàng)建工作簿與工作表

XSSFWorkbook workbook = new XSSFWorkbook();  
XSSFSheet sheet = workbook.createSheet("數(shù)據(jù)表");  

填充數(shù)據(jù)

以國(guó)家GDP數(shù)據(jù)為例,首行寫(xiě)入國(guó)家名稱(chēng),后續(xù)行填充數(shù)值:

// 創(chuàng)建標(biāo)題行  
Row headerRow = sheet.createRow(0);  
headerRow.createCell(0).setCellValue("國(guó)家");  
headerRow.createCell(1).setCellValue("俄羅斯");  
headerRow.createCell(2).setCellValue("中國(guó)");  
// 填充數(shù)據(jù)行  
Row dataRow = sheet.createRow(1);  
dataRow.createCell(0).setCellValue("GDP(萬(wàn)億美元)");  
dataRow.createCell(1).setCellValue(1.78);  
dataRow.createCell(2).setCellValue(17.96);  

三、圖表生成核心步驟

1. 折線(xiàn)圖(Line Chart)

// 定義圖表位置與尺寸  
XSSFDrawing drawing = sheet.createDrawingPatriarch();  
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 20);  

// 創(chuàng)建圖表對(duì)象  
XSSFChart chart = drawing.createChart(anchor);  
chart.setTitleText("國(guó)家GDP趨勢(shì)分析");  

// 綁定數(shù)據(jù)源  
XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 0, 1, 2));  
XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 1, 2));  

// 配置坐標(biāo)軸與樣式  
XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);  
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);  
XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);  

// 添加數(shù)據(jù)系列并渲染  
XDDFLineChartData.Series series = data.addSeries(countries, values);  
series.setTitle("GDP", null);  
chart.plot(data);  

關(guān)鍵點(diǎn):通過(guò)CellRangeAddress綁定數(shù)據(jù)區(qū)域,支持動(dòng)態(tài)擴(kuò)展

2. 柱狀圖(Bar Chart)

柱狀圖與折線(xiàn)圖代碼結(jié)構(gòu)類(lèi)似,僅需修改圖表類(lèi)型與樣式:

XDDFBarChartData data = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);  

可通過(guò)XDDFShapeProperties自定義柱體顏色與間距

3. 餅圖(Pie Chart)

餅圖需單獨(dú)設(shè)置數(shù)據(jù)標(biāo)簽與百分比顯示:

XDDFPieChartData data = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);  
XDDFPieChartData.Series series = data.addSeries(countries, values);  
chart.plot(data);  
// 啟用百分比標(biāo)簽  
chart.getCTChart().getPlotArea().getPieChartArray(0).addNewDLbls().addNewShowPercent().setVal(true);  

四、常見(jiàn)問(wèn)題與優(yōu)化

1.圖表位置偏移

通過(guò)XSSFClientAnchor參數(shù)調(diào)整坐標(biāo)(如col1, row1, col2, row2)控制圖表位置

2.數(shù)據(jù)動(dòng)態(tài)更新

使用CellRangeAddress動(dòng)態(tài)擴(kuò)展數(shù)據(jù)范圍,避免硬編碼。例如:

CellRangeAddress valuesRange = new CellRangeAddress(1, 1, 1, sheet.getRow(1).getLastCellNum());  

3.樣式自定義

  • 坐標(biāo)軸標(biāo)題xAxis.setTitle("國(guó)家")
  • 圖例位置chart.getOrAddLegend().setPosition(LegendPosition.TOP_RIGHT)
  • 顏色設(shè)置:通過(guò)XDDFSolidFillProperties指定RGB值 

五、總結(jié)

通過(guò)POI生成Excel圖表的核心在于數(shù)據(jù)綁定API靈活調(diào)用。開(kāi)發(fā)者需注意:

  • 數(shù)據(jù)區(qū)域需與圖表類(lèi)型匹配(如分類(lèi)軸與數(shù)值軸);
  • 高版本POI(≥5.0)推薦使用XDDF系列API,兼容性更強(qiáng);
  • 復(fù)雜圖表建議封裝工具類(lèi)(如ChartUtils)提升代碼復(fù)用性

到此這篇關(guān)于Java實(shí)戰(zhàn)之利用POI生成Excel圖表的文章就介紹到這了,更多相關(guān)Java POI生成Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Java Socket通信

    深入理解Java Socket通信

    本篇文章主要介紹了深入理解Java Socket,Java中的網(wǎng)絡(luò)通信是通過(guò)Socket實(shí)現(xiàn)的,Socket分為ServerSocket和Socket兩大類(lèi),有興趣的可以了解一下
    2017-02-02
  • SpringBoot在項(xiàng)目中訪(fǎng)問(wèn)靜態(tài)資源步驟分析

    SpringBoot在項(xiàng)目中訪(fǎng)問(wèn)靜態(tài)資源步驟分析

    今天在玩SpringBoot的demo的時(shí)候,放了張圖片在resources目錄下,啟動(dòng)區(qū)訪(fǎng)問(wèn)的時(shí)候,突然好奇是識(shí)別哪些文件夾來(lái)展示靜態(tài)資源的, 為什么有時(shí)候放的文件夾不能顯示,有的卻可以
    2023-01-01
  • java實(shí)現(xiàn)優(yōu)酷視頻地址解析示例代碼分享

    java實(shí)現(xiàn)優(yōu)酷視頻地址解析示例代碼分享

    最近做了一個(gè)在線(xiàn)視頻的下載器,需要解析youku的視頻,獲得真正的視頻地址,現(xiàn)在把解析過(guò)程記錄下來(lái)以供參考
    2014-01-01
  • springboot整合netty實(shí)現(xiàn)心跳檢測(cè)和自動(dòng)重連

    springboot整合netty實(shí)現(xiàn)心跳檢測(cè)和自動(dòng)重連

    本文主要介紹了Spring Boot中整合Netty實(shí)現(xiàn)心跳檢測(cè)和自動(dòng)重連,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Springboot yml如何獲取系統(tǒng)環(huán)境變量的值

    Springboot yml如何獲取系統(tǒng)環(huán)境變量的值

    這篇文章主要介紹了Springboot yml如何獲取系統(tǒng)環(huán)境變量的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot+Redis實(shí)現(xiàn)分布式鎖的深度剖析

    SpringBoot+Redis實(shí)現(xiàn)分布式鎖的深度剖析

    分布式鎖是在分布式系統(tǒng)中協(xié)調(diào)多個(gè)節(jié)點(diǎn)對(duì)共享資源進(jìn)行互斥訪(fǎng)問(wèn)的機(jī)制,這篇文章主要為大家詳細(xì)介紹了如何使用SpringBoot和Redis實(shí)現(xiàn)分布式鎖,感興趣的小伙伴可以了解下
    2026-01-01
  • 詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    這篇文章主要介紹了詳解JAVA調(diào)用WCF服務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • java大數(shù)乘法的簡(jiǎn)單實(shí)現(xiàn) 浮點(diǎn)數(shù)乘法運(yùn)算

    java大數(shù)乘法的簡(jiǎn)單實(shí)現(xiàn) 浮點(diǎn)數(shù)乘法運(yùn)算

    大數(shù)乘法可以進(jìn)行任意大小和精度的整數(shù)和浮點(diǎn)數(shù)的乘法運(yùn)算, 精確度很高, 可以用作經(jīng)融等領(lǐng)域的計(jì)算,這個(gè)是我看了一些資料, 然后自己整理實(shí)現(xiàn)的,簡(jiǎn)單測(cè)試了一下
    2014-01-01
  • java中javaBean與Bean的深入理解

    java中javaBean與Bean的深入理解

    這篇文章主要介紹了java中javaBean與Bean的深入理解的相關(guān)資料,這里說(shuō)明他們的優(yōu)點(diǎn)及使用方法,需要的朋友可以參考下
    2017-08-08
  • java實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲

    java實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

兰州市| 曲阳县| 金平| 兴隆县| 自贡市| 绥化市| 应用必备| 澎湖县| 日喀则市| 陇南市| 襄樊市| 哈巴河县| 伊通| 新巴尔虎左旗| 武陟县| 定南县| 伊吾县| 漳平市| 江阴市| 祁东县| 成武县| 牟定县| 黄大仙区| 上虞市| 册亨县| 永和县| 安义县| 鱼台县| 奉新县| 怀远县| 望都县| 尼玛县| 南岸区| 吴川市| 德清县| 清苑县| 喀喇沁旗| 广西| 兴化市| 哈巴河县| 夏邑县|