Aspose.Words For JAVA 动态制作多维度表格(涵2024最新无水印包)

2024-02-20 08:36

本文主要是介绍Aspose.Words For JAVA 动态制作多维度表格(涵2024最新无水印包),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 全网最全Aspose.Words For JAVA 高级使用教程:

CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/133989664?spm=1000.2115.3001.5352

 运行截图:

  1.  所谓多维度表格通常包含多个维度, 每个维度都代表一种数据属性,多维度表格可以用于数据分析,通过不同的维度对数据进行拆分和聚合,以便更好的了解数据的分布和特征。
  2.  在本教程当中,表格是循环动态创建,多维度表示根据学院下每个专业的对口率进行统计, 小计为人数的求和还有专业对口率的平均值,总计为人数的总和还有整组数据的对口率求和。
  3. 这个表格不是创建出来样式再去填充数据,而是根据数据循环动态的创建出来表格,这样可灵活性高,用于多数据集合。

   总体的设计方法是

  •  创建模拟数据List<tabularData>
  •  添加表头及设置表头样式
  • 设置表格表体的格式
  • 根据集合循环添加数据行、小计行
  • 添加总计行
  • 结束表格
  • 移动光标至末尾

制作流程:

本章节所有都在一个类当中进行, 包含两个字类和多个方法。简单明了, 文末涵代码

1.Main 方法看整体流程:

        在main方法当中, 具体的创建文档和保存以及如何具体加载Aspose.Word For java 2024 SDK的步骤在:(全网最全Aspose.Words For JAVA 教程)https://blog.csdn.net/LiHaoHang6/article/details/133989664

2:创建数据对象

3.添加四列的动态表格总方法

3.1 添加表头并设置格式

3.2 设置表体的格式

 3.3 添加数据行

3.4 添加总计行

整体代码提供:

 另外可以关注这篇(全网最全Aspose.Words For JAVA 教程)https://blog.csdn.net/LiHaoHang6/article/details/133989664

import com.aspose.words.*;
import com.aspose.words.Shape;
import lombok.Data;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/***   动态表格 方法类 测试* */
public class Demo3 {//表格中的总计比例 = (每个组织小计的比例相加/组织数)static double tableTotalRate = 0;public static void main(String[] args) throws Exception {// 创建文档Document doc = new Document();DocumentBuilder builder = new DocumentBuilder(doc);// 模拟数据List<tabularData> collegeDataList = getMocktabularData();//模拟表头String[] header = new String[]{"学院", "专业", "人数", "对口率"};addFourRowDataTable(builder, header, collegeDataList);// 保存文档String fileName = "output/AsposeWord1" + new SimpleDateFormat("MMddHHmmss").format(new Date()) + ".docx";doc.save(fileName);}/**********************************************************************************************************//*** 添加四列的动态表格* */private static void addFourRowDataTable(DocumentBuilder builder,String[] header,List<tabularData> collegeDataList) throws Exception {// 添加表格builder.startTable();// 添加表头并设置格式addTableHeader(builder,header);//设置表体的格式setTableBodyFormat(builder);// 根据集合循环添加数据行for (tabularData collegeData : collegeDataList) {addDataRow(builder, collegeData);}// 添加总计行addTotalRow(builder, collegeDataList);// 结束表格builder.endTable();//移动光标至末尾builder.moveToDocumentEnd();}/*** 添加数据行* */private static void addDataRow(DocumentBuilder builder, tabularData collegeData) throws Exception {//开始表格builder.insertCell();builder.write(collegeData.getFirstName());//垂直向下合并builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);// 第二层循环开始循环添加每个组织下的下层组织for (int i =0;i <collegeData.getTableBodyDataList().size(); i++){//因为第一列要作为水平合并,所以判断if (i!=0){builder.insertCell();builder.write("");builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);}//添加组织builder.insertCell();builder.write(collegeData.getTableBodyDataList().get(i).getName());builder.getCellFormat().setVerticalMerge(CellMerge.NONE);//添加组织内统计值builder.insertCell();builder.write(String.valueOf(collegeData.getTableBodyDataList().get(i).getCount()));builder.getCellFormat().setVerticalMerge(CellMerge.NONE);//添加组织内比例builder.insertCell();builder.write(String.format("%.2f%%", collegeData.getTableBodyDataList().get(i).getRate()));builder.getCellFormat().setVerticalMerge(CellMerge.NONE);builder.endRow();}// 添加小计行builder.insertCell();builder.write("");builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);builder.insertCell();builder.write("小计");builder.getCellFormat().setVerticalMerge(CellMerge.NONE);//人数总和builder.insertCell();builder.write(String.valueOf(collegeData.getSubtotalStudentCount()));builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);//比例平均builder.insertCell();double dataRowRate =collegeData.getSubtotalMatchingRate()/collegeData.getTableBodyDataList().size();builder.write(String.format("%.2f%%",dataRowRate));builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);//这里要把每次循环的小计值累加,以便最后求总计tableTotalRate+=dataRowRate;builder.endRow();}/*** 添加总计* */private static void addTotalRow(DocumentBuilder builder, List<tabularData> collegeDataList) throws Exception {//添加单元格builder.insertCell();builder.write("总计");//因为总计这一行没有那么多的单元格,所以要水平合并builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);builder.insertCell();builder.write("");builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);//将之前小计的人数求和int totalCount = collegeDataList.stream().mapToInt(tabularData::getSubtotalStudentCount).sum();builder.insertCell();builder.write(String.valueOf(totalCount));builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);builder.insertCell();builder.write(String.valueOf(String.format("%.2f%%",tableTotalRate/collegeDataList.size())));builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);builder.endRow();}/*** 添加表头* */private static void addTableHeader(DocumentBuilder builder, String[] headers ) throws Exception {//段落的对齐方式设置为居中对齐builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);/**居中***///方法将清除单元格的所有格式设置,包括字体、颜色、边框等。如果您只想清除特定的格式设置,可以使用其他适当的方法,例如clearFormatting()方法的重载版本,该版本接受一个参数,用于指定要清除的格式设置类型。builder.getCellFormat().clearFormatting();//设置单元格的宽度  磅(points)。builder.getCellFormat().setWidth(70.0);//这只单元格的高度  磅(points)。builder.getRowFormat().setHeight(25.0);//设置单元格垂直builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);//单元格背景颜色设置builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(13, 112, 223));//单元格边框颜色设置builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1));//设置字体颜色builder.getFont().setColor(new Color(255, 255, 255));//这行代码禁用单元格中的文本自动换行功能builder.getCellFormat().setWrapText(false);//这行代码启用单元格中文本的自动缩放以适应单元格大小。//builder.getCellFormat().setFitText(true);//这行代码设置行的高度规则为精确值。//builder.getRowFormat().setHeightRule(HeightRule.EXACTLY);//这行代码设置行的边框线样式为浮雕3D效果。//builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D);for (String header : headers) {builder.insertCell();builder.write(header);}builder.endRow();}/*** 设置表体的格式* */public static void setTableBodyFormat(DocumentBuilder builder) throws Exception {//清除格式builder.getCellFormat().clearFormatting();//设置单元格垂直builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);//单元格背景颜色设置builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(209, 230, 250));//单元格边框颜色设置builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1));//设置字体颜色builder.getFont().setColor(new Color(1, 1, 1));//这行代码禁用单元格中的文本自动换行功能builder.getCellFormat().setWrapText(false);}//下列代码提前模拟好了三个学院的数据,可以参考private static List<tabularData> getMocktabularData() {return Arrays.asList(new tabularData("大西洋赛区", Arrays.asList(new TableBodyData("顿凯尔特人专业/高职", 500, 85.47),new TableBodyData("篮网专业/高职", 400, 90.07),new TableBodyData("尼克斯专业/高职", 300, 79.54),new TableBodyData("76人专业/高职", 200, 83.27))),new tabularData("中部赛区", Arrays.asList(new TableBodyData("公牛专业/高职", 300, 85.47),new TableBodyData("骑士专业/高职", 200, 90.07),new TableBodyData("活塞专业/高职", 100, 79.54))),new tabularData("太平洋赛区", Arrays.asList(new TableBodyData("湖人专业/高职", 200, 83.27),new TableBodyData("勇士专业/高职", 100, 85.47),new TableBodyData("太阳专业/高职", 50, 90.07))));}
}
/*表格对象, tabularData和TableBodyData 的关系是一对多, 这样就可以满足表格的设计,一个院系下有多个专业*/
@Data
class tabularData {//表格第一列的名称private String firstName;private List<TableBodyData> tableBodyDataList;public tabularData(String firstName, List<TableBodyData> majorDataList) {this.firstName = firstName;this.tableBodyDataList = majorDataList;}//方法用于计算小计的人数总和public int getSubtotalStudentCount() {return tableBodyDataList.stream().mapToInt(TableBodyData::getCount).sum();}//方法用于计算小计的率总和public double getSubtotalMatchingRate() {return tableBodyDataList.stream().mapToDouble(TableBodyData::getRate).sum();}
}/*表体对象*/
@Data
class TableBodyData {private String name;private int count;private double rate;public TableBodyData(String name, int count, double rate) {this.name = name;this.count = count;this.rate = rate;}
}

 运行结果:

这篇关于Aspose.Words For JAVA 动态制作多维度表格(涵2024最新无水印包)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727616

相关文章

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建