在Excel文档中,图表是指将工作表中的数据用图形的方式表示出来。它不仅能够反映数据间的某种相对关系,以此来帮助我们分析和对比数据;同时能够使得数据更加易于阅读,引人注目。本文就将通过使用Java程序来演示如何在Excel文档中创建一些常用的图表,包括柱状图、饼状图和折线图。
使用工具:Free Spire.XLS for Java (免费版)
Jar文件获取及导入:
方法1:通过官网下载获取jar包。解压后将lib文件夹下的Spire.Xls.jar文件导入Java程序。(如下图)
方法2:通过maven仓库安装导入。具体安装详解参见此网页。
【示例1】创建柱状图
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import com.spire.xls.charts.ChartSeries;
import java.awt.*;
public class ColumnChart {
public static void main(String[] args) {
//创建Workbook对象
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//将图表数据写入工作表
sheet.getCellRange("A1").setValue("部门");
sheet.getCellRange("A2").setValue("开发部"); sheet.getCellRange("A3").setValue("测试部"); sheet.getCellRange("A4").setValue("销售部"); sheet.getCellRange("A5").setValue("技术支持部"); sheet.getCellRange("B1").setValue("男性"); sheet.getCellRange("B2").setNumberValue(65); sheet.getCellRange("B3").setNumberValue(21); sheet.getCellRange("B4").setNumberValue(12); sheet.getCellRange("B5").setNumberValue(30); sheet.getCellRange("C1").setValue("女性"); sheet.getCellRange("C2").setNumberValue(13); sheet.getCellRange("C3").setNumberValue(33); sheet.getCellRange("C4").setNumberValue(28); sheet.getCellRange("C5").setNumberValue(21);
//设置单元格样式
sheet.getCellRange("A1:C1").setRowHeight(15); sheet.getCellRange("A1:C1").getCellStyle().setColor(Color.darkGray); sheet.getCellRange("A1:C1").getCellStyle().getExcelFont().setColor(Color.white); sheet.getCellRange("A1:C1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center); sheet.getCellRange("A1:C1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
sheet.autoFitColumn(1);
//添加柱状图
Chart chart = sheet.getCharts().add(ExcelChartType.ColumnClustered);
//设置图表数据区域
chart.setDataRange(sheet.getCellRange("A1:C5")); chart.setSeriesDataFromRange(false);
//设置图表位置
chart.setLeftColumn(5);
chart.setTopRow(1);
chart.setRightColumn(14);
chart.setBottomRow(21);
//设置图表标题
chart.setChartTitle("部门信息");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//设置x,y轴的名称
chart.getPrimaryCategoryAxis().setTitle("部门"); chart.getPrimaryCategoryAxis().getFont().isBold(true); chart.getPrimaryCategoryAxis().getTitleArea().isBold(true); chart.getPrimaryValueAxis().setTitle("人数"); chart.getPrimaryValueAxis().hasMajorGridLines(false); chart.getPrimaryValueAxis().getTitleArea().isBold(true); chart.getPrimaryValueAxis().getTitleArea().setTextRotationAngle(90);
//设置系列颜色、重叠、宽度和数字标签
ChartSeries series = chart.getSeries();
for (int i = 0 ; i < series.size() ; i++) {
ChartSerie cs = series.get(i);
cs.getFormat().getOptions().isVaryColor(true); cs.getFormat().getOptions().setOverlap(-50); cs.getFormat().getOptions().setGapWidth(350); cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); }
//设置图例位置
chart.getLegend().setPosition(LegendPositionType.Top);
//保存文档
workbook.saveToFile("output/ColumnChart.xlsx",ExcelVersion.Version2016);
}
}
柱状图创建效果:
【示例2】创建饼状图
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import java.awt.*;
public class PieChart {
public static void main(String[] args) {
//创建Workbook对象
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//将图表数据写入工作表
sheet.getCellRange("A1").setValue("国家");
sheet.getCellRange("A2").setValue("古巴");
sheet.getCellRange("A3").setValue("墨西哥"); sheet.getCellRange("A4").setValue("法国");
sheet.getCellRange("A5").setValue("德国");
sheet.getCellRange("B1").setValue("销售额"); sheet.getCellRange("B2").setNumberValue(400000); sheet.getCellRange("B3").setNumberValue(600000); sheet.getCellRange("B4").setNumberValue(700000); sheet.getCellRange("B5").setNumberValue(850000);
//设置单元格样式
sheet.getCellRange("A1:B1").setRowHeight(15); sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray); sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white); sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center); sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center); sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"$\"#,##0");
//添加饼状图
Chart chart = sheet.getCharts().add(ExcelChartType.Pie);
//设置图表数据区域
chart.setDataRange(sheet.getCellRange("B2:B5")); chart.setSeriesDataFromRange(false);
//设置图表位置
chart.setLeftColumn(4);
chart.setTopRow(1);
chart.setRightColumn(13);
chart.setBottomRow(21);
//设置图表标题
chart.setChartTitle("市场份额");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//设置系列标签
ChartSerie cs = chart.getSeries().get(0); cs.setCategoryLabels(sheet.getCellRange("A2:A5")); cs.setValues(sheet.getCellRange("B2:B5")); cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasPercentage(true); chart.getPlotArea().getFill().setVisible(false);
//保存文档
workbook.saveToFile("output/PieChart.xlsx", ExcelVersion.Version2016);
}
}
饼状图创建效果:
【示例3】创建折线图
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import com.spire.xls.charts.ChartSeries;
import java.awt.*;
public class LineChart {
public static void main(String[] args) {
//创建Workbook对象
Workbook workbook = new Workbook();
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//将图表数据写入工作表
sheet.getCellRange("A1").setValue("月份");
sheet.getCellRange("A2").setValue("一月");
sheet.getCellRange("A3").setValue("二月");
sheet.getCellRange("A4").setValue("三月");
sheet.getCellRange("A5").setValue("四月");
sheet.getCellRange("A6").setValue("五月");
sheet.getCellRange("A7").setValue("六月");
sheet.getCellRange("B1").setValue("台式电脑"); sheet.getCellRange("B2").setNumberValue(80); sheet.getCellRange("B3").setNumberValue(45); sheet.getCellRange("B4").setNumberValue(25); sheet.getCellRange("B5").setNumberValue(20); sheet.getCellRange("B6").setNumberValue(10); sheet.getCellRange("B7").setNumberValue(5); sheet.getCellRange("C1").setValue("手提电脑"); sheet.getCellRange("C2").setNumberValue(30); sheet.getCellRange("C3").setNumberValue(25); sheet.getCellRange("C4").setNumberValue(35); sheet.getCellRange("C5").setNumberValue(50); sheet.getCellRange("C6").setNumberValue(45); sheet.getCellRange("C7").setNumberValue(55); sheet.getCellRange("D1").setValue("平板电脑"); sheet.getCellRange("D2").setNumberValue(10); sheet.getCellRange("D3").setNumberValue(15); sheet.getCellRange("D4").setNumberValue(20); sheet.getCellRange("D5").setNumberValue(35); sheet.getCellRange("D6").setNumberValue(60); sheet.getCellRange("D7").setNumberValue(95);
//设置单元格样式
sheet.getCellRange("A1:D1").setRowHeight(15); sheet.getCellRange("A1:D1").getCellStyle().setColor(Color.darkGray); sheet.getCellRange("A1:D1").getCellStyle().getExcelFont().setColor(Color.white); sheet.getCellRange("A1:D1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center); sheet.getCellRange("A1:D1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
//添加折线图
Chart chart = sheet.getCharts().add(ExcelChartType.Line);
//设置图表数据区域
chart.setDataRange(sheet.getCellRange("A1:D7")); chart.setSeriesDataFromRange(false);
//设置图表位置
chart.setLeftColumn(6);
chart.setTopRow(1);
chart.setRightColumn(15);
chart.setBottomRow(21);
//设置图表标题
chart.setChartTitle("产品销售趋势图");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//设置x,y轴的名称
chart.getPrimaryCategoryAxis().setTitle("月份"); chart.getPrimaryCategoryAxis().getFont().isBold(true); chart.getPrimaryCategoryAxis().getTitleArea().isBold(true); chart.getPrimaryValueAxis().setTitle("销售量"); chart.getPrimaryValueAxis().hasMajorGridLines(false); chart.getPrimaryValueAxis().getTitleArea().setTextRotationAngle(90); chart.getPrimaryValueAxis().getTitleArea().isBold(true);
//设置系列颜色和数字标签
ChartSeries series = chart.getSeries();
for (int i = 0; i < series.size(); i++) {
ChartSerie cs = series.get(i);
cs.getFormat().getOptions().isVaryColor(true); cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); cs.getDataFormat().setMarkerStyle(ChartMarkerType.Circle); }
//设置图例位置
chart.getLegend().setPosition(LegendPositionType.Top);
//保存文档 workbook.saveToFile("LineChart.xlsx", ExcelVersion.Version2016);
}
}
折线图创建效果:
(本文完)