GcExcel for java 6.0 简单例子 -jar has been cracked

news2024/11/25 12:54:49

GrapeCity Documents for Excel (简称:GcExcel)是葡萄城推出的一款基于 Java 平台的服务端高性能表格组件,可与 纯前端表格控件 SpreadJS 前后端兼容,无需依赖 Office、POI 或第三方应用软件,在前端展示电子表格数据,在服务端批量创建、加载、编辑、打印、导入/导出 Excel 文档,为您开发的应用程序提供在线文档的前后端数据同步、在线填报与服务端批量导出与打印,以及类 Excel 报表模板设计与服务端高性能处理等一整套 类 Excel 全栈解决方案。

 

GcExcel (Java 平台)产品特色
组件架构灵活、高效
GcExcel 在处理 Excel 文档时,消耗的内存和占用时间,远超企业级项目标准。 与 POI 相比,速度更快、性能更高、内存消耗更少。

主题、接口丰富多样
GcExcel 提供了数量众多,且功能全面的自定义主题、组件接口、可配置属性、数据汇总方式、嵌入式绘图对象和内置计算引擎。

与 SpreadJS 前后端兼容
GcExcel 天然与 SpreadJS 前后端兼容,可直接导入 SSJSON 格式,无需依赖 Office 和 POI,为应用程序提供 类 Excel 全栈解决方案。

高度兼容 Excel
可无损导入/导出 Excel 文件,包括其中的数据透视表、表格、图表、注释、条件格式、数据验证、公式、形状、图片和迷你图。

基于 Excel 的文档对象模型
允许您导入、导出、计算、查询、生成 Excel 脚本。与 VSTO 一致,您可以使用与 Visual Studo Tools for Office 相同的元素创建自定义样式。

在本教程中, 我们将会通过一个真实的使用场景,来让大家对GcExcel能够做什么有一个基础的了解,并且在教程的最后一步,你将会得到一个用GcExcel生成的Excel文件,这个文件可以用来分析你的月度收入和支出。

准备

  1. 确保安装JDK 6或者更高版本.

  2. 用任何你喜欢的IDE, Eclipse或者IntelliJ IDEA创建一个Java的控制台程序。

  3. 添加GcExcel Java依赖包:

在Intellij IDEA 或 Eclipse中

  • 从Maven或者Github下载GcExcel jar包
  • 将gcexcel-6.0.0.jar拷贝到现有工程目录下, 右键将jar包添加为依赖包

Gradle工程

  • 打开build.gradle,在dependencies代码块下添加下面代码

Maven工程

  • 打开pom.xml,在dependencies结点下添加以下元素
<dependency>
   <groupId>com.grapecity.documents</groupId>
   <artifactId>gcexcel</artifactId>
   <version>6.0.0</version>
</dependency>

引入名字空间

打开Main.java文件,然后引入以下两个名字空间

import com.grapecity.documents.excel.*;
import com.grapecity.documents.excel.drawing.*;

创建工作簿

通过GcExcel来生成一个Excel文件的第一步就是先创建一个工作簿实例。

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

初始化数据

在给GcExcel设置大量数据时, 需要先准备一个填充好的二维数组,然后将这个二维数组赋值给需要设置数据的区域。

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

设置行高和列宽

有时需要设置合适的行高和列宽来让数据展示得更好,可以使用Worksheet的StandardHeight和StandardWidth属性来设置默认的行高和列宽。

worksheet.setStandardHeight(26.25);
worksheet.setStandardWidth(8.43);

worksheet.getRange("2:24").setRowHeight(27);
worksheet.getRange("A:A").setColumnWidth(2.855);
worksheet.getRange("B:B").setColumnWidth(33.285);
worksheet.getRange("C:C").setColumnWidth(25.57);
worksheet.getRange("D:D").setColumnWidth(1);
worksheet.getRange("E:F").setColumnWidth(25.57);
worksheet.getRange("G:G").setColumnWidth(14.285);

创建表格

创建两个表格: "Income"和"Expenses",并分别给这两个表格设置内置的表格样式。

ITable incomeTable = worksheet.getTables().add(worksheet.getRange("B3:C7"), true);
incomeTable.setName("tblIncome");
incomeTable.setTableStyle(workbook.getTableStyles().get("TableStyleMedium4"));

ITable expensesTable = worksheet.getTables().add(worksheet.getRange("B10:C23"), true);
expensesTable.setName("tblExpenses");
expensesTable.setTableStyle(workbook.getTableStyles().get("TableStyleMedium4"));

设置计算公式

创建两个自定义名称来对月度的收入和支出分别做求和,然后在单元格中使用所定义的名称来设置公式,计算月度的收入总和以及支出总和,再分别设置另外两个公式,一个公式来计算支出占收入的百分比,一个来计算月度的净收入。

worksheet.getNames().add("TotalMonthlyIncome", "=SUM(tblIncome[AMOUNT])");
worksheet.getNames().add("TotalMonthlyExpenses", "=SUM(tblExpenses[AMOUNT])");

worksheet.getRange("E3").setFormula("=TotalMonthlyExpenses");
worksheet.getRange("G3").setFormula("=TotalMonthlyExpenses/TotalMonthlyIncome");
worksheet.getRange("G6").setFormula("=TotalMonthlyIncome");
worksheet.getRange("G7").setFormula("=TotalMonthlyExpenses");
worksheet.getRange("G9").setFormula("=TotalMonthlyIncome-TotalMonthlyExpenses");

自定义样式

有两种方式来给单元格或区域设置样式:

  • 给单元格或区域应用一个内置的或者自定义的命名样式
  • 直接设置单元格或区域的某个具体的样式属性

在这里,我们会修改内置的一些命名样式--"Currency" "Heading 1"和"Percent",然后把它们再应用到某个区域或单元格,而对其它的区域,我们则直接修改区域的样式属性。

IStyle currencyStyle = workbook.getStyles().get("Currency");
currencyStyle.setIncludeAlignment(true);
currencyStyle.setVerticalAlignment(VerticalAlignment.Bottom);
currencyStyle.setNumberFormat("$#,##0.00");

IStyle heading1Style = workbook.getStyles().get("Heading 1");
heading1Style.setIncludeAlignment(true);
heading1Style.setHorizontalAlignment(HorizontalAlignment.Center);
heading1Style.setVerticalAlignment(VerticalAlignment.Center);
heading1Style.getFont().setName("Century Gothic");
heading1Style.getFont().setBold(true);
heading1Style.getFont().setSize(11);
heading1Style.getFont().setColor(Color.GetWhite());
heading1Style.setIncludeBorder(false);
heading1Style.setIncludePatterns(true);
heading1Style.getInterior().setColor(Color.FromArgb(32, 61, 64));

IStyle percentStyle = workbook.getStyles().get("Percent");
percentStyle.setIncludeAlignment(true);
percentStyle.setHorizontalAlignment(HorizontalAlignment.Right);
percentStyle.setIncludeFont(true);
percentStyle.getFont().setColor(Color.FromArgb(32, 61, 64));
percentStyle.getFont().setName("Century Gothic");
percentStyle.getFont().setBold(true);
percentStyle.getFont().setSize(14);

worksheet.getSheetView().setDisplayGridlines(false);
worksheet.getRange("C4:C7, C11:C23, G6:G7, G9").setStyle(currencyStyle);
worksheet.getRange("B2, B9, E2, E5").setStyle(heading1Style);
worksheet.getRange("G3").setStyle(percentStyle);

worksheet.getRange("E6:G6").getBorders().get(BordersIndex.EdgeBottom).setLineStyle(BorderLineStyle.Medium);
worksheet.getRange("E6:G6").getBorders().get(BordersIndex.EdgeBottom).setColor(Color.FromArgb(32, 61, 64));
worksheet.getRange("E7:G7").getBorders().get(BordersIndex.EdgeBottom).setLineStyle(BorderLineStyle.Medium);
worksheet.getRange("E7:G7").getBorders().get(BordersIndex.EdgeBottom).setColor(Color.FromArgb(32, 61, 64));

worksheet.getRange("E9:G9").getInterior().setColor(Color.FromArgb(32, 61, 64));
worksheet.getRange("E9:F9").setHorizontalAlignment(HorizontalAlignment.Left);
worksheet.getRange("E9:G9").setVerticalAlignment(VerticalAlignment.Center);
worksheet.getRange("E9:G9").getFont().setName("Century Gothic");
worksheet.getRange("E9:G9").getFont().setBold(true);
worksheet.getRange("E9:G9").getFont().setSize(11);
worksheet.getRange("E9:G9").getFont().setColor(Color.GetWhite());
worksheet.getRange("E3:F3").getBorders().setColor(Color.FromArgb(32, 61, 64));

添加条件格式

GcExcel支持Excel所有类型的条件格式,在这里我们会创建一个渐变的数据条条件格式用以可视化地展示支出收入比,并将它设置为只显示数据条而不显示单元格的值。

IDataBar dataBar = worksheet.getRange("E3").getFormatConditions().addDatabar();
dataBar.getMinPoint().setType(ConditionValueTypes.Number);
dataBar.getMinPoint().setValue(1);
dataBar.getMaxPoint().setType(ConditionValueTypes.Number);
dataBar.getMaxPoint().setValue("=TotalMonthlyIncome");
dataBar.setBarFillType(DataBarFillType.Gradient);
dataBar.getBarColor().setColor(Color.GetRed());
dataBar.setShowValue(false);

添加图表

创建一个柱状图来展示收入和支出的差距,为了让图表更加美观,我们会设置数据系列,图表区域,轴线, 轴刻度以及数据点的样式。

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

保存为Excel

最后,我们会将Workbook保存为一个名为SimpleBudget.xlsx的Excel文件。

workbook.save("SimpleBudget.xlsx");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于旅游景点主题的HTML网页设计——广东名胜古迹(7页)HTML+CSS

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Node项目文档生成工具standard-release

简介 爱美之心人皆有之。本文就介绍如何使用standadr-release自动生成好看的Git提交记录文档。 背景 作为一只程序猿&#xff0c;Git代码管理工具相信大家都用过&#xff0c;那么Git提交记录想必大家也都看过&#xff0c;不管是用什么工具查看&#xff0c;多多少少都感觉乱&…

GoC2018下册 第2课(C++画图)

慧通教育 慧通教育 709.改变身高&#xff08;下册第2课&#xff09; 登录 710.改变身高&#xff08;下册第2课&#xff09; 登录 711.改变体型&#xff08;下册第2课&#xff09; 登录 712.改变体型&#xff08;下册第2课&#xff09; 登录 713.完美身材&#xff08;下册第…

类型转换和优先级

目录 一、表达式求值 二、隐式类型转换 1、整型提升的意义 2、如何进行整型提升&#xff08;3个例子&#xff09; 三、算术转换 四、操作符的属性 1、优先级顺序表 2、运算法则 一、表达式求值 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 同样&#xff0c;有…

C++ Reference: Standard C++ Library reference: Containers: map: map: swap

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/swap-free/ 函数模板 <map> std::swap (map) template <class Key, class T, class Compare, class Alloc> void swap (map<Key,T,Compare,Alloc>& x, map<Key,T,Compare,Alloc…

融捷能源携手企企通,打造智能化、数字化采购平台

随着全球能源危机和环境污染问题日益突出&#xff0c;节能、环保有关行业的发展被高度重视&#xff0c;全球能源消费结构正向低碳化转型&#xff0c;加快发展可再生能源已经在全球范围内形成共识。 作为新能源产业的核心&#xff0c;锂电池技术和产业的发展也备受关注&#xff…

中断线程化

中断线程化 中断处理程序包括上半部硬件中断处理程序&#xff0c;下半部处理机制&#xff0c;包括软中断、tasklet、workqueue、中断线程化。 当一个外设中断发生后&#xff0c;内核会执行一个函数来响应该中断&#xff0c;这个函数通常被称为中断处理程序或中断服务例程。 上…

G631两级电液伺服阀控制器

G631系列两级电液伺服阀在电气液压伺服系统中作为执行元件&#xff0c;在伺服系统中液压执行机构同电气及气动执行机构相比&#xff0c;具有快速性好、单位重量输出功率大、传动平稳、抗干扰能力强等特点。另一方面&#xff0c;在伺服系统中传递信号和校正特性时多用电气元件。…

数据结构---散列表

散列表哈希函数散列表读写写读扩容总结散列表也叫作 哈希表&#xff08;hash table&#xff09;&#xff0c;这种数据结构提供了键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;的映射关系。只要给出一个Key&#xff0c;就可以高效查找到它所匹配的Value&…

如何使用HTML制作个人网站(如何搭建个人博客)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Datawhale 202212 设计模式 | 第二章 23种设计模式

23种设计模式讲解策略模式问题&#xff1a;解决方案&#xff1a;效果&#xff1a;适用场景&#xff1a;实际应用&#xff1a;优点缺点&#xff1a;实例&#xff1a;装饰 6问题&#xff1a;解决方案&#xff1a;效果&#xff1a;代理 7问题&#xff1a;解决方案&#xff1a;效果…

(附源码)springboot球鞋文化交流论坛 毕业设计 141436

目 录 摘要 1 1 绪论 1 1.1 研究意义 1 1.2研究方法 1 1.3论文结构与章节安排 1 2 球鞋文化交流论坛分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1数据增加流程 3 2.3.2数据修改流程 4 2.3. 数据删除流程 4 2.3 系统功能分析 4 2.3.1 功能性分析 4 2.3.2 非功能性分析 5 …

【MySQL】说透锁机制(二)行锁 加锁规则 之 范围查询(你知道会锁表吗?)

本文会按照 聚集集索->唯一索引->普通索引 的顺序 地毯式分析 范围查询中 <、<、>、> 的行锁情况&#xff0c;锁表分析在唯一索引 章节&#xff0c;万字长文&#xff0c;力求分析全面&#xff0c;很硬核全网独一份&#xff0c;别忘了收藏&#xff01; 当然如…

中学课程辅导杂志中学课程辅导杂志社中学课程辅导编辑部2022年第34期目录

教育视点《中学课程辅导》投稿&#xff1a;cn7kantougao163.com 基于整体英语教学理念的初中英语读写课研究 徐杰; 3-5 初中语文阅读教学的有效追问策略 徐生; 6-8 初中音乐教学中融入美育的实践探讨 张静; 9-11 “让学引思”理念下的初中物理高效课堂构建 张敏…

部署Neo4j +Rasa+Rasa UI

一、前言 最近在学习kbqa&#xff0c;调研时发现gitee上有关于多轮对话系统源码&#xff0c;该仓库主要是基于rasa框架&#xff08;python语言&#xff09;实现&#xff0c;并且带有web的UI配置&#xff0c;相当于比较全面的对话平台。Rasa UI 可以基于客户已有的平台&#xf…

西电雨课堂测试大合集【导航】

文章目录基础写作 一、二科学道德与学风研究生的压力与心理健康学术规范与论文写作中国传统文化✨感谢各位博主的分享&#xff01; &#x1f4d2;我在这里只是进行了一些整理&#xff0c;方便大家查找。 ⚠️大家看完可以给博主们点点赞、收藏、关注。&#x1f601; 祝各位学业…

Linux机器安装Nginx配置并实现双向认证

Linux机器安装Nginx配置并实现双向认证 一.Nginx的安装配置 Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下&#xff0c;Nginx是Apache服务器不错的…

TiDB | TiDB在5A级物流企业核心系统的应用与实践

TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最后前言 历经了近半年的测试验证和迁移准备&#xff0c;神州金库3.0核心系统 WMS 正式从 MyS…

力扣(LeetCode)152. 乘积最大子数组(C++)

序列dp f[i]f[i]f[i] 表示以 iii 结尾的连续子数组的最大乘积&#xff0c;d[i]d[i]d[i] 表示以 iii 结尾的连续子数组的最小乘积 。 如果只有正数&#xff0c;我们只需要考虑最大乘积 f[i]f[i]f[i] &#xff1b;有负数&#xff0c;需要考虑与负数相乘的数&#xff0c;越小越好…

【unity】基础交互入门(碰撞交互事件OnTriggerEnter和OnCollisionEnter)

一、碰撞交互事件OnTriggerEnter 1、在场景中添加两个几何体&#xff08;例如Cube和Sphere&#xff09; 2、添加Rigidbody&#xff08;刚体&#xff09;component 点击Cube&#xff08;正方体&#xff09;对象&#xff0c;在面板找到这个按钮&#xff0c;添加component 搜索…