Java 創(chuàng)建Excel圖表

? ? ? ?在Excel文檔中,圖表是指將工作表中的數據用圖形的方式表示出來载庭。它不僅能夠反映數據間的某種相對關系,以此來幫助我們分析和對比數據;同時能夠使得數據更加易于閱讀囚聚,引人注目靖榕。本文就將通過使用Java程序來演示如何在Excel文檔中創(chuàng)建一些常用的圖表,包括柱狀圖顽铸、餅狀圖和折線圖茁计。

使用工具:Free Spire.XLS for Java (免費版)

Jar文件獲取及導入:

方法1:通過官網下載獲取jar包。解壓后將lib文件夾下的Spire.Xls.jar文件導入Java程序谓松。(如下圖)


方法2:通過maven倉庫安裝導入簸淀。具體安裝詳解參見此網頁

【示例1】創(chuàng)建柱狀圖

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) { ???????

//創(chuàng)建Workbook對象 ???????

Workbook workbook = new Workbook(); ???????

//獲取第一個工作表 ? ??????

Worksheet sheet = workbook.getWorksheets().get(0); ???????

//將圖表數據寫入工作表 ???????

sheet.getCellRange("A1").setValue("部門");? ? ? ?

sheet.getCellRange("A2").setValue("開發(fā)部"); ??????? 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); ???????

//設置圖表數據區(qū)域 ???????

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);? ??

}

}

柱狀圖創(chuàng)建效果:

【示例2】創(chuàng)建餅狀圖

import com.spire.xls.*;

import com.spire.xls.charts.ChartSerie;

import java.awt.*;

public class PieChart { ???

public static void main(String[] args) { ???????

//創(chuàng)建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); ???????

//設置圖表數據區(qū)域 ???????

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); ???

}

}

餅狀圖創(chuàng)建效果:


【示例3】創(chuàng)建折線圖

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) { ???????

//創(chuàng)建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); ???????

//設置圖表數據區(qū)域 ???????

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); ???

}

}

折線圖創(chuàng)建效果:


(本文完)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末舷手,一起剝皮案震驚了整個濱河市拧簸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男窟,老刑警劉巖盆赤,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歉眷,居然都是意外死亡牺六,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門汗捡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淑际,“玉大人,你說我怎么就攤上這事扇住〈郝疲” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵艘蹋,是天一觀的道長锄贼。 經常有香客問我,道長女阀,這世上最難降的妖魔是什么宅荤? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮浸策,結果婚禮上冯键,老公的妹妹穿的比我還像新娘。我一直安慰自己的榛,他們只是感情好琼了,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般雕薪。 火紅的嫁衣襯著肌膚如雪昧诱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天所袁,我揣著相機與錄音盏档,去河邊找鬼。 笑死燥爷,一個胖子當著我的面吹牛蜈亩,可吹牛的內容都是我干的。 我是一名探鬼主播前翎,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼稚配,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了港华?” 一聲冷哼從身側響起道川,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎立宜,沒想到半個月后冒萄,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡橙数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年尊流,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灯帮。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡崖技,死狀恐怖,靈堂內的尸體忽然破棺而出钟哥,到底是詐尸還是另有隱情响疚,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布瞪醋,位于F島的核電站忿晕,受9級特大地震影響,放射性物質發(fā)生泄漏银受。R本人自食惡果不足惜践盼,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾巍。 院中可真熱鬧咕幻,春花似錦、人聲如沸顶霞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蓝厌,卻和暖如春玄叠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拓提。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工读恃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人代态。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓寺惫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹦疑。 傳聞我的和親對象是個殘疾皇子西雀,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容