首页 > 传媒 > 关键词  > 正文

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

2023-07-10 15:01 · 稿源: 站长之家用户

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

  说干就干,先上网找了找了一些Excel中可视化工具的样式,看了看在Excel中比较流行就是图表(柱形图、条形图等)和数据透视图了。因为图表是平时用的比较多的工具,所以在好奇心的驱使下,百度了一下“如何用代码在表格中搞一个数据透视图”,浏览着看了看,发现有很多种语言都可以实现(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,

查完之后发现,和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样式:

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

推广

特别声明:以上内容(如有图片或视频亦包括在内)均为站长传媒平台用户上传并发布,本平台仅提供信息存储服务,对本页面内容所引致的错误、不确或遗漏,概不负任何法律责任,相关信息仅供参考。站长之家将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。任何单位或个人认为本页面内容可能涉嫌侵犯其知识产权或存在不实内容时,可及时向站长之家提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明(点击查看反馈联系地址)。本网站在收到上述法律文件后,将会依法依规核实信息,沟通删除相关内容或断开相关链接。

  • 相关推荐
  • 数娱工场 | 手游收益榜前十过半来自中国!透视俄罗斯游戏市场淘金热

    俄罗斯Yandex公司推出移动应用增长平台Yandex Ads Boost,正式进入中国市场。该平台整合广告变现与数据分析功能,助力中国游戏开发者拓展俄罗斯等新兴市场。数据显示,2024年中国游戏对俄出口规模突破10亿美元,同比增长20%。俄罗斯游戏市场呈现高速增长态势,移动游戏下载量全球第五,营收达8.98亿美元。文章指出,中国游戏在俄面临语言文化、支付转化等挑战,但凭借文化亲近性、用户年轻化及高消费力等优势,正迎来重要发展机遇。

  • 小米手表S4系列推送澎湃OS 3正式版:eSIM版、运动版等五款在列

    10月29日,小米手表S4系列开启澎湃OS 3正式版推送。用户可通过小米运动健康App升级,升级包下载后将自动推送至手表,完成升级并重启。官方提醒确保手表电量在20%以上,升级过程需保持与手机连接,建议将手表放在手机附近并保持App前台运行。此次推送覆盖S4 Sport、S4、S4 eSIM等多款型号。澎湃OS 3于10月15日首批推送,正逐步覆盖更多机型。

  • 低代码赋能:中小企业信息化建设的高效破局之道

    在数字经济加速渗透的背景下,中小企业面临前所未有的转型压力与机遇。传统信息化建设模式因定制周期长、成本高、依赖专业团队,使企业难以快速响应市场变化。如今,低代码平台以“标准功能+低代码拓展”的组合,通过可视化配置和拖拽组件,帮助企业灵活搭建覆盖项目管理、库存管理、合同管理及预算管理等系统,显著降低技术门槛与成本。这种模式不仅满足基础需求,更以高效、低成本优势成为数字化转型的核心驱动力,助力中小企业在竞争中脱颖而出。

  • GEO指数上升代表什么?AI搜索时代的品牌健康信号

    本文解析GEO指数(生成式引擎优化指数)的核心价值:衡量品牌在AI搜索生态中的可见度与影响力,包含曝光频率、推荐排名和场景覆盖三大维度。指数上升意味着品牌在用户决策链前置、认知度提升、竞争优势扩大及内容策略见效。需通过建立基准线、选用自动化工具(如覆盖国产AI平台的AIBase)、定期分析趋势及对标竞品来持续监控。避免三个误区:过度追求绝对数值、被短期波动干扰、忽略业务相关性。GEO指数本质是品牌在AI时代的健康度信号。

  • 小米手表S4 eSIM/Sport宣布支持开通中国移动一号双终端

    小米手表S4 eSIM版与S4 Sport版正式上线,用户连接小米手机后可通过中国移动“一号双终端”业务实现手表与手机共享号码的便捷通信。目前云南、四川两省暂未开放,其他地区用户可通过小米运动健康App在线自助办理。办理需确保手表与手机连接,并在手表设置中开启移动网络开关,待eSIM数据传输完成后即可使用全部功能。其他支持eSIM的小米手表产品也在逐步认证中,未来将陆续开放服务。

  • 猪猪给小朋友表演才艺博得满堂彩 鼻转圈圈引孩童欢笑连连

    ​11月1日,在浙江金华的一场趣味活动中,一只特别的小猪成为了全场焦点。 它凭借一系列独特的才艺表演,尤其是用鼻子灵活转圈的绝技,成功赢得了在场小朋友们的阵阵热烈喝彩。

  • GEO排名查询工具实测:如何监控你的品牌在AI搜索中的表现

    在为SaaS公司进行内容审计时发现,虽然官网在Google排名前三,但在ChatGPT和豆包等AI搜索平台询问"推荐项目管理工具"时却未被提及。这揭示了传统SEO与AI搜索排名的差异:AI搜索更看重内容权威性、信息新鲜度和结构化程度,而非外链和关键词密度。数据显示,58.5%的Google搜索为零点击,ChatGPT日查询量超10亿,AI搜索正分流传统流量。建议企业使用AIBase等工具监控多平台曝光数据,通过优化高质量内容提升AI搜索排名,尤其适合ToB企业、教育机构和本地服务商。

  • ​如何使用 AIBase 平台 GEO 排名查询工具

    本文介绍AI搜索时代品牌面临的新挑战:官网流量被AI工具分流,传统SEO工具无法监测AI平台曝光情况。作者推荐使用AIBase GEO工具,它能监控品牌在豆包、DeepSeek等五大国产AI平台的曝光数据,通过总检测次数、推荐数、曝光数、曝光率四个核心指标量化表现。文章详细演示了设置监控任务、分析数据、针对性优化官网内容的完整流程,强调工具需配合高质量内容持续优化,帮助

  • 高校扁带表演如轻功走红 老师:带子5厘米宽 入门门槛较高

    近日,中国地质大学(武汉)校区开展扁带运动公益推广活动在网上走红。 视频中,多位身手敏捷的年轻人在一根细带上旋转跳跃,甚至完成翻转、劈叉等高难度动作,引得网友赞叹不已。 不少网友在评论区惊叹:真的不是AI吗?”感觉看到了小龙女”好像会轻功一样”。 对此,该校带队老师、中国登山协会扁带运动培训师罗梦禅介绍,这是中国登山协会主办的扁带运动校

  • 太原富力万达文华酒店邀您长假寻踪三晋,邂逅表里山河

    山西承载五千年华夏文明,中秋国庆假期是探索这片土地的绝佳时机。文章重点推介三条主题线路:晋商遗韵之旅展现古商帮辉煌与晋中古建筑群;佛国烟火之旅探访晋北佛教艺术与千年古建;表里山河之旅领略太行吕梁地质奇观与黄河汾水风光。同时推荐太原富力万达文华酒店作为下榻首选,其融合东方韵味与当地风情,提供精致服务。全文以文旅融合为主线,展现山西历史与现代交织的自然人文画卷。

今日大家都在搜的词: