此图像有一个空的 alt 属性;它的文件名为 asposecells-for-java-e1558954178996.jpg

Aspose.Cells for Java v19.11 已发布,其中包含许多新功能和升级。通过提供基于某些标准的排序和隐藏数据来获得用于报告和演示的紧凑信息,从而增强了数据透视表处理。现在可以使用 QueryTable 作为数据源读取和写入表。这不是此版本的结束,而是一长串新功能的开始,例如通过添加 CellArea 修改现有验证、检索 OData 连接信息和获取单元格值的文本宽度以获得更好的布局。此版本的所有详细信息都可以在每个新版本发布的发行说明 中找到。让我们一一来看看这些令人兴奋的新功能。

使用 Java 对 Excel 数据透视表中的数据进行排序和隐藏

在某些情况下,数据透视表中需要清晰的信息。我们可能需要一些功能来对数据透视表中的数据进行排序,然后根据某些标准隐藏行。以下示例代码演示了此功能

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-cells/Aspose.Cells-for-Java
// 输出目录的路径。
String sourceDir = Utils.Get_SourceDirectory();
String outputDir = Utils.Get_OutputDirectory();

Workbook workbook = new Workbook(sourceDir + "PivotTableHideAndSortSample.xlsx");

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

PivotTable pivotTable = worksheet.getPivotTables().get(0);
CellArea dataBodyRange = pivotTable.getDataBodyRange();
int currentRow = 3;
int rowsUsed = dataBodyRange.EndRow;

// 分数降序排列
PivotField field = pivotTable.getRowFields().get(0);
field.setAutoSort(true);
field.setAscendSort(false);
field.setAutoSortField(0);

pivotTable.refreshData();
pivotTable.calculateData();

// 隐藏分数小于 60 的行
while (currentRow < rowsUsed)
{
	Cell cell = worksheet.getCells().get(currentRow, 1);
	double score = (double) cell.getValue();
	if (score < 60)
	{
		worksheet.getCells().hideRow(currentRow);
	}
	currentRow++;
}

pivotTable.refreshData();
pivotTable.calculateData();

// 保存 Excel 文件
workbook.save(outputDir + "PivotTableHideAndSort_out.xlsx");

下图显示了在示例数据上运行此代码之前和之后的数据透视表。

有关更多信息和示例文件,请访问以下文章。

使用查询表数据源读写表

以查询表作为数据源的表非常常见。我们可能需要读取此类表格并修改它们,例如显示总数等。之前此功能可用,但提供了对 XLS 文件的支持。这是一个示例代码,它读取一个表格,然后将其更改为最后显示总数。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-cells/Aspose.Cells-for-Java
// 输出目录的路径。
String sourceDir = Utils.Get_SourceDirectory();
String outputDir = Utils.Get_OutputDirectory();

// 加载工作簿对象
Workbook workbook = new Workbook(sourceDir + "SampleTableWithQueryTable.xls");

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

ListObject table = worksheet.getListObjects().get(0);

// 如果是查询表,检查数据源类型
if (table.getDataSourceType() == TableDataSourceType.QUERY_TABLE)
{
	table.setShowTotals(true);
}

// 保存文件
workbook.save(outputDir + "SampleTableWithQueryTable_out.xls");

下图显示了 setShowTotals() 函数的工作原理:

您可以在以下文章中获得示例文件和更多详细信息:

获取 OData 连接信息

OData 可用于从 RESTful API 获取提要或数据,这些 API 也可用于 Excel 文件。可以使用 Workbook 的 DataMashup 类使用 Aspose.Cells API 从 Excel 文件中检索此信息。从具有 PowerQueryFormula 和 PowerQueryFormulaItem 的 PowerQueryFormulas 属性中获取所需信息。

以下代码片段演示了如何使用这些类来检索 OData 信息。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-cells/Aspose.Cells-for-Java
// 目录的路径。
String sourceDir = Utils.Get_SourceDirectory();

Workbook workbook = new Workbook(sourceDir + "ODataSample.xlsx");
PowerQueryFormulaCollction PQFcoll = workbook.getDataMashup().getPowerQueryFormulas();
for (Object obj : PQFcoll)
{
    PowerQueryFormula PQF = (PowerQueryFormula)obj;
    System.out.println("Connection Name: " + PQF.getName());
    PowerQueryFormulaItemCollection PQFIcoll = PQF.getPowerQueryFormulaItems();
   for (Object obj2 : PQFIcoll)
    {
        PowerQueryFormulaItem PQFI = (PowerQueryFormulaItem)obj2;
        System.out.println("Name: " + PQFI.getName());
        System.out.println("Value: " + PQFI.getValue());
    }
}

下图显示了上述代码示例中用于获取 OData 连接信息的示例文件。

这是使用示例文件的程序输出:

本文包含一个示例文件和更多详细信息以检查此功能:

将 CellArea 添加到现有验证

假设您有一个 Excel 文件,其中 validation 工作正常。每当将单元格区域添加到验证中时,Aspose.Cells 总是执行检查以验证该区域是否已经存在。如果您的 Excel 文件中有大量验证,您可能会在此检查期间面临性能损失。要处理此问题,需要配置 API 以控制执行此检查。 Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge)) 方法用于获取此控件,因为参数 checkIntersection 指示 API 检查此新添加区域与现有区域的交集。如果将此参数设置为 false,则将禁用对其他区域的检查。如果要检查应用的区域,请将 checkEdge 参数设置为 true。请注意,如果将左上区域重置为新区域,则会重建内部设置。但是,如果您确定新区域不是左上角区域,则将属性 checkEdge 的值设置为 false。

您可以尝试以下示例代码,该示例代码演示了将新的 CellArea 添加到 Excel 文件中已经存在的验证中。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-cells/Aspose.Cells-for-Java
// 目录的路径。
String sourceDir = Utils.Get_SourceDirectory();
String outputDir = Utils.Get_OutputDirectory();

Workbook workbook = new Workbook(sourceDir + "ValidationsSample.xlsx");

// 访问第一个工作表。
Worksheet worksheet = workbook.getWorksheets().get(0);

// 访问工作表的 Validations 集合
Validation validation = worksheet.getValidations().get(0);

// 创建您的单元格区域。
CellArea cellArea = CellArea.createCellArea("D5", "E7");

// 将单元格区域添加到验证
validation.addArea(cellArea, false, false);

// 保存输出工作簿。
workbook.save(outputDir + "ValidationsSample_out.xlsx");

请查看以下文章以获取更多详细信息和示例文件以测试此功能。

获取单元格值的文本宽度

更好的数据呈现布局是每个开发者的目标。为此,API 需要在格式化报告/演示文稿时计算单元格宽度。为了帮助开发人员,Aspose.Cells 在 CellsHelper 类中提供了 GetTextWidth() 函数。使用此函数,开发人员将根据文本长度和样式获取单元格中的文本宽度。以下示例代码通过获取单元格中值的文本宽度来演示 CellsHelper.GetTextWidth) 的用法。

以下示例代码演示了此功能:

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-cells/Aspose.Cells-for-Java
// 输出目录的路径。
String sourceDir = Utils.Get_SourceDirectory();Workbook workbook = new Workbook(sourceDir + "GetTextWidthSample.xlsx");

System.out.println("Text width: " + CellsHelper.getTextWidth(workbook.getWorksheets().get(0).getCells().get("A1").getStringValue(), workbook.getDefaultStyle().getFont(), 1));

您可以在此处下载示例文件。

其他增强功能

以下是此版本中进行的一些增强和改进:

  • 改进了 Cells.importCSV 函数以避免出现“字符串值不能超过 255 个字符”异常
  • 对大型数据集的 Cells.removeDupilcates 性能进行了改进
  • 径向图渲染到 HTML 得到改进
  • 在转换为 PNG 期间,轴的缩放增加了更高的精度
  • 在更新数据透视表的源数据后进行了增强以避免损坏。
  • 使用此版本获得更准确的俄语(自定义)日期格式输出
  • 使LoadFilter无错误考虑所需的工作表
  • 将 Excel 文件转换为 EMF 时保持适当的边框
  • 改进了 SheetRender 以提供更准确的页数
  • 图表到图像的渲染得到了增强。您将在输出图像中获得具有相同样式和正确值的数据标签
  • Cell.setHtmlString() 函数改进了处理超链接和 HTML 标记/脚本。

以下是测试新版本时可以参考的一些重要资源: