生活随笔
收集整理的這篇文章主要介紹了
java读取excel图表模板,修改选值范围
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
自定義目錄標題)
java讀取excel圖表模板,修改選值范圍
梳理一下思路:
首先使用POI讀取excel第一個sheet頁,在sheet頁中獲取到圖表餅狀圖或圓環(huán)圖,修改圖形數(shù)據(jù)并修改選值范圍達到自己需要的表格。
package com
.adc
.da
.util
.utils
;import org
.apache
.poi
.POIXMLDocumentPart
;
import org
.apache
.poi
.ss
.usermodel
.BorderStyle
;
import org
.apache
.poi
.ss
.usermodel
.HorizontalAlignment
;
import org
.apache
.poi
.ss
.usermodel
.VerticalAlignment
;
import org
.apache
.poi
.ss
.util
.CellRangeAddress
;
import org
.apache
.poi
.xssf
.usermodel
.*
;
import org
.openxmlformats
.schemas
.drawingml
.x2006
.chart
.*
;
import javax
.servlet
.ServletOutputStream
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
import java
.io
.File
;
import java
.io
.FileInputStream
;
import java
.io
.OutputStream
;
import java
.util
.ArrayList
;
import java
.util
.Date
;
import java
.util
.List
;
public class ExportExcel {public static void main(String
[]args
){List
<List
<Object>> list
= new ArrayList<>();List
<Object> list_0
= new ArrayList<>();List
<Object> list_1
= new ArrayList<>();HttpServletRequest request
= null
;HttpServletResponse response
= null
;String type
= "1";list_0
.add("");list_0
.add("Estate");list_0
.add("Hatchback");list_0
.add("MPV");list_0
.add("Sedan");list_0
.add("SUV");list_0
.add("VAN");list_1
.add("單價");list_1
.add(0.6);list_1
.add(9.4);list_1
.add(12.3);list_1
.add(35.5);list_1
.add(41.4);list_1
.add(0.9);list
.add(list_0
);list
.add(list_1
);try {pieExcel(request
,response
,type
,list
);} catch (Exception e
) {e
.printStackTrace();}}public static void pieExcel(HttpServletRequest request
, HttpServletResponse response
,String type
,List
<List
<Object>> list
) throws Exception
{String filePath
=null
;if("1".equals(type
)){filePath
= "template/excel/pie.xlsx";}else if("2".equals(type
)){filePath
= "template/excel/donut.xlsx";}File file
= new File(filePath
);FileInputStream tps
= new FileInputStream(file
);XSSFWorkbook wb
= new XSSFWorkbook(tps
);XSSFSheet sheet
= wb
.getSheetAt(0);sheet
.setDefaultColumnWidth((short) (15));XSSFCellStyle cs
= setStyle(wb
);XSSFFont font
= wb
.createFont();font
.setFontName("宋體");font
.setFontHeightInPoints((short) 11);cs
.setFont(font
);XSSFChart chart
;XSSFDrawing drawingPatriarch
= sheet
.getDrawingPatriarch();List
<XSSFChart> charts
= drawingPatriarch
.getCharts();chart
= charts
.get(0);POIXMLDocumentPart xlsPart
= chart
.getRelations().get(0);CTChart ctChart
= chart
.getCTChart();CTPlotArea plotArea
= ctChart
.getPlotArea();CTPieSer ser
= null
;if("1".equals(type
)){CTPieChart pieChartArray
= plotArea
.getPieChartArray(0);ser
= pieChartArray
.getSerArray(0);}else if("2".equals(type
)){CTDoughnutChart doughnutChartArray
= plotArea
.getDoughnutChartArray(0);ser
= doughnutChartArray
.getSerArray(0);}CTSerTx tx
= ser
.getTx();tx
.getStrRef().getStrCache().getPtArray(0).setV("ddd");CTAxDataSource cat
= ser
.getCat();CTStrData strData
= cat
.getStrRef().getStrCache();CTNumDataSource val
= ser
.getVal();CTNumData numData
= val
.getNumRef().getNumCache();strData
.setPtArray(null
); numData
.setPtArray(null
); int idx
= 0;int rownum
= 0;XSSFRow row_0
= sheet
.createRow(0);XSSFRow row_1
= sheet
.createRow(1);for (int i
= 0; i
< list
.get(0).size(); i
++) {CTNumVal numVal
= numData
.addNewPt();numVal
.setIdx(idx
);numVal
.setV(list
.get(0).get(i
).toString());CTStrVal sVal
= strData
.addNewPt();sVal
.setIdx(idx
);sVal
.setV(list
.get(1).get(i
).toString());idx
++;rownum
++;row_0
.createCell(i
).setCellValue(list
.get(0).get(i
).toString());Object o
= list
.get(1).get(i
);if(o
instanceof Double){row_1
.createCell(i
).setCellValue((Double
) o
);}else {row_1
.createCell(i
).setCellValue((String
) o
);}}numData
.getPtCount().setVal(idx
);strData
.getPtCount().setVal(idx
);String numDataRange
= new CellRangeAddress(1, 1, 1, rownum
-1).formatAsString(sheet
.getSheetName(), true);val
.getNumRef().setF(numDataRange
);String axisDataRange
= new CellRangeAddress(0, 0, 1, rownum
-1).formatAsString(sheet
.getSheetName(), true);cat
.getStrRef().setF(axisDataRange
);OutputStream xlsOut
= xlsPart
.getPackagePart().getOutputStream();wb
.write(xlsOut
);xlsOut
.close();String fileName
= "";String nowDateStr
= DateUtils
.dateToString(new Date(), "yyyyMMdd");String excelName
= "";excelName
= fileName
+ nowDateStr
;String headStr
= "attachment; filename=" + excelName
+ ".xlsx";response
.setHeader("Content-Disposition", headStr
);ServletOutputStream out
= response
.getOutputStream();wb
.write(out
);out
.close();}public static XSSFCellStyle
setStyle(XSSFWorkbook wb
){XSSFCellStyle cs
= wb
.createCellStyle();cs
.setAlignment(HorizontalAlignment
.CENTER
);cs
.setVerticalAlignment(VerticalAlignment
.CENTER
);cs
.setBorderBottom(BorderStyle
.THIN
);cs
.setBorderLeft(BorderStyle
.THIN
);cs
.setBorderRight(BorderStyle
.THIN
);cs
.setBorderTop(BorderStyle
.THIN
);cs
.setAlignment(HorizontalAlignment
.CENTER_SELECTION
);cs
.setVerticalAlignment(VerticalAlignment
.CENTER
);cs
.setWrapText(true);return cs
;}
}
總結
以上是生活随笔為你收集整理的java读取excel图表模板,修改选值范围的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。