使用POI在Excel中动态生成图表工具类

使用POI在Excel中动态生成图表工具类

由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干啥,所以只好换成了开源免费的poi,经过两个星期的研究终于完成了一个工具类。
废话不多说直接上代码:

依赖

   <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>xdocreport</artifactId><version>1.0.6</version></dependency><dependency>  <groupId> fr.opensagres.xdocreport</groupId>  <artifactId> org.apache.poi.xwpf.converter.core</artifactId>  <version> 1.0.6</version>  </dependency>  <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId><version>1.0.6</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency>

代码:
package com.jsfund.crm.common.utils;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Chart;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFDrawing;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTDLbls;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLegend;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarkerStyle;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
import org.openxmlformats.schemas.drawingml.x2006.chart.STAxPos;
import org.openxmlformats.schemas.drawingml.x2006.chart.STBarDir;
import org.openxmlformats.schemas.drawingml.x2006.chart.STBarGrouping;
import org.openxmlformats.schemas.drawingml.x2006.chart.STCrossBetween;
import org.openxmlformats.schemas.drawingml.x2006.chart.STCrosses;
import org.openxmlformats.schemas.drawingml.x2006.chart.STLblAlgn;
import org.openxmlformats.schemas.drawingml.x2006.chart.STTickMark;
import org.openxmlformats.schemas.drawingml.x2006.chart.STBarGrouping.Enum;
import org.openxmlformats.schemas.drawingml.x2006.chart.STDispBlanksAs;
import org.openxmlformats.schemas.drawingml.x2006.chart.STGrouping;
import org.openxmlformats.schemas.drawingml.x2006.chart.STLegendPos;
import org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle;
import org.openxmlformats.schemas.drawingml.x2006.chart.STOrientation;
import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;

import com.jsfund.crm.common.bean.BaseFormMap;

public class ExcelChartUtil {

public static void main(String[] args) throws Exception {boolean result=false;List<BaseFormMap> dataList=new ArrayList<BaseFormMap>();//数据List<String> fldNameArr = new ArrayList<String>();// 字段名List<String> titleArr = new ArrayList<String>();// 标题BaseFormMap baseFormMap=new BaseFormMap();List<String> showtailArr=new ArrayList<String>();List<String> ispercentArr=new ArrayList<String>();baseFormMap.put("value1", "股票");baseFormMap.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap.put("value4", new BigDecimal(new java.util.Random().nextDouble()));BaseFormMap baseFormMap1=new BaseFormMap();baseFormMap1.put("value1", "货币型基金");baseFormMap1.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap1.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap1.put("value4", new BigDecimal(new java.util.Random().nextDouble()));BaseFormMap baseFormMap2=new BaseFormMap();baseFormMap2.put("value1", "可转债");baseFormMap2.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap2.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap2.put("value4", new BigDecimal(new java.util.Random().nextDouble()));BaseFormMap baseFormMap3=new BaseFormMap();baseFormMap3.put("value1", "买入返售");baseFormMap3.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap3.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap3.put("value4", new BigDecimal(new java.util.Random().nextDouble()));BaseFormMap baseFormMap4=new BaseFormMap();baseFormMap4.put("value1", "通知存款");baseFormMap4.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap4.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap4.put("value4", new BigDecimal(new java.util.Random().nextDouble()));BaseFormMap baseFormMap5=new BaseFormMap();baseFormMap5.put("value1", "当月累计");baseFormMap5.put("value2", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap5.put("value3", new BigDecimal(new java.util.Random().nextDouble()));baseFormMap5.put("value4", new BigDecimal(new java.util.Random().nextDouble()));fldNameArr.add("value1");fldNameArr.add("value2");fldNameArr.add("value3");fldNameArr.add("value4");titleArr.add("类型");titleArr.add("买入");titleArr.add("卖出");titleArr.add("分红");showtailArr.add("0");showtailArr.add("2");showtailArr.add("2");showtailArr.add("2");ispercentArr.add("0");ispercentArr.add("1");ispercentArr.add("1");ispercentArr.add("1");dataList.add(baseFormMap);dataList.add(baseFormMap1);dataList.add(baseFormMap2);dataList.add(baseFormMap3);dataList.add(baseFormMap4);dataList.add(baseFormMap5);SXSSFWorkbook wb = new SXSSFWorkbook();SXSSFSheet sheet = wb.createSheet("Sheet1");result=createChart(wb,sheet,10,"bar",STBarGrouping.STACKED,false,false,dataList, fldNameArr, titleArr,showtailArr,ispercentArr);result=createChart(wb,sheet,10+dataList.size()+12,"bar",STBarGrouping.CLUSTERED,true,true,dataList, fldNameArr, titleArr,showtailArr,ispercentArr);//System.out.println(ctChart);System.out.println(result);FileOutputStream fileOut = new FileOutputStream("D://BarChart.xlsx");wb.write(fileOut);fileOut.close();
}/*** @Description: 创建Excel数据* @param wb:工作薄* @param sheet:wb.createSheet();* @param sheetName:sheet名称* @param dataList* @param fldNameArr* @param titleArr* @param showtailArr* @param ispercentArr* @param position:从第几行开始(0:就是第一行)* @return boolean*/
public static boolean refreshChartExcel(SXSSFWorkbook wb,SXSSFSheet sheet,List<BaseFormMap> dataList,List<String> fldNameArr,List<String> titleArr,List<String> showtailArr,List<String> ispercentArr,int position) {boolean result = true;//样式准备CellStyle style = wb.createCellStyle();style.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);style.setBorderBottom(BorderStyle.THIN); //下边框style.setBorderLeft(BorderStyle.THIN);//左边框style.setBorderTop(BorderStyle.THIN);//上边框style.setBorderRight(BorderStyle.THIN);//右边框style.setAlignment(HorizontalAlignment.CENTER);CellStyle style1 = wb.createCellStyle();style1.setBorderBottom(BorderStyle.THIN); //下边框style1.setBorderLeft(BorderStyle.THIN);//左边框style1.setBorderTop(BorderStyle.THIN);//上边框style1.setBorderRight(BorderStyle.THIN);//右边框style1.setAlignment(HorizontalAlignment.CENTER);CellStyle cellStyle = wb.createCellStyle();cellStyle.setBorderTop(BorderStyle.THIN);//上边框cellStyle.setBorderBottom(BorderStyle.THIN); //下边框cellStyle.setBorderLeft(BorderStyle.THIN);//左边框cellStyle.setBorderRight(BorderStyle.THIN);//右边框cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平对齐方式//cellStyle.setVerticalAlignment(VerticalAlignment.TOP);//垂直对齐方式//根据数据创建excel第一行标题行for (int i = 0; i < titleArr.size(); i++) {if(sheet.getRow(position)==null){sheet.createRow(position).createCell(i).setCellValue(titleArr.get(i)==null?"":titleArr.get(i));}else{sheet.getRow(position).createCell(i).setCellValue(titleArr.get(i)==null?"":titleArr.get(i));}//标题行创建背景颜色sheet.getRow(position).getCell(i).setCellStyle(style);}//遍历数据行for (int i = 0; i < dataList.size(); i++) {BaseFormMap baseFormMap = dataList.get(i);//数据行//fldNameArr字段属性for (int j = 0; j < fldNameArr.size(); j++) {if(sheet.getRow(position+i+1)==null){if(j==0){try {sheet.createRow(position+i+1).createCell(j).setCellValue(baseFormMap.getStr(fldNameArr.get(j))==null?"":baseFormMap.getStr(fldNameArr.get(j)));} catch (Exception e) {if(baseFormMap.getStr(fldNameArr.get(j))==null){sheet.createRow(position+i+1).createCell(j).setCellValue("");}else{sheet.createRow(position+i+1).createCell(j).setCellValue(baseFormMap.getDate(fldNameArr.get(j)));}}}//标题行创建背景颜色sheet.getRow(position+i+1).getCell(j).setCellStyle(style1);}else{BigDecimal b=baseFormMap.getBigDecimal(fldNameArr.get(j));double value=0d;if(b!=null){value=b.doubleValue();}if(value==0){sheet.getRow(position+i+1).createCell(j);}else{sheet.getRow(position+i+1).createCell(j).setCellValue(baseFormMap.getBigDecimal(fldNameArr.get(j)).doubleValue());}if("1".equals(ispercentArr.get(j))){//是否设置百分比// 设置Y轴的数字为百分比样式显示StringBuilder sb=new StringBuilder();if("0".equals(showtailArr.get(j))){//保留几位小数sb.append("0");if("1".equals(ispercentArr.get(j))){//是否百分比sb.append("%");}}else{sb.append("0.");for(int k=0;k<Integer.parseInt(showtailArr.get(j));k++){sb.append("0");}if("1".equals(ispercentArr.get(j))){//是否百分比sb.append("%");}}cellStyle.setDataFormat(wb.createDataFormat().getFormat(sb.toString()));sheet.getRow(position+i+1).getCell(j).setCellStyle(cellStyle);}else{//是否设置百分比// 设置Y轴的数字为百分比样式显示StringBuilder sb=new StringBuilder();if("0".equals(showtailArr.get(j))){//保留几位小数sb.append("0");}else{sb.append("0.");for(int k=0;k<Integer.parseInt(showtailArr.get(j));k++){sb.append("0");}}cellStyle.setDataFormat(wb.createDataFormat().getFormat(sb.toString()));sheet.getRow(position+i+1).getCell(j).setCellStyle(cellStyle);}}}}return result;
}/*** @Description:创建动态图* @param wb* @param sheet* @param sheetName* @param curRow:当前行号* @param type:图类型* @param group:柱状图类型 @see STBarGrouping* @param isLegend:是否添加图注* @param isvalAxis:是否添加Y左轴* @param dataList:数据* @param fldNameArr:属性* @param titleArr:标题* @param showtailArr:保留几位小数* @param ispercentArr:是否百分比* @return*/
public static boolean createChart(SXSSFWorkbook wb,SXSSFSheet sheet, int curRow,String type, Enum group,boolean isLegend,boolean isvalAxis, List<BaseFormMap> dataList, List<String> fldNameArr, List<String> titleArr,List<String> showtailArr,List<String> ispercentArr) {boolean result=false;String sheetName=sheet.getSheetName();//动态表sheet刷新result=refreshChartExcel(wb, sheet,dataList, fldNameArr, titleArr, showtailArr, ispercentArr, curRow);//创建一个画布SXSSFDrawing drawing = sheet.createDrawingPatriarch();//前四个默认0,[0,5]:从0列5行开始;[6,20]:宽度6,20向下扩展到20行//默认宽度(14-8)*12ClientAnchor anchor =null;if(dataList.size()<10){anchor=drawing.createAnchor(0, 0, 0, 0, 0, curRow+dataList.size()+1, 6, curRow+dataList.size()+12);}else{anchor=drawing.createAnchor(0, 0, 0, 0, 0, curRow+dataList.size()+1, (int)Math.round(dataList.size()*0.5), curRow+dataList.size()+12);}//创建一个chart对象Chart chart = drawing.createChart(anchor);CTChart ctChart = ((XSSFChart)chart).getCTChart();CTPlotArea ctPlotArea = ctChart.getPlotArea();if("bar".equals(type)){CTBarChart ctBarChart = ctPlotArea.addNewBarChart();CTBoolean ctBoolean=ctBarChart.addNewVaryColors();ctBarChart.getVaryColors().setVal(true);//设置类型ctBarChart.addNewGrouping().setVal(group);ctBoolean.setVal(true);ctBarChart.addNewBarDir().setVal(STBarDir.COL);//是否添加左侧坐标轴ctChart.addNewDispBlanksAs().setVal(STDispBlanksAs.ZERO);ctChart.addNewShowDLblsOverMax().setVal(true);//设置这两个参数是为了在STACKED模式下生成堆积模式;(standard)标准模式时需要将这两行去掉if("stacked".equals(group.toString())||"percentStacked".equals(group.toString())){ctBarChart.addNewGapWidth().setVal(150);ctBarChart.addNewOverlap().setVal((byte)100);}//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1; i++) {CTBarSer ctBarSer = ctBarChart.addNewSer();CTSerTx ctSerTx = ctBarSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctBarSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   //设置负轴颜色不是白色ctBarSer.addNewInvertIfNegative().setVal(false);//设置标签格式ctBoolean.setVal(false);CTDLbls newDLbls = ctBarSer.addNewDLbls();newDLbls.setShowLegendKey(ctBoolean);ctBoolean.setVal(true);newDLbls.setShowVal(ctBoolean);ctBoolean.setVal(false);newDLbls.setShowCatName(ctBoolean);newDLbls.setShowSerName(ctBoolean);newDLbls.setShowPercent(ctBoolean);newDLbls.setShowBubbleSize(ctBoolean);newDLbls.setShowLeaderLines(ctBoolean);} //telling the BarChart that it has axes and giving them IdsctBarChart.addNewAxId().setVal(123456);ctBarChart.addNewAxId().setVal(123457);//cat axisCTCatAx ctCatAx = ctPlotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(123456); //id of the cat axisCTScaling ctScaling = ctCatAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAx.addNewAxPos().setVal(STAxPos.B);ctCatAx.addNewCrossAx().setVal(123457); //id of the val axisctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAx = ctPlotArea.addNewValAx(); ctValAx.addNewAxId().setVal(123457); //id of the val axisctScaling = ctValAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);//设置位置ctValAx.addNewAxPos().setVal(STAxPos.L);ctValAx.addNewCrossAx().setVal(123456); //id of the cat axisctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//是否删除主左边轴if(isvalAxis){ctValAx.addNewDelete().setVal(false);}else{ctValAx.addNewDelete().setVal(true);}//是否删除横坐标ctCatAx.addNewDelete().setVal(false);//legend图注if(isLegend){CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(false);}}else if("line".equals(type)){CTLineChart ctLineChart = ctPlotArea.addNewLineChart();CTBoolean ctBoolean = ctLineChart.addNewVaryColors();ctLineChart.addNewGrouping().setVal(STGrouping.STANDARD);//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1; i++) {CTLineSer ctLineSer = ctLineChart.addNewSer();CTSerTx ctSerTx = ctLineSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctStrRef.setF(legendDataRange);ctLineSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctLineSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctLineSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);//设置标签格式ctBoolean.setVal(false);CTDLbls newDLbls = ctLineSer.addNewDLbls();newDLbls.setShowLegendKey(ctBoolean);ctBoolean.setVal(true);newDLbls.setShowVal(ctBoolean);ctBoolean.setVal(false);newDLbls.setShowCatName(ctBoolean);newDLbls.setShowSerName(ctBoolean);newDLbls.setShowPercent(ctBoolean);newDLbls.setShowBubbleSize(ctBoolean);newDLbls.setShowLeaderLines(ctBoolean);//是否是平滑曲线CTBoolean addNewSmooth = ctLineSer.addNewSmooth();addNewSmooth.setVal(false);//是否是堆积曲线CTMarker addNewMarker = ctLineSer.addNewMarker();CTMarkerStyle addNewSymbol = addNewMarker.addNewSymbol();addNewSymbol.setVal(STMarkerStyle.NONE);} //telling the BarChart that it has axes and giving them IdsctLineChart.addNewAxId().setVal(123456);ctLineChart.addNewAxId().setVal(123457);//cat axisCTCatAx ctCatAx = ctPlotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(123456); //id of the cat axisCTScaling ctScaling = ctCatAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAx.addNewAxPos().setVal(STAxPos.B);ctCatAx.addNewCrossAx().setVal(123457); //id of the val axisctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAx = ctPlotArea.addNewValAx(); ctValAx.addNewAxId().setVal(123457); //id of the val axisctScaling = ctValAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctValAx.addNewAxPos().setVal(STAxPos.L);ctValAx.addNewCrossAx().setVal(123456); //id of the cat axisctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//是否删除主左边轴if(isvalAxis){ctValAx.addNewDelete().setVal(false);}else{ctValAx.addNewDelete().setVal(true);}//是否删除横坐标ctCatAx.addNewDelete().setVal(false);//legend图注if(isLegend){CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(false);}}else if("bar-line-2".equals(type)){CTBarChart ctBarChart = ctPlotArea.addNewBarChart();CTBoolean ctBoolean=ctBarChart.addNewVaryColors();ctBarChart.getVaryColors().setVal(true);//设置类型ctBarChart.addNewGrouping().setVal(STBarGrouping.CLUSTERED);ctBoolean.setVal(true);ctBarChart.addNewBarDir().setVal(STBarDir.COL);//是否添加左侧坐标轴ctChart.addNewDispBlanksAs().setVal(STDispBlanksAs.ZERO);ctChart.addNewShowDLblsOverMax().setVal(true);//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-2; i++) {CTBarSer ctBarSer = ctBarChart.addNewSer();CTSerTx ctSerTx = ctBarSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctBarSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   //设置负轴颜色不是白色ctBarSer.addNewInvertIfNegative().setVal(false);//设置标签格式ctBoolean.setVal(false);CTDLbls newDLbls = ctBarSer.addNewDLbls();newDLbls.setShowLegendKey(ctBoolean);ctBoolean.setVal(true);newDLbls.setShowVal(ctBoolean);ctBoolean.setVal(false);newDLbls.setShowCatName(ctBoolean);newDLbls.setShowSerName(ctBoolean);newDLbls.setShowPercent(ctBoolean);newDLbls.setShowBubbleSize(ctBoolean);newDLbls.setShowLeaderLines(ctBoolean);} //telling the BarChart that it has axes and giving them IdsctBarChart.addNewAxId().setVal(123456);ctBarChart.addNewAxId().setVal(123457);//telling the BarChart that it has axes and giving them IdsctBarChart.addNewAxId().setVal(123456);ctBarChart.addNewAxId().setVal(123457);//cat axisCTCatAx ctCatAx = ctPlotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(123456); //id of the cat axisCTScaling ctScaling = ctCatAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAx.addNewAxPos().setVal(STAxPos.B);ctCatAx.addNewCrossAx().setVal(123457); //id of the val axisctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAx = ctPlotArea.addNewValAx(); ctValAx.addNewAxId().setVal(123457); //id of the val axisctScaling = ctValAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctValAx.addNewAxPos().setVal(STAxPos.L);ctValAx.addNewCrossAx().setVal(123456); //id of the cat axisctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//是否删除主左边轴if(isvalAxis){ctValAx.addNewDelete().setVal(false);}else{ctValAx.addNewDelete().setVal(true);}//是否删除横坐标ctCatAx.addNewDelete().setVal(false);//legend图注if(isLegend){CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(false);}CTLineChart ctLineChart = ctPlotArea.addNewLineChart();ctLineChart.addNewGrouping().setVal(STGrouping.STANDARD);//创建序列,并且设置选中区域for (int i =1; i < fldNameArr.size()-1; i++) {CTLineSer ctLineSer = ctLineChart.addNewSer();CTSerTx ctSerTx = ctLineSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctStrRef.setF(legendDataRange);ctLineSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctLineSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctLineSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);//是否是平滑曲线CTBoolean addNewSmooth = ctLineSer.addNewSmooth();addNewSmooth.setVal(false);//是否是堆积曲线CTMarker addNewMarker = ctLineSer.addNewMarker();CTMarkerStyle addNewSymbol = addNewMarker.addNewSymbol();addNewSymbol.setVal(STMarkerStyle.NONE);} //telling the BarChart that it has axes and giving them Ids//TODO:写死是否有影响?ctLineChart.addNewAxId().setVal(1234567);ctLineChart.addNewAxId().setVal(1234578);//cat axisCTCatAx ctCatAxline = ctPlotArea.addNewCatAx(); ctCatAxline.addNewAxId().setVal(1234567); //id of the cat axisCTScaling ctScalingline = ctCatAxline.addNewScaling();ctScalingline.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAxline.addNewDelete().setVal(true);ctCatAxline.addNewAxPos().setVal(STAxPos.B);ctCatAxline.addNewMajorTickMark().setVal(STTickMark.OUT);ctCatAxline.addNewMinorTickMark().setVal(STTickMark.NONE);ctCatAxline.addNewAuto().setVal(true);ctCatAxline.addNewLblAlgn().setVal(STLblAlgn.CTR);ctCatAxline.addNewLblOffset().setVal(100);ctCatAxline.addNewNoMultiLvlLbl().setVal(false);ctCatAxline.addNewCrossAx().setVal(1234578); //id of the val axisctCatAxline.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAxline = ctPlotArea.addNewValAx(); ctValAxline.addNewAxId().setVal(1234578); //id of the val axisctScalingline = ctValAxline.addNewScaling();ctScalingline.addNewOrientation().setVal(STOrientation.MIN_MAX);//Y轴右侧坐标true删除,false保留ctValAxline.addNewDelete().setVal(false);ctValAxline.addNewAxPos().setVal(STAxPos.R);ctValAxline.addNewMajorTickMark().setVal(STTickMark.OUT);ctValAxline.addNewMinorTickMark().setVal(STTickMark.NONE);ctValAxline.addNewCrosses().setVal(STCrosses.MAX);ctValAxline.addNewCrossBetween().setVal(STCrossBetween.BETWEEN);ctValAxline.addNewCrossAx().setVal(1234567); //id of the cat axisctValAxline.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);}else if("bar-line-4".equals(type)){CTBarChart ctBarChart = ctPlotArea.addNewBarChart();CTBoolean ctBoolean=ctBarChart.addNewVaryColors();ctBarChart.getVaryColors().setVal(true);//设置类型ctBarChart.addNewGrouping().setVal(STBarGrouping.CLUSTERED);ctBoolean.setVal(true);ctBarChart.addNewBarDir().setVal(STBarDir.COL);//是否添加左侧坐标轴ctChart.addNewDispBlanksAs().setVal(STDispBlanksAs.ZERO);ctChart.addNewShowDLblsOverMax().setVal(true);//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1-2; i++) {CTBarSer ctBarSer = ctBarChart.addNewSer();CTSerTx ctSerTx = ctBarSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctBarSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   //设置负轴颜色不是白色ctBarSer.addNewInvertIfNegative().setVal(false);//设置标签格式ctBoolean.setVal(false);CTDLbls newDLbls = ctBarSer.addNewDLbls();newDLbls.setShowLegendKey(ctBoolean);ctBoolean.setVal(true);newDLbls.setShowVal(ctBoolean);ctBoolean.setVal(false);newDLbls.setShowCatName(ctBoolean);newDLbls.setShowSerName(ctBoolean);newDLbls.setShowPercent(ctBoolean);newDLbls.setShowBubbleSize(ctBoolean);newDLbls.setShowLeaderLines(ctBoolean);} //telling the BarChart that it has axes and giving them IdsctBarChart.addNewAxId().setVal(123456);ctBarChart.addNewAxId().setVal(123457);//telling the BarChart that it has axes and giving them IdsctBarChart.addNewAxId().setVal(123456);ctBarChart.addNewAxId().setVal(123457);//cat axisCTCatAx ctCatAx = ctPlotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(123456); //id of the cat axisCTScaling ctScaling = ctCatAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAx.addNewAxPos().setVal(STAxPos.B);ctCatAx.addNewCrossAx().setVal(123457); //id of the val axisctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAx = ctPlotArea.addNewValAx(); ctValAx.addNewAxId().setVal(123457); //id of the val axisctScaling = ctValAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctValAx.addNewAxPos().setVal(STAxPos.L);ctValAx.addNewCrossAx().setVal(123456); //id of the cat axisctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//是否删除主左边轴if(isvalAxis){ctValAx.addNewDelete().setVal(false);}else{ctValAx.addNewDelete().setVal(true);}//是否删除横坐标ctCatAx.addNewDelete().setVal(false);//legend图注if(isLegend){CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(false);}CTLineChart ctLineChart = ctPlotArea.addNewLineChart();ctLineChart.addNewGrouping().setVal(STGrouping.STANDARD);//创建序列,并且设置选中区域for (int i = 2; i < fldNameArr.size()-1; i++) {CTLineSer ctLineSer = ctLineChart.addNewSer();CTSerTx ctSerTx = ctLineSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctStrRef.setF(legendDataRange);ctLineSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctLineSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctLineSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);//是否是平滑曲线CTBoolean addNewSmooth = ctLineSer.addNewSmooth();addNewSmooth.setVal(false);//是否是堆积曲线CTMarker addNewMarker = ctLineSer.addNewMarker();CTMarkerStyle addNewSymbol = addNewMarker.addNewSymbol();addNewSymbol.setVal(STMarkerStyle.NONE);} //telling the BarChart that it has axes and giving them Ids//TODO:写死是否有影响?ctLineChart.addNewAxId().setVal(1234567);ctLineChart.addNewAxId().setVal(1234578);//cat axisCTCatAx ctCatAxline = ctPlotArea.addNewCatAx(); ctCatAxline.addNewAxId().setVal(1234567); //id of the cat axisCTScaling ctScalingline = ctCatAxline.addNewScaling();ctScalingline.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAxline.addNewDelete().setVal(true);ctCatAxline.addNewAxPos().setVal(STAxPos.B);ctCatAxline.addNewMajorTickMark().setVal(STTickMark.OUT);ctCatAxline.addNewMinorTickMark().setVal(STTickMark.NONE);ctCatAxline.addNewAuto().setVal(true);ctCatAxline.addNewLblAlgn().setVal(STLblAlgn.CTR);ctCatAxline.addNewLblOffset().setVal(100);ctCatAxline.addNewNoMultiLvlLbl().setVal(false);ctCatAxline.addNewCrossAx().setVal(1234578); //id of the val axisctCatAxline.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAxline = ctPlotArea.addNewValAx(); ctValAxline.addNewAxId().setVal(1234578); //id of the val axisctScalingline = ctValAxline.addNewScaling();ctScalingline.addNewOrientation().setVal(STOrientation.MIN_MAX);ctValAxline.addNewDelete().setVal(false);ctValAxline.addNewAxPos().setVal(STAxPos.R);ctValAxline.addNewMajorTickMark().setVal(STTickMark.OUT);ctValAxline.addNewMinorTickMark().setVal(STTickMark.NONE);ctValAxline.addNewCrosses().setVal(STCrosses.MAX);ctValAxline.addNewCrossBetween().setVal(STCrossBetween.BETWEEN);ctValAxline.addNewCrossAx().setVal(1234567); //id of the cat axisctValAxline.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);}else if("pie".equals(type)){//pieCTPieChart ctPieChart = ctPlotArea.addNewPieChart();CTBoolean ctBoolean = ctPieChart.addNewVaryColors();//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1; i++) {CTPieSer ctPieSer = ctPieChart.addNewSer();CTSerTx ctSerTx = ctPieSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctPieSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctPieSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctPieSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);ctPieSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   //设置标签格式ctBoolean.setVal(true);} //legend图注CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(true);}else if("pie3D".equals(type)){//pie3DCTPie3DChart ctPie3DChart = ctPlotArea.addNewPie3DChart();CTBoolean ctBoolean = ctPie3DChart.addNewVaryColors();//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1; i++) {CTPieSer ctPieSer = ctPie3DChart.addNewSer();CTSerTx ctSerTx = ctPieSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctPieSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctPieSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctPieSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);ctPieSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   //设置标签格式ctBoolean.setVal(true);} //legend图注CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(true);}else{//areaCTAreaChart ctAreaChart = ctPlotArea.addNewAreaChart();CTBoolean ctBoolean = ctAreaChart.addNewVaryColors();ctAreaChart.addNewGrouping().setVal(STGrouping.STANDARD);//创建序列,并且设置选中区域for (int i = 0; i < fldNameArr.size()-1; i++) {CTAreaSer ctAreaSer = ctAreaChart.addNewSer();CTSerTx ctSerTx = ctAreaSer.addNewTx();//图例区CTStrRef ctStrRef = ctSerTx.addNewStrRef();String legendDataRange = new CellRangeAddress(curRow,curRow, i+1, i+1).formatAsString(sheetName, true);ctStrRef.setF(legendDataRange);ctStrRef.setF(legendDataRange);ctAreaSer.addNewIdx().setVal(i);  //横坐标区 CTAxDataSource cttAxDataSource = ctAreaSer.addNewCat();ctStrRef = cttAxDataSource.addNewStrRef();String axisDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), 0, 0).formatAsString(sheetName, true);ctStrRef.setF(axisDataRange); //数据区域CTNumDataSource ctNumDataSource = ctAreaSer.addNewVal();CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();String numDataRange = new CellRangeAddress(curRow+1, curRow+dataList.size(), i+1, i+1).formatAsString(sheetName, true);ctNumRef.setF(numDataRange);//设置标签格式ctBoolean.setVal(false);CTDLbls newDLbls = ctAreaSer.addNewDLbls();newDLbls.setShowLegendKey(ctBoolean);ctBoolean.setVal(true);newDLbls.setShowVal(ctBoolean);ctBoolean.setVal(false);newDLbls.setShowCatName(ctBoolean);newDLbls.setShowSerName(ctBoolean);newDLbls.setShowPercent(ctBoolean);newDLbls.setShowBubbleSize(ctBoolean);newDLbls.setShowLeaderLines(ctBoolean);/*     //是否是平滑曲线CTBoolean addNewSmooth = ctAreaSer.addNewSmooth();addNewSmooth.setVal(false);//是否是堆积曲线CTMarker addNewMarker = ctAreaSer.addNewMarker();CTMarkerStyle addNewSymbol = addNewMarker.addNewSymbol();addNewSymbol.setVal(STMarkerStyle.NONE);*/} //telling the BarChart that it has axes and giving them IdsctAreaChart.addNewAxId().setVal(123456);ctAreaChart.addNewAxId().setVal(123457);//cat axisCTCatAx ctCatAx = ctPlotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(123456); //id of the cat axisCTScaling ctScaling = ctCatAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctCatAx.addNewAxPos().setVal(STAxPos.B);ctCatAx.addNewCrossAx().setVal(123457); //id of the val axisctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//val axisCTValAx ctValAx = ctPlotArea.addNewValAx(); ctValAx.addNewAxId().setVal(123457); //id of the val axisctScaling = ctValAx.addNewScaling();ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);ctValAx.addNewAxPos().setVal(STAxPos.L);ctValAx.addNewCrossAx().setVal(123456); //id of the cat axisctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);//是否删除主左边轴if(isvalAxis){ctValAx.addNewDelete().setVal(false);}else{ctValAx.addNewDelete().setVal(true);}//是否删除横坐标ctCatAx.addNewDelete().setVal(false);//legend图注if(isLegend){CTLegend ctLegend = ctChart.addNewLegend();ctLegend.addNewLegendPos().setVal(STLegendPos.B);ctLegend.addNewOverlay().setVal(false);}}return result;
}

}

使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)相关推荐

  1. springboot中动态获取bean工具类

    在springmvc或者springboot的项目中,经常遇到需要获取其他的bean的类,从而使用该bean内部的一些方法,以供业务调用,我们知道,在spring项目中,某个被spring管理的类要调 ...

  2. word文档中动态生成excel表格(基金公告系列讲解)

    1.本博文仅为了将之前工作中动态生成XBRL文件需求中word文档动态生成excel部分进行了实现(虽然隔着时间比较久),闲暇之余的考虑,应对大批量文件生成时可采用定时任务+多线程技术+redis队列 ...

  3. poi导出excel文件,并生成原生图表(包括折线图,柱状图,饼状图,面积图)

    前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大牛谅解. 需要 ...

  4. 计算机微图表的类型,说说Excel中的微图表

    原标题:说说Excel中的微图表 都说文不如表,表不如图.图表作为Excel中重要的数据可视化处理工具,其数据展现力是其他应用所无法比拟的. 但是常规图表也有先天不足之处:独立于单元格之外,无法与单元 ...

  5. php mysql echarts动态生成图表

    php mysql echarts动态生成图表,数据库和表格使用的java Servlet echarts 图表生成的一样数据,不知道的看我前面一篇博文:需要两个文件完成 1. 数据获取文件 week ...

  6. python批量读取excel表格数据_Python读取Excel数据并生成图表过程解析

    一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用Excel实现的.但数据行多后,图表大小调整总是不太方便,一般只能通过缩放比例解决. 二.需求实现目标 通过 ...

  7. Excel中智能生成序号,删除序号可自动(更新)接上

    Excel中智能生成序号,删除序号可自动(更新)接上 目录 Excel中智能生成序号,删除序号可自动(更新)接上 1.在序号单元格中输入公式[=SUBTOTAL(103,$B$2:B2)] 2.鼠标放 ...

  8. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

  9. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

最新文章

  1. Zabbix-2.2.4,显示中文语言的选项方法
  2. python切片操作例题_Python之切片操作
  3. 从零开始学习docker(十二)介绍Docker Compose基本使用
  4. tq3358 linux 串口驱动编程,TQ335x——spidev驱动的生成
  5. hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理
  6. linux spf13 vim安装,Linux 下安装 spf13-VIM
  7. Java多线程(十):BlockingQueue实现生产者消费者模型
  8. leetcode-反转整数
  9. re: Asp.net常用的51个代码(非常实用)(转)
  10. Adobe Flash Player32 离线安装包及菁苗软件打开白屏的解决方法
  11. 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...
  12. SVN更新操作提示需要清理操作,清理操作提示乱码,更新SVN失败【解决方案】
  13. DLL加载: Debug版本正常加载,Release版本LoadLibrary加载失败,返回错误126
  14. 如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)
  15. 高新技术企业知识产权评分细则。
  16. 绘画教程:日式温泉场景怎么画?露天浴场的正确画法!
  17. maven移除全部依赖写法 exclude
  18. gn、ninja的安装-Ubuntu18.04
  19. 【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)
  20. ctfshow-网络迷踪-密集恐惧( 世界上最大的飞机墓地)

热门文章

  1. 项目管理-商业价值论证
  2. matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...
  3. 手机视频直播系统源码,直播平台用户登陆签到分析
  4. 【java如何截取@前面的字符串】
  5. 计算机毕业设计ssm软件项目Bug管理系统612ed系统+程序+源码+lw+远程部署
  6. win10安装centos7、安装显卡驱动和cuda、安装mpich全流程
  7. QG工作室2011年招新通知(附报名表)
  8. C语言-计算Fibonacci数列,直到某项大于1000为止,并输出该项的值。
  9. Ignition Perspective Design Tips
  10. 微信小程序体验使用方法