老男人
首页 时尚 玩车 保健 情感
更多
腕表 饮食 视频 美女 百科
0
老男人 > 科技 > 正文

如何使用几行代码在报表中实现一个数据透视表(Java版)

2023-07-11 09:58:22 发布人:hao333 阅读( 3559)

前一段时间淘宝出了一个“淘宝人生”的模块,可以看从注册淘宝账号至今的消费记录,仔细想了想,现在微信、淘宝这些APP好像都喜欢出这种记录使用者的支付、消费情况的功能。

前一段时间淘宝出了一个“淘宝人生”的模块,可以看从注册淘宝账号至今的消费记录,仔细想了想,现在微信、淘宝这些APP好像都喜欢出这种记录使用者的支付、消费情况的功能。不过这个显示消费记录的功能的确让人觉得方便很多。这样大家就可可以随时随地的查看以前的消费记录,有时候需要查账,翻一翻手机就能看见钱都去哪里了,而且每一笔钱的流向都可以看得非常清楚。既然这个东西这么好用,那可不可以自己也搞一个类似的分析工具,这样就可以用它来记录生活中的点点滴滴。由于本人的工作性质,对Excel比较熟悉,首先想到的就是可不可以用一个表格可视化工具来实现这个功能。

说干就干,先上网找了找了一些Excel中可视化工具的样式,看了看在Excel中比较流行就是图表(柱形图、条形图等)和数据透视图了。因为图表是平时用的比较多的工具,所以在好奇心的驱使下,百度了一下“如何用代码在表格中搞一个数据透视图”如何使用几行代码在报表中实现一个数据透视表(Java版),浏览着看了看,发现有很多种语言都可以实现(Python、Java、Javascript、.net等)。鉴于自己对Java语言比较熟悉,所以便继续百度“如何用Java在Excel中搞一个数据透视表”。发现可以使用Apache POI库来实现:

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.*;

import java.io.FileOutputStream;

import java.io.IOException;

public class PivotTableExample {

public static void main(String[] args) throws IOException {

// 创建工作簿

Workbook workbook = new XSSFWorkbook();

// 创建工作表

Sheet sheet = workbook.createSheet("Data");

// 输入数据

Row headingRow = sheet.createRow(0);

headingRow.createCell(0).setCellValue("Category");

headingRow.createCell(1).setCellValue("Value");

Row dataRow1 = sheet.createRow(1);

dataRow1.createCell(0).setCellValue("A");

dataRow1.createCell(1).setCellValue(10);

Row dataRow2 = sheet.createRow(2);

dataRow2.createCell(0).setCellValue("B");

dataRow2.createCell(1).setCellValue(20);

Row dataRow3 = sheet.createRow(3);

dataRow3.createCell(0).setCellValue("A");

dataRow3.createCell(1).setCellValue(15);

// 创建数据透视表

XSSFPivotTable pivotTable = ((XSSFSheet) sheet).createPivotTable(new AreaReference("A1:B3", SpreadsheetVersion.EXCEL2007), new CellReference("D5"));

// 设置行标签

pivotTable.addRowLabel(0);

// 设置值字段

pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1, "Sum of Value");

// 保存Excel文件

FileOutputStream fileOut = new FileOutputStream("pivotTable.xlsx");

workbook.write(fileOut);

fileOut.close();

System.out.println("数据透视表已创建并保存到文件!");

}

}

除了使用Apache POI库,还发现了一款商业软件GcExcel,由于不太不了解这个东西,所以简单的ChatGpt了一下GcExcel,

如何使用几行代码在报表中实现一个数据透视表(Java版)

查完之后发现,和Apache POI库一样,GcExcel同样也是一个基于Java的表格操作库,于是怀着好奇的心态,又百度了一下“Java实现GcExcel数据透视表”。找到了一个GcExcel的学习指南,里面有一些源码和代码讲解,根据里面的入门教程自己写了一个小的实现数据透视表的Demo(由于完整代码太长,只截取了部分):

想要完整代码的童鞋可以从Gitee或Github中“葡萄城技术团队”主页内下载:

public class Main {

public static void main(String[] args){

Workbook workbook = new Workbook();

//创建一个WorkSheet的对象

IWorksheet worksheet = workbook.getWorksheets().get(0);

//-----------------------------设置数据值------------------------------

worksheet.getRange("B3:C7").setValue(new Object[][]{

{"ITEM", "AMOUNT"},

{"Income 1", 2500},

{"Income 2", 1000},

{"Income 3", 250},

{"Other", 250},

});

worksheet.getRange("B10:C23").setValue(new Object[][]{

{"ITEM", "AMOUNT"},

{"Rent/mortgage", 800},

{"Electric", 120},

{"Gas", 50},

{"Cell phone", 45},

{"Groceries", 500},

{"Car payment", 273},

{"Auto expenses", 120},

{"Student loans", 50},

{"Credit cards", 100},

{"Auto Insurance", 78},

{"Personal care", 50},

{"Entertainment", 100},

{"Miscellaneous", 50},

});

//合并单元格

worksheet.getRange("B2:C2").merge();

worksheet.getRange("B2").setValue("MonTHLY INCOME");

worksheet.getRange("B9:C9").merge();

worksheet.getRange("B9").setValue("MonTHLY EXPENSES");

worksheet.getRange("E2:G2").merge();

worksheet.getRange("E2").setValue("PERCENTAGE OF INCOME SPENT");

worksheet.getRange("E5:G5").merge();

worksheet.getRange("E5").setValue("SUMMARY");

worksheet.getRange("E3:F3").merge();

worksheet.getRange("E9").setValue("BALANCE");

worksheet.getRange("E6").setValue("Total Monthly Income");

worksheet.getRange("E7").setValue("Total Monthly Expenses");

//--------------------------------设置形状--------------------------------

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 339, 247, 316.5, 346);

shape.getChart().getChartArea().getFormat().getLine().setTransparency(1);

shape.getChart().getColumnGroups().get(0).setOverlap(0);

shape.getChart().getColumnGroups().get(0).setGapWidth(37);

IAxis category_axis = shape.getChart().getAxes().item(AxisType.Category);

category_axis.getFormat().getLine().getColor().setRGB(Color.GetBlack());

category_axis.getTickLabels().getFont().setSize(11);

category_axis.getTickLabels().getFont().getColor().setRGB(Color.GetBlack());

IAxis series_axis = shape.getChart().getAxes().item(AxisType.Value);

series_axis.getFormat().getLine().setWeight(1);

series_axis.getFormat().getLine().getColor().setRGB(Color.GetBlack());

series_axis.getTickLabels().setNumberFormat("$###0");

series_axis.getTickLabels().getFont().setSize(11);

series_axis.getTickLabels().getFont().getColor().setRGB(Color.GetBlack());

ISeries chartSeries = shape.getChart().getSeriesCollection().newSeries();

chartSeries.setFormula("=SERIES(\"Simple Budget\",{\"Income\",\"Expenses\"},'Sheet1'!$G$6:$G$7,1)");

chartSeries.getPoints().get(0).getFormat().getFill().getColor().setRGB(Color.FromArgb(176, 21, 19));

chartSeries.getPoints().get(1).getFormat().getFill().getColor().setRGB(Color.FromArgb(234, 99, 18));

chartSeries.getDataLabels().getFont().setSize(11);

chartSeries.getDataLabels().getFont().getColor().setRGB(Color.GetBlack());

chartSeries.getDataLabels().setShowValue(true);

chartSeries.getDataLabels().setPosition(DataLabelPosition.OutsideEnd);

workbook.save("tutorial.xlsx");

}

}

最终的Excel样式:

如何使用几行代码在报表中实现一个数据透视表(Java版)

通过以上的实验,使用Apache POI和GcExcel都可以在Excel中实现数据透视表,您可以根据您项目或工程的需要选择合适的方法。

          
  • 上一篇:“基建”全面加速 超充将成未来新能源汽车标配

相关阅读

RelatedReading
  • 为什么艺赛旗是中国RPA领导者? 为什么艺赛旗是中国RPA领导者?
  • 对阵ChatGPT们,存算一体超异构突破算力天花板在即 对阵ChatGPT们,存算一体超异构突破算力天花板在即
  • IDC发布,深信服应用交付AD全年市占率第一 IDC发布,深信服应用交付AD全年市占率第一
  • 超12000次模拟碰撞 联想方案服务助推吉利新车研发 超12000次模拟碰撞 联想方案服务助推吉利新车研发
  • WiFi6速度真的有明显提升吗?只有选购当贝X5才是真正的高速 WiFi6速度真的有明显提升吗?只有选购当贝X5才是真正的高速
  • 荣耀平板MagicPad打造行业首款裸耳3D空间音频平板 音频体验全面升级 荣耀平板MagicPad打造行业首款裸耳3D空间音频平板 音频体验全面升级

猜你喜欢

Guessyoulike
《英雄联盟》国服为32位系统“续命” 尽快升级64位

《英雄联盟》国服为32位系统“续命” 尽快升级64位

hao333 2271次阅读2023-04-07 09:11
定制的钻戒为什么便宜(为什么定制的钻戒要低于直接购买的钻戒)

定制的钻戒为什么便宜(为什么定制的钻戒要低于直接购买的钻戒)

龙鑫 9630次阅读2023-05-31 10:20
香港打造领先的科技贸易中心 “香港国际创科展”促进全球科创成果产业化

香港打造领先的科技贸易中心 “香港国际创科展”促进全球科创成果产业化

hao333 1611次阅读2023-03-30 09:53
网络游戏板块跌0.13% 吉宏股份天娱数科涨10%居首

网络游戏板块跌0.13% 吉宏股份天娱数科涨10%居首

hao333 3250次阅读2023-04-13 15:40
专题页

HOT榜单

  • 最高检2023两会工作报告发布,“虚拟检察官”带我们划重点

  • 户外活动正当时 快与三星Galaxy Z Flip4共同打造一场精致露营

  • 入门级名表,你可以永远相信浪琴!

  • 魔兽国服关闭百天 暴雪突然更新中文客户端

  • 擎朗智能CHCC 2023精彩回顾 尝鲜医疗全系家族产品黑科技

  • 饮料制造板块涨2.89% 金枫酒业古越龙山涨幅居首

  • iPhone连接不上iTunes的解决办法汇总教程

  • 赛力斯:5月新能源汽车销量8562辆 同比降18.08%

  • 张媛离任英大稳固增强核心一年持有期混合

  • 杰美特2022年亏1.16亿 上市即巅峰募13亿东兴证券保荐

换一组看看

频道最IN
>程序员是做什么的(程序员的工作是干什么的)

程序员是做什么的(程序员的工作是干什么的)

>6-8万元,这几款腕表很适合通勤

6-8万元,这几款腕表很适合通勤

>《小花仙》13周年限定周边今日曝光 全网预售即将开启

《小花仙》13周年限定周边今日曝光 全网预售即将开启

关于我们 法律声明 联系我们 广告服务 隐私条款
@老男人网 版权所有/信息产业部备案号:蜀ICP备13015099号-1