如何控制Excel统计图数据的实际显示范围

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

 
 

则统计图就会在设定最大的范围内显示实际的数据值,如下图:



猜你喜欢

转载自blog.csdn.net/wilsonyun/article/details/78706516
今日推荐