精华内容
下载资源
问答
  • 请教示例外码,最好能带注释的,还有就是数据并不确定能有多少个,我先做的事把数据写进EXCEL表格中,然后生成折线图,所以请教大神如何生成折线图
  • 纵坐标轴为fp值的折线图,请指点迷津! 我的代码: import pandas as pd from matplotlib import pyplot as plt io = 'D:\python\ofp analysis1.xls' df = pd.read_excel(io, ...
  • 使用Apache poi生成excel并绘制折线统计,扇形统计功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左...

    使用Apache poi生成excel并绘制折线统计图,扇形统计图

    使用Apache poi生成excel并绘制折线统计图,扇形统计图

    1.Gradle dependencies

    	// https://mvnrepository.com/artifact/org.apache.poi/poi
    	compile group: 'org.apache.poi', name: 'poi', version: '4.0.1'
    	// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
    	compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.1'
    	// https://mvnrepository.com/artifact/org.projectlombok/lombok
    	compile group: 'org.projectlombok', name: 'lombok', version: '1.18.4'
    

    2.import

    	import java.awt.Color;
    	import java.io.File;
    	import java.io.FileOutputStream;
    	import java.io.IOException;
    	import java.io.OutputStream;
    	import java.util.HashMap;
    	import java.util.List;
    	import java.util.Map;
    	
    	import org.apache.poi.ss.usermodel.BorderStyle;
    	import org.apache.poi.ss.usermodel.Cell;
    	import org.apache.poi.ss.usermodel.FillPatternType;
    	import org.apache.poi.ss.usermodel.Row;
    	import org.apache.poi.ss.util.CellRangeAddress;
    	import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
    	import org.apache.poi.xddf.usermodel.chart.AxisPosition;
    	import org.apache.poi.xddf.usermodel.chart.ChartTypes;
    	import org.apache.poi.xddf.usermodel.chart.LegendPosition;
    	import org.apache.poi.xddf.usermodel.chart.MarkerStyle;
    	import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
    	import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
    	import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
    	import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
    	import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData;
    	import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
    	import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
    	import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    	import org.apache.poi.xssf.usermodel.XSSFChart;
    	import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
    	import org.apache.poi.xssf.usermodel.XSSFColor;
    	import org.apache.poi.xssf.usermodel.XSSFDrawing;
    	import org.apache.poi.xssf.usermodel.XSSFFont;
    	import org.apache.poi.xssf.usermodel.XSSFSheet;
    	import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTLegend;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef;
    	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.CTSerTx;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef;
    	import org.openxmlformats.schemas.drawingml.x2006.chart.STLegendPos;
    	import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
    	import org.springframework.stereotype.Service;
    	
    	import lombok.extern.slf4j.Slf4j;
    

    3.class

    	public class MyExcleChart2{
    	
    	private static Color titleBackColor = new Color(155,194,230);	//表头背景色
    
    	public static void doWork(List<String> title,List<String> styleList, Map<String, List<Object>> day2ColValueList, File file,
    			String sheetName,XSSFWorkbook wb,int dateNum) throws IOException {
    		OutputStream out = null;
    		try{
    			int sheetIndex = wb.getSheetIndex(sheetName);
    			if(sheetIndex >= 0){
    				wb.removeSheetAt(sheetIndex);
    			}
    			int sheetNum = wb.getNumberOfSheets();
    			XSSFSheet sheet = wb.createSheet();
    			wb.setSheetName(sheetNum, sheetName);
        		out = new FileOutputStream(file);    
    
    			//设置内容样式
        		XSSFCellStyle  style = setBorder(wb);
    			
    			//设置表头字体
    			XSSFFont font = wb.createFont();
    			font.setBold(true);	//加粗
    			//设置表头样式
    			XSSFCellStyle headStyle = setBorder(wb);
    			headStyle.setFillForegroundColor(new XSSFColor(titleBackColor));
    			headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    			headStyle.setFont(font);
    			
    			//隐藏列
        		hiddenColumn(sheet,sheetName);
    			
    			Row row;
    			Cell cell = null;
    			row = sheet.createRow(0);
    			//写入表头
    			int titleColIndex=0;
                for(String t:title) {
                	cell = row.createCell((short) titleColIndex);
                	cell.setCellValue(t);
                	cell.setCellStyle(headStyle);
                	titleColIndex++;
                } 
                //写入数据
                int rowIndex = 1;
                for(String key:day2ColValueList.keySet()){
                	row = sheet.createRow(rowIndex);
                	
                	List<Object> dataList = day2ColValueList.get(key);
                	cell = row.createCell(0);
                	cell.setCellStyle(style);
                	cell.setCellValue(rowIndex);
                	
                	int cellIndex = 1;
                	for(Object s : dataList){
                		//填充单元格
                		String cellstyle = styleList.get(dataList.indexOf(s)+1);
                		cell = row.createCell(cellIndex);
                		cell.setCellStyle(style);
                		//此处可以对特殊的行进行处理
                		if("speciaRowName".equals(key)&&cellIndex>9){
                			cell = row.createCell(0); cell.setCellStyle(style); cell.setCellValue("speciaRowName");
                			cell = row.createCell(1); cell.setCellStyle(style); cell.setCellValue("");
                			cell = row.createCell(2); cell.setCellStyle(style); cell.setCellValue("");
                			cell = row.createCell(3); cell.setCellStyle(style); cell.setCellValue("");
                			cell = row.createCell(4); cell.setCellStyle(style); cell.setCellValue("");
                			cell = row.createCell(cellIndex); cell.setCellStyle(style); double dble = (double)s; cell.setCellValue(dble);
                		}else if("int".equals(cellstyle)&&null!=s){
                			int num = (int) s;
                			cell.setCellValue(num);
                		}else if("double".equals(cellstyle)&&null!=s){
                			double dble = (double)s;
                			cell.setCellValue(dble);
                		}else{
                			cell.setCellValue(null==s?"":(String)s);
                		}
                		cellIndex ++;
                	}
                	rowIndex ++;
                }
                //绘制图表
                if(day2ColValueList.size()>0){
                	drawChart(sheet, sheetName, day2ColValueList, titleColIndex,dateNum);
                }
                wb.write(out);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {  
    		    try {
    				out.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}  
    	}
    	
    	private static void drawChart(XSSFSheet sheet, String sheetName, Map<String, List<Object>> day2ColValueList,
    			int titleSize,int dateNum) {
    		Map<String, Integer> paramMap = new HashMap<String, Integer>();// 折线图入参
    		Map<String, Object> pieParamMap = new HashMap<String, Object>();// 扇形图入参
    		//此处可以分sheet处理数据
    		if ("sheetname1".equals(sheetName)) {//sheetname1,需要显示折线图和扇形图
    			paramMap.put("numstartcol", 5);
    			paramMap.put("numendcol", 5+dateNum-1);
    			paramMap.put("prostartcol", 5+dateNum);
    			paramMap.put("proendcol", 5+dateNum+dateNum-1);
    			// 业务汇总表,需要统计身份核查、高清人像、银行卡、手机实名四个业务的折线图
    			for (String key : day2ColValueList.keySet()) {
    				if ("类型1业务1".equals(key)) {// 人像比对认证走势折线图
    					// 折线图x轴单位起止列(numstartcol,numendcol),以及计费笔数数据所在行列
    					paramMap.put("col1", 0);
    					paramMap.put("col2", 7);
    					paramMap.put("row1", day2ColValueList.size()+2);
    					paramMap.put("row2", day2ColValueList.size()+19);
    					paramMap.put("numstartrow", 1);
    					paramMap.put("numendrow", 1);
    					paramMap.put("numstartrow2", 2);
    					paramMap.put("numendrow2", 2);
    					// 折线图净收入所在行列
    					paramMap.put("prostartrow", 1);
    					paramMap.put("proendrow", 1);
    					paramMap.put("prostartrow2", 2);
    					paramMap.put("proendrow2", 2);
    					drawLineChart(sheet, "业务1", paramMap);
    				} else if ("类型1业务2".equals(key)) {// 银行卡认证走势折线图
    					paramMap.put("col1", 8);
    					paramMap.put("col2", 15);
    					paramMap.put("row1", day2ColValueList.size()+2);
    					paramMap.put("row2", day2ColValueList.size()+19);
    					paramMap.put("numstartrow", 3);
    					paramMap.put("numendrow", 3);
    					paramMap.put("numstartrow2", 4);
    					paramMap.put("numendrow2", 4);
    					paramMap.put("prostartrow", 3);
    					paramMap.put("proendrow", 3);
    					paramMap.put("prostartrow2", 4);
    					paramMap.put("proendrow2", 4);
    					drawLineChart(sheet, "业务2", paramMap);
    				} 
    			}
    			//柱状图
    			paramMap.put("col1", 15);
    			paramMap.put("col2", 23);
    			paramMap.put("row1", day2ColValueList.size()+2);
    			paramMap.put("row2", day2ColValueList.size()+19);
    			paramMap.put("numstartrow", 1);
    			paramMap.put("numendrow", 1);
    			paramMap.put("prostartrow", 1);
    			paramMap.put("proendrow", 1);
    //			drawBarChart(sheet, "业务1", paramMap);
    			
    			// 扇形图
    			pieParamMap.put("col1", 0);
    			pieParamMap.put("col2", 7);
    			pieParamMap.put("row1", day2ColValueList.size()+20);
    			pieParamMap.put("row2", day2ColValueList.size()+39);
    			pieParamMap.put("data1", "sheetname1!$C$1");
    			pieParamMap.put("data2", "sheetname1!$C$2:$C$3");
    			pieParamMap.put("data3", "sheetname1!$D$2:$D$3");
    			drawPieChart(sheet, "类型1各业务交易量占比", pieParamMap);
    			pieParamMap.put("col1", 8);
    			pieParamMap.put("col2", 15);
    			pieParamMap.put("data3", "sheetname1!$E$2:$E$3");
    			drawPieChart(sheet, "类型1各业务净收入占比", pieParamMap);
    			pieParamMap.put("col1", 0);
    			pieParamMap.put("col2", 7);
    			pieParamMap.put("row1", day2ColValueList.size()+40);
    			pieParamMap.put("row2", day2ColValueList.size()+59);
    			pieParamMap.put("data2", "sheetname1!$C$4:$C$5");
    			pieParamMap.put("data3", "sheetname1!$D$4:$D$5");
    			drawPieChart(sheet, "类型2各业务交易量占比", pieParamMap);
    			pieParamMap.put("col1", 8);
    			pieParamMap.put("col2", 15);
    			pieParamMap.put("data3", "sheetname1!$e$4:$e$5");
    			drawPieChart(sheet, "类型2各业务净收入占比", pieParamMap);
    		} 
    	}
    
    	/**
    	 * 绘制扇形图
    	 * @param sheet sheet
    	 * @param string 标题
    	 * @param paramMap 各种起始截止行列
    	 * col1 col2 row1 row2 图片坐标
    	 * data1  种类划分标志所在列
    	 * data2  各分类名
    	 * data3  各分类数值
    	 */
    	private static void drawPieChart(XSSFSheet sheet, String title, Map<String, Object> pieParamMap) {
    		int col1 = (int) pieParamMap.get("col1");int col2 = (int) pieParamMap.get("col2");
    		int row1 = (int) pieParamMap.get("row1");int row2 = (int) pieParamMap.get("row2");
    		String data1 = (String) pieParamMap.get("data1");
    		String data2 = (String) pieParamMap.get("data2");
    		String data3 = (String) pieParamMap.get("data3");
    		
    		XSSFDrawing drawing = sheet.createDrawingPatriarch();
    		XSSFClientAnchor anchor = (XSSFClientAnchor) drawing.createAnchor(0, 0, 0, 0, col1, row1, col2, row2);
    		
    		XSSFChart chart = drawing.createChart(anchor);
    		chart.setTitleText(title);
    		chart.setTitleOverlay(false);
    
    		CTChart ctChart = ((XSSFChart) chart).getCTChart();
    		CTPlotArea ctPlotArea = ctChart.getPlotArea();
    		CTPieChart ctPieChart = ctPlotArea.addNewPieChart();
    		CTBoolean ctBoolean = ctPieChart.addNewVaryColors();
    		ctBoolean.setVal(true);
    
    		CTPieSer ctPieSer = ctPieChart.addNewSer();
    		CTSerTx ctSerTx = ctPieSer.addNewTx();
    		CTStrRef ctStrRefTx = ctSerTx.addNewStrRef();
    		ctStrRefTx.setF(data1);
    		ctPieSer.addNewIdx().setVal(0);
    		CTAxDataSource cttAxDataSource = ctPieSer.addNewCat();
    		CTStrRef ctStrRef = cttAxDataSource.addNewStrRef();
    		ctStrRef.setF(data2); // 第一行为标题
    		CTNumDataSource ctNumDataSource = ctPieSer.addNewVal();
    		CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    		ctNumRef.setF(data3); // 第一行为标题
    
    		ctPieSer.addNewDLbls().addNewShowLeaderLines();// 有无此行代码,图上是否显示文字
    
    		// legend图注
    		CTLegend ctLegend = ctChart.addNewLegend();
    		ctLegend.addNewLegendPos().setVal(STLegendPos.TR);
    		ctLegend.addNewOverlay().setVal(true);
    
    		ctPieSer.addNewExplosion().setVal(1);// 各块之间间隙大小
    		ctPieSer.addNewOrder().setVal(0);//
    
    		CTShapeProperties cTShapeProperties = CTShapeProperties.Factory.newInstance();
    		ctPieSer.addNewSpPr().set(cTShapeProperties);
    	}
    
    	/**
    	 * 绘制折线图
    	 * @param sheet sheet
    	 * @param desc	横轴描述
    	 * @param 各种起始截止行列,包含如下内容:
    	 * 		int numstartrow,int numendrow,int numstartcol,int numendcol,//需要绘图的计费笔数起始截止行列
    			int prostartrow,int proendrow,int prostartcol,int proendcol,//需要绘图的业务净收入起始截止行列
    			int col1,int row1,int row2 //绘图的起始行列
    	 */
    	private static void drawLineChart(XSSFSheet sheet,String desc,Map<String,Integer> paramMap) {
    		int col1 = paramMap.get("col1"),col2 = paramMap.get("col2"), row1=paramMap.get("row1"),row2 = paramMap.get("row2"),//绘图所在坐标,默认宽度为12列
    			//双折线图x轴单位起止列(numstartcol,numendcol),以及第一类数据所在行列	
    			numstartrow = paramMap.get("numstartrow"),numendrow = paramMap.get("numendrow"),numstartcol = paramMap.get("numstartcol"),numendcol = paramMap.get("numendcol"),
    			//双折线图数据2所在行列
    			prostartrow = paramMap.get("prostartrow"),proendrow = paramMap.get("proendrow"),prostartcol = paramMap.get("prostartcol"),proendcol = paramMap.get("proendcol");
    		
    		int dx1=0;
    		int dy1=0;
    		int dx2=0;
    		int dy2=0;
    		XSSFDrawing drawing = sheet.createDrawingPatriarch();
    		XSSFClientAnchor anchor = drawing.createAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2);
    
            XSSFChart chart = drawing.createChart(anchor);
            XDDFChartLegend legend = chart.getOrAddLegend();
            legend.setPosition(LegendPosition.TOP_RIGHT);
    
            // Use a category axis for the bottom axis.
            XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.TOP);//底部X轴
            bottomAxis.setTitle(desc+"交易情况汇总"); // https://stackoverflow.com/questions/32010765
            
            XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);//左侧Y轴
            leftAxis.setTitle("交易量/金额");
            leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
            
            XDDFLineChartData leftdata = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
            
            /填充数据
    		CellRangeAddress cellRangeAddress=new CellRangeAddress(0, 0, numstartcol, numendcol);
    		XDDFDataSource<String> xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, cellRangeAddress);//日期
    		
    		CellRangeAddress dataCellRangeAddress=new CellRangeAddress(numstartrow, numendrow, numstartcol, numendcol);
    		XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress);//纵轴为各个数据
            XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) leftdata.addSeries(xs, ys1);
            series1.setTitle("交易量总计(笔)", null); // https://stackoverflow.com/questions/21855842
            series1.setSmooth(false); // https://stackoverflow.com/questions/29014848
            series1.setMarkerStyle(MarkerStyle.DASH); // https://stackoverflow.com/questions/39636138
            
            CellRangeAddress dataCellRangeAddress2=new CellRangeAddress(prostartrow, proendrow,prostartcol,proendcol);
            XDDFNumericalDataSource<Double> ys2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress2);//纵轴为各个数据
            XDDFLineChartData.Series series2 = (XDDFLineChartData.Series) leftdata.addSeries(xs, ys2);
            series2.setTitle("收入总计(元)", null); // https://stackoverflow.com/questions/21855842
            series2.setSmooth(false); // https://stackoverflow.com/questions/29014848
            series2.setMarkerStyle(MarkerStyle.DASH); // https://stackoverflow.com/questions/39636138
            
            if(null!=paramMap.get("numstartrow2")&&null!=paramMap.get("numendrow2")&&null!=paramMap.get("prostartrow2")&&null!=paramMap.get("proendrow2")){
    			int numstartrow2 = paramMap.get("numstartrow2"), numendrow2 = paramMap.get("numendrow2"),
    				prostartrow2 = paramMap.get("prostartrow2"), proendrow2 = paramMap.get("proendrow2");
    			series1.setTitle("类型1交易量总计(笔)", null); // https://stackoverflow.com/questions/21855842
    			series2.setTitle("类型1收入总计(元)", null); // https://stackoverflow.com/questions/21855842
    			CellRangeAddress dataCellRangeAddress3=new CellRangeAddress(numstartrow2, numendrow2, numstartcol, numendcol);
    			XDDFNumericalDataSource<Double> ys3 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress3);//纵轴为各个数据
    	        XDDFLineChartData.Series series3 = (XDDFLineChartData.Series) leftdata.addSeries(xs, ys3);
    	        series3.setTitle("类型2交易量总计(笔)", null); // https://stackoverflow.com/questions/21855842
    	        series3.setSmooth(false); // https://stackoverflow.com/questions/29014848
    	        series3.setMarkerStyle(MarkerStyle.DASH); // https://stackoverflow.com/questions/39636138
    	        
    	        CellRangeAddress dataCellRangeAddress4=new CellRangeAddress(prostartrow2, proendrow2,prostartcol,proendcol);
    	        XDDFNumericalDataSource<Double> ys4 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress4);//纵轴为各个数据
    	        XDDFLineChartData.Series series4 = (XDDFLineChartData.Series) leftdata.addSeries(xs, ys4);
    	        series4.setTitle("类型2收入总计(元)", null); // https://stackoverflow.com/questions/21855842
    	        series4.setSmooth(false); // https://stackoverflow.com/questions/29014848
    	        series4.setMarkerStyle(MarkerStyle.DASH); // https://stackoverflow.com/questions/39636138
    	        chart.plot(leftdata);
    	        chart.plot(leftdata);  
            }
            chart.plot(leftdata);
            chart.plot(leftdata);
    	}
    	/**
    	 * 柱状图
    	 * @param sheet
    	 * @param desc
    	 * @param paramMap
    	 */
    	
    	private static void drawBarChart(XSSFSheet sheet,String desc,Map<String,Integer> paramMap) {
    		int col1 = paramMap.get("col1"),col2 = paramMap.get("col2"), row1=paramMap.get("row1"),row2 = paramMap.get("row2"),//绘图所在坐标,默认宽度为12列
    				numstartrow = paramMap.get("numstartrow"),numendrow = paramMap.get("numendrow"),numstartcol = paramMap.get("numstartcol"),numendcol = paramMap.get("numendcol"),
    				prostartrow = paramMap.get("prostartrow"),proendrow = paramMap.get("proendrow"),prostartcol = paramMap.get("prostartcol"),proendcol = paramMap.get("proendcol");
    			
    			int dx1=0;
    			int dy1=0;
    			int dx2=0;
    			int dy2=0;
    			XSSFDrawing drawing = sheet.createDrawingPatriarch();
    			XSSFClientAnchor anchor = drawing.createAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2);
    
    	        XSSFChart chart = drawing.createChart(anchor);
    	        XDDFChartLegend legend = chart.getOrAddLegend();
    	        legend.setPosition(LegendPosition.TOP_RIGHT);
    
    	        // Use a category axis for the bottom axis.
    	        XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.TOP);//底部X轴
    	        bottomAxis.setTitle(desc+"交易情况汇总"); // https://stackoverflow.com/questions/32010765
    	        
    	        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);//左侧Y轴
    	        leftAxis.setTitle("交易量/金额");
    	        leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
    	        
    	        XDDFBarChartData data = (XDDFBarChartData) chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
    			CellRangeAddress cellRangeAddress=new CellRangeAddress(numstartrow, numendrow, numstartcol, numendcol);
    			XDDFDataSource<String> xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, cellRangeAddress);//横轴为第一列日期
    			
    			CellRangeAddress dataCellRangeAddress=new CellRangeAddress(numstartrow, numendrow, numstartcol, numendcol);
    			XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress);//纵轴为各个数据
    	        XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) data.addSeries(xs, ys1);
    	        series1.setTitle("交易量总计(笔)", null); // https://stackoverflow.com/questions/21855842
    	        
    	        CellRangeAddress dataCellRangeAddress2=new CellRangeAddress(prostartrow, proendrow,prostartcol,proendcol);
    	        XDDFNumericalDataSource<Double> ys2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress2);//纵轴为各个数据
    	        XDDFBarChartData.Series series2 = (XDDFBarChartData.Series) data.addSeries(xs, ys2);
    	        series2.setTitle("收入总计(元)", null); // https://stackoverflow.com/questions/21855842
    /*            
                for(int col=1;col<2;col++) {//数据列数:第一列为日期,其他列为对应数据。
        			CellRangeAddress dataCellRangeAddress=new CellRangeAddress(prostartrow, proendrow, prostartcol, proendcol);
    	            XDDFNumericalDataSource<Double> ys = XDDFDataSourcesFactory.fromNumericCellRange(sheet,dataCellRangeAddress);//纵轴为各个数据
    	            XDDFChartData.Series series1 = data.addSeries(xs, ys);
    	            series1.setTitle("111", null);
                }*/
                chart.plot(data);
                // in order to transform a bar chart into a column chart, you just need to change the bar direction
                XDDFBarChartData bar = (XDDFBarChartData) data;
                bar.setBarDirection(BarDirection.COL);
    	}
    	/**
    	 * 隐藏列
    	 * @param sheet
    	 * @param sheetName
    	 */
    	private static void hiddenColumn(XSSFSheet sheet, String sheetName) {
    		/*if(sheetName.equals("sheetname2")){//需要隐藏列
    			sheet.setColumnHidden(3, true);
    			sheet.setColumnHidden(4, true);
    			sheet.setColumnHidden(5, true);
    			sheet.setColumnHidden(6, true);
    			sheet.setColumnHidden(7, true);
    			sheet.setColumnHidden(8, true);
    		}*/
    	}
    
    	/**
    	 * 设置边框
    	 */
    	private static XSSFCellStyle setBorder(XSSFWorkbook wb){
    		XSSFCellStyle style = wb.createCellStyle();
    		style.setBorderBottom(BorderStyle.THIN);	//边框
    		style.setBorderTop(BorderStyle.THIN);		//边框
    		style.setBorderLeft(BorderStyle.THIN);		//边框
    		style.setBorderRight(BorderStyle.THIN);		//边框
    		return style;
    	}
    
    }
    

    4.测试类

    	import java.io.File;
    import java.util.Arrays;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class MyBarChartTest {
    	
    	public static void main(String args[]) {
    		String sheetName = "sheetname1";
    		try (XSSFWorkbook wb = new XSSFWorkbook()){
    			String  filePathDaily = "C:/Users/Administrator/Desktop/jfree/";
    			String fileName = "exceltest.xlsx";
    			
    			File filePath = new File(filePathDaily);
    			if(!filePath.exists()&&!filePath.isDirectory()){
    				filePath.mkdir();
    			}
    			//1.统计昨日交易量
    			File file = new File(filePathDaily+fileName);
    			
    			List<String> title=Arrays.asList("序号","类型","业务","合计:交易量","合计:收入",
    					"2019-01-01","2019-01-02","2019-01-03","2019-01-04","2019-01-05",
    					"2019-01-01收入","2019-01-02收入","2019-01-03收入","2019-01-04收入","2019-01-05收入");
    			List<String> titleStyle=Arrays.asList("int","String","String","int","double",
    					"int","int","int","int","int",
    					"double","double","double","double","double");
    			List<String> dates = Arrays.asList("2019-01-01","2019-01-02","2019-01-03","2019-01-04","2019-01-05");
    			
    			Map<String, List<Object>> day2ColValueList=new LinkedHashMap<String, List<Object>>();
    			day2ColValueList.put("类型1业务1",Arrays.asList("类型1","业务1",500,1000.00,100,50,100,150,100,200.00,150.00,200.00,250.00,200.00));
    			day2ColValueList.put("类型1业务2",Arrays.asList("类型1","业务2",400,800.00,80,60,80,100,80,160.00,130.00,160.00,190.00,160.00));
    			day2ColValueList.put("类型2业务1",Arrays.asList("类型2","业务1",600,1200.00,120,70,120,170,120,240.00,170.00,240.00,290.00,240.00));
    			day2ColValueList.put("类型2业务2",Arrays.asList("类型2","业务2",200,400.00,40,140,40,80,40,80.00,100.00,80.00,60.00,80.00));
    			MyExcleChart2.doWork(title, titleStyle, day2ColValueList,file,sheetName,wb,dates.size());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
    

    5.结果展示
    在这里插入图片描述
    6.生成柱状折线图

      	<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 excel.test.com;
    
    import java.io.FileOutputStream;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Chart;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFChart;
    import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
    import org.apache.poi.xssf.usermodel.XSSFDrawing;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    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.CTLegend;
    import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
    import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
    import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
    import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef;
    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.STCrosses;
    import org.openxmlformats.schemas.drawingml.x2006.chart.STLegendPos;
    import org.openxmlformats.schemas.drawingml.x2006.chart.STOrientation;
    import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;
    
    public class BarAndLineChart2 {
    
        public static void main(String[] args) throws Exception {
        	XSSFWorkbook wb = new XSSFWorkbook();
            XSSFSheet sheet = wb.createSheet("Sheet1");
    
            Row row;
            Cell cell;
    
            row = sheet.createRow(0);
            row.createCell(0);
            row.createCell(1).setCellValue("Bars");
            row.createCell(2).setCellValue("Lines");
    
            for (int r = 1; r < 7; r++) {
                row = sheet.createRow(r);
                cell = row.createCell(0);
                cell.setCellValue("C" + r);
                cell = row.createCell(1);
                cell.setCellValue(new java.util.Random().nextDouble());
                cell = row.createCell(2);
                cell.setCellValue(new java.util.Random().nextDouble()*10d);
            }
    
            XSSFDrawing drawing = sheet.createDrawingPatriarch();
    //        ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 0, 11, 15);
            XSSFClientAnchor anchor = (XSSFClientAnchor) drawing.createAnchor(0, 0, 0, 0, 4, 0, 11, 15);
    
            Chart chart = drawing.createChart(anchor);
    
            CTChart ctChart = ((XSSFChart)chart).getCTChart();  
            CTPlotArea ctPlotArea = ctChart.getPlotArea();
    
            //the bar chart
            CTBarChart ctBarChart = ctPlotArea.addNewBarChart();
            CTBoolean ctBoolean = ctBarChart.addNewVaryColors();
            ctBoolean.setVal(true);
            ctBarChart.addNewBarDir().setVal(STBarDir.COL);
    
            //the bar series
            CTBarSer ctBarSer = ctBarChart.addNewSer();
            CTSerTx ctSerTx = ctBarSer.addNewTx();
            CTStrRef ctStrRef = ctSerTx.addNewStrRef();
            ctStrRef.setF("Sheet1!$B$1");
            ctBarSer.addNewIdx().setVal(0);  
            CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();
            ctStrRef = cttAxDataSource.addNewStrRef();
            ctStrRef.setF("Sheet1!$A$2:$A$7"); 
            CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();
            CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
            ctNumRef.setF("Sheet1!$B$2:$B$7");
    
            //at least the border lines in Libreoffice Calc ;-)
            ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   
    
            //telling the BarChart that it has axes and giving them Ids
            ctBarChart.addNewAxId().setVal(123456); //cat axis 1 (bars)
            ctBarChart.addNewAxId().setVal(123457); //val axis 1 (left)
    
            //the line chart
            CTLineChart ctLineChart = ctPlotArea.addNewLineChart();
            ctBoolean = ctLineChart.addNewVaryColors();
            ctBoolean.setVal(true);
    
            //the line series
            CTLineSer ctLineSer = ctLineChart.addNewSer();
            ctSerTx = ctLineSer.addNewTx();
            ctStrRef = ctSerTx.addNewStrRef();
            ctStrRef.setF("Sheet1!$C$1");
            ctLineSer.addNewIdx().setVal(1);  
            cttAxDataSource = ctLineSer.addNewCat();
            ctStrRef = cttAxDataSource.addNewStrRef();
            ctStrRef.setF("Sheet1!$A$2:$A$7"); 
            ctNumDataSource = ctLineSer.addNewVal();
            ctNumRef = ctNumDataSource.addNewNumRef();
            ctNumRef.setF("Sheet1!$C$2:$C$7");
    
            //at least the border lines in Libreoffice Calc ;-)
            ctLineSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});   
    
            //telling the LineChart that it has axes and giving them Ids
            ctLineChart.addNewAxId().setVal(123458); //cat axis 2 (lines)
            ctLineChart.addNewAxId().setVal(123459); //val axis 2 (right)
    
            //cat axis 1 (bars)
            CTCatAx ctCatAx = ctPlotArea.addNewCatAx(); 
            ctCatAx.addNewAxId().setVal(123456); //id of the cat axis
            CTScaling ctScaling = ctCatAx.addNewScaling();
            ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
            ctCatAx.addNewDelete().setVal(false);
            ctCatAx.addNewAxPos().setVal(STAxPos.B);
            ctCatAx.addNewCrossAx().setVal(123457); //id of the val axis
            ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    
            //val axis 1 (left)
            CTValAx ctValAx = ctPlotArea.addNewValAx(); 
            ctValAx.addNewAxId().setVal(123457); //id of the val axis
            ctScaling = ctValAx.addNewScaling();
            ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
            ctValAx.addNewDelete().setVal(false);
            ctValAx.addNewAxPos().setVal(STAxPos.L);
            ctValAx.addNewCrossAx().setVal(123456); //id of the cat axis
            ctValAx.addNewCrosses().setVal(STCrosses.AUTO_ZERO); //this val axis crosses the cat axis at zero
            ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    
            //cat axis 2 (lines)
            ctCatAx = ctPlotArea.addNewCatAx(); 
            ctCatAx.addNewAxId().setVal(123458); //id of the cat axis
            ctScaling = ctCatAx.addNewScaling();
            ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
            ctCatAx.addNewDelete().setVal(true); //this cat axis is deleted
            ctCatAx.addNewAxPos().setVal(STAxPos.B);
            ctCatAx.addNewCrossAx().setVal(123459); //id of the val axis
            ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    
             //val axis 2 (right)
            ctValAx = ctPlotArea.addNewValAx(); 
            ctValAx.addNewAxId().setVal(123459); //id of the val axis
            ctScaling = ctValAx.addNewScaling();
            ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
            ctValAx.addNewDelete().setVal(false);
            ctValAx.addNewAxPos().setVal(STAxPos.R);
            ctValAx.addNewCrossAx().setVal(123458); //id of the cat axis
            ctValAx.addNewCrosses().setVal(STCrosses.MAX); //this val axis crosses the cat axis at max value
            ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    
            //legend
            CTLegend ctLegend = ctChart.addNewLegend();
            ctLegend.addNewLegendPos().setVal(STLegendPos.B);
            ctLegend.addNewOverlay().setVal(false);
    
            FileOutputStream fileOut = new FileOutputStream("BarAndLineChart2.xlsx");
            wb.write(fileOut);
            fileOut.close();
        }
    }
    
    展开全文
  • 每一个java屌丝程序员都应该了解,jxl可以向excel单元格中添加数据,但是可以生成非常常用的折线表吗(通俗一点就是屌丝小学时候学的有x轴y轴,还有各种坐标点...所谓模板方法是首先在office工具中生成折线图,然后...

            每一个java屌丝程序员都应该了解,jxl可以向excel单元格中添加数据,但是可以生成非常常用的折线表(通俗一点就是屌丝小学时候学的有x轴y轴,还有各种坐标点连接成的线)?查看jxl帮助文档后可能又让众屌丝失望了,jxl无法生成动态折线图,但是没关系,此路不通开彼路。下面就像大家介绍一下如何生成excel折现表——模板方法。所谓模板方法是首先在office工具中生成折线图,然后根据表格中的数据生成折线图。

     

           生成excel折线表分为两种情况,第一种:格式固定,数据变动。第二种:格式变动,数据亦变动。

           废话不多说,先介绍第一种。想了解此方法之前须对microsoft excel 如何使用表格中的数据生成折线图。

    如图一组数据

                                                           

    然后在excel做如下操作:

                             

    最后选择生成的折线图点击右键->选择数据->鼠标选择数据区域然后确定,折线图出来了:

                            

     

    说到这里聪明的小屌丝应该了解了第一种方法:格式固定,数据变动。图形生成以后我们只要用jxl对表格中的数据进行改动,就可以获取我们想要的折线图。

        下面讲解第二种情况:第一种:格式变动,数据变动。这种情况经常看到,是重点也是难点,本屌整理了几处网上仅有资料,终于搞懂了。

    格式变动即要用于生成折线图的数据的行和列都是变动的,这里的变动包括行数或列数的变动(反应到折线图上就是坐标点个数的增减)以及表格数据的变动。这里就有必要引入excel中的一个概念——名称。如果不想了解那么详细的话就听本屌一句话:所谓名称就是在excel中存在的类似于java变量的一个东西,execel变量当然就是表格中的数据,特别之处是名称不仅可以代表一个表格,还可以代表一个表格域。详细了解请访问:http://wenku.baidu.com/view/04842a03cc17552707220884.html

    举例说明一下:如下图

                        

    随着月份的增加789···月份的利润数据也会获取,这是就需要使用名称,在excel中点击公式选项卡——>名称管理器——>新建名称,无图无真相:

                       

    新建名称 month=OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,1)

         profit==OFFSET(Sheet1!$B$1,1,0,COUNTA(Sheet1!$B:$B)-1,1)

    如右图:            

     

    其中不得不解释一下offset(o1,o2,o3,o4,o5)和counta(c)

        o1  可以看成一个标准点,后面四个变量都是建立在此标准点的对比数据

        o2  如 5 表示在标准点一下第五个的位置

        o3  如 5 表示在标准点右边第五个位置

        o4  如 5 结合o1 o2 o3 三个函数生成的点,往下横跨5行。

        o5  如 5 结合 o1 o2 o3 三个函数生成的点,往右边跨5行。

        对于counta函数 是计数c代表的一个区域非空的数量。屌丝们可以测试一下在一个单元格中输入 “=Counta(A1:A5)” 确定之后就表示从A1到A5不为空的单元格的数量

     

    下面继续讲解:插入一个折线图。右键选择数据->添加->确定->右侧编辑如下图(b.xls为excel文件名)

              

          此处是使用第一列的数据作为x轴坐标数据。

          接下来确定y轴数据

          点击左侧编辑,you say dick without a pic:

                   

    确定之后奇迹发生,折线图形成,试着在数据下方再加一组数据,当然在实际应用中这种数据是通过jxl加进去的,不只是这个数据,上面给出的所有数据都是通过jxl加进去的。Pic:

                    

    折线图变化,说明Success!congratulations!最终图:

     

                  

     

    嫌太单调? 邮件-》设置图标区域格式-》填充一下 pic:

                

        

        另外除了对于第二种情况,还有一种解决方法,同样要定义名称,但名称的初始化在程序中使用jxl函数进行,这里本屌只做抛砖引玉:

            使用到的函数为:WritableWorkBook中的 addNameArea(name,sheet,x,y,width,height);

        有兴趣的大神可以看一下。

                      

        

    转载于:https://www.cnblogs.com/panlovestan/archive/2013/03/12/2955703.html

    展开全文
  • Excel之走势图/折线图

    2020-10-12 22:12:48
    下图Excel中,缺陷走势折线图会随着单元表格(每周新增、Bug预期修复数量)这两列填写数据自动生成折线: 上表是是如何实现的呢? 1、只需要填写“每周新增“缺陷数,自动计算缺陷总数。 2、插入-----折线图 ...

     下图Excel中,缺陷走势折线图会随着单元表格(每周新增、Bug预期修复数量)这两列填写数据自动生成折线:

    上表是是如何实现的呢?

     1、只需要填写“每周新增“缺陷数,自动计算缺陷总数。

     

    2、插入-----折线图

    3、 选择折线图---右键---按住Ctrl键自由选择列即可:

     

     

     

     

    展开全文
  • 并将折线图插入到原本的excel中。 我在网上百度了很久,看到有用xlsxwriter的worksheet.insert_chart方法,但是这个方法好像是将原始数据复制到里另一个excel中并在新生成excel中作图。 我希望将...
  • Excel实现动态更新数据折线图

    万次阅读 2018-11-08 15:46:52
    一、数据源 数据源如下: 生成的数据透视表如下: 二、定义名称 打开公式菜单,选择定义名称,就打开定义名称弹框 定义三个名称,分别是tj,yw,rq ...选择 插入,折线图 这时会生成一个空的...

    一、数据源

    数据源如下:
    在这里插入图片描述
    生成的数据透视表如下:
    在这里插入图片描述

    二、定义名称

    打开公式菜单,选择定义名称,就打开定义名称弹框
    在这里插入图片描述
    定义三个名称,分别是tj,yw,rq
    在这里插入图片描述
    关键的就是选择单元格区域如何定义

    =OFFSET(透视表!$B$3,,,COUNTA(透视表!$B:$B)-2,)
    

    以上的函数的意义就是选择B列有值的,并且从第三行到倒数第二行的区域

    三、插入折线图

    选择 插入,折线图
    在这里插入图片描述
    这时会生成一个空的折线图,右键折线图选择数据
    在这里插入图片描述
    点击 加号
    在这里插入图片描述
    在名称中输入语文,Y值中输入

    =透视表!yw
    

    同理田径这样操作
    在水平(分类)轴标签中输入

    =透视表!rq
    

    最后点击确定即可
    在这里插入图片描述

    四、调整折线图

    1,设置主次坐标轴
    右键生成的折线图中的橙色的线,选择设置数据系列格式,设置为次坐标轴
    在这里插入图片描述
    2,设置坐标轴格式
    在这里插入图片描述
    横坐标和纵坐标的数据格式
    3,添加图例和图表标题
    选中图表,选择菜单图表设计,添加图表元素
    在这里插入图片描述
    最终会生成这样的图表
    在这里插入图片描述

    五、动态更新效果演示

    在数据源表中添加某一天的数据,然后到透视表中右键透视表,选择刷新数据,透视表和折线图会一起同步刷新

    展开全文
  • 最近在写一些报告,要用到不少表格和图,一开始不知道如何画柱状图和折线图的结合体,查了一番后搞定,记录下,以备日后翻阅。 以GDP的数据为例说明: 1、在word中插入一张柱状图表,会自动生成一个excel,用来...
  • 如果我们能在单元格中插入如图这样的一个折线图,就能很直观地看出数据波动的情况。 下面来演示步骤: 1、选中需要生成迷你图的单元格数据,选择插入-> 迷你图->折线图 2、单击对话框中位置范围文本框右侧的...
  • 在实际工作中,用Excel生成统计图模板文件,再通过Java程序将数据输入Excel文件形成需要的统计图,但折线图或条形图可能由于没有确定的统计数据值,只能预设最大的统计量,如下图 最多预设显示19个数据值,实际...
  • 用代码画折线图/柱形图/条形图/饼图 本文将介绍在.Net中如何使用代码画图表,就像用MS Excel生成的图表一样。也可以画像DataGrid一样的表格。 在.Net中,微软给我们提供了画图类(System.Drawing.Imaging),...
  • 本文主要以柱形图和折线图为例来演示下如何生成,文末会附录常见的统计图的详细截图,使用方法类似。 堆积柱形图 柱形图一般看的是分类(离散)变量和连续性变量的关系,以柱状形式展示。 Step 1 准备数据(模拟...
  • 原文:http://coolketang.com/staticOffice/5a97f34e9f54542163dc43f5.html1. 本节课将为您演示,如何添加图表以及如何设置图表的外观属性。首先选择用于生成图表的数据区域,在A2单元格中按下... 在[二维折线图]图...
  • java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换、更新内置Excel数据、更新插入的文本框内容、合并表格单元格; 博客内容是,写好模板后,如何向内填写数据。...
  • 1、编辑技巧2、单元格内容的合并(实例可见Excel实战之单元格合并与拆分电子元件BOM的生成)3、条件显示4、自定义格式5、绘制函数图象(实例可见Excel折线图和10K_NTC热敏电阻温度与阻值对应表) 6、自定义函数7...
  • Excel数据分析入门-平均线图

    千次阅读 2015-11-08 15:08:31
    在2007中如何制作平均线图。 如下这样的就叫做平均线图 这样的柱状可以很好的比较平均值和各部分之间的差异。 首先看一下红色箭头,我们特意制作一列平均值,作用就是用来生成那根平均线~ 然后,我们选中要在...
  • 本文内容介绍如何通过Excel在线编辑器——Spire.Cloud Excel来实现图表插入,插入图表时,可插入常见的柱状图、饼图、折线图、条形图、面积图、散点图、股价图等。这里挑选几种图表来展示插入图表以及相关格式化操作...
  • 实验目的: 1.掌握excel中相关计算函数和公式的原理 2.掌握在单元格或编辑栏中直接输入带函数...4.练习如何使用功能区创建不同类型图表(展示创建过程,要求创建柱状图、散点图、饼图、折线图、雷达图,所有图的标题
  • 实验目的: 掌握excel中相关计算函数和公式的原理 ...练习如何使用功能区创建不同类型图表(展示创建过程,要求创建柱状图、散点图、饼图、折线图、雷达图,所有图的标题、x轴和y轴的标题,图例都要
  • Excel2007操作技巧集锦

    2011-05-24 16:01:00
    Excel2007操作技巧集锦1.如何为excel的图表添加标题? 点图表,在图表工具->设计->菜单,选择一个带标题的...2.如何生成横坐标均等分的图表? 插入->图表->其它->X、Y(散点图)。而普通的就直接插入“折线图”即可。
  • 本文的文字及图片来源于网络,仅供...并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤 本文将分为以下两个部分进行讲解 在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗整理爬取的球员数...
  • 一、添加迷你图表(折线图、柱形图、盈亏图) 1.添加命名空间 using System; using Spire.Xls; using System.Drawing; 2.主要代码 //创建一个Workbook类对象并加载Excel文档 Workbook workbook = new Workbook(); ...
  • 大家好,我们来探讨如何爬取虎扑NBA官网数据,并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤: 本文将分以下两个部分进行分别讲解: 在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗...
  • Excel图表以其直观的展示功能深受用户喜爱,但有些初学者对于生成图表后如何添加数据标签有所困扰,今天,学习啦小编就教大家在Excel中表格添加数据标签及设置格式的操作方法。Excel中表格添加数据标签及设置格式的...
  • Excel表格中的迷你图表能够直观地向我们展示出数据的变化趋势。本文将介绍C#如何实现为表格数据生成迷你...一、添加迷你图表(折线图、柱形图、盈亏图) 1.添加命名空间 using System; using Spire.Xls; usi...
  • 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤 本文将分为以下两个部分进行讲解 在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗整理爬取的球员数据,对其进行可视化。 项目主要涉及的...

空空如也

空空如也

1 2 3 4 5
收藏数 88
精华内容 35
关键字:

excel如何生成折线图