版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wilsonyun/article/details/78706516
在实际工作中,用Excel生成统计图模板文件,再通过Java程序将数据输入Excel文件形成需要的统计图,但折线图或条形图可能由于没有确定的统计数据值,只能预设最大的统计量,如下图
最多预设显示19个数据值,实际显示16个,那统计图后段就会显示如上图红框内那样非常难看,那如何能实现统计图能动态实现实际的数据值呢?可通过以下方式来实现。
1、通过Excel的名称管理器对单元格区域进行命名
在Excel文件按Ctrl+F3打开名称管理器,分别新建统计分类和统计数据的名称,并设定其引用的位置,如下图: zs0401是Sheet名
19个数据值范围从D至V,在26行,统计分类名称为date1,引用位置为=zs0401!$D$26:$V$26,分类统计值名称为items,在27行,引用位置为=zs0401!$D$27:$V$27,如下图。
即对单元区域定义一个名称,以便给统计图和程序进行引用。
2、在统计图的选择数据源中引用上面建立的名称。
先对图例项进行添加,项目数将引用名称为items,系列名称为="项目数",系列值为=zs0401!items
再对水平(分类)辑标签进行编辑,将轴标签区域设为=zs0401!date
3、则Java程序就可以通过定义的名称控制实际要显示的数据值
String[]xlsCol ={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V"};
col = 2;
for(intx=0; x<16; x++){ //只显示16个数据
row = 25;
col++;
xlsRow = sheet.getRow(row);
xlsCell = xlsRow.getCell(col);
xlsCell.setCellType(CellType.STRING);
xlsCell.setCellValue(calDate[x]);
xlsCell.setCellStyle(StringStyle);
row = 26;
xlsRow = sheet.getRow(row);
xlsCell = xlsRow.getCell(col);
xlsCell.setCellType(CellType.NUMERIC);
xlsCell.setCellValue(calSsje[x]);
xlsCell.setCellStyle(floatStyle);
}
//设定显示范围
Name rangeCell = wb.getName("date");
String reference = sheetName + "!$D$26:$" +xlsCol[col] + "$26";
rangeCell.setRefersToFormula(reference);
rangeCell = wb.getName("items");
reference = sheetName + "!$D$27:$" + xlsCol[col] +"$27";
rangeCell.setRefersToFormula(reference);
则统计图就会在设定最大的范围内显示实际的数据值,如下图: