Aspose.Cells for .NET 17.3.0 发行说明

钥匙 概括 类别
CELLSNET-45037 支持数据透视表的自定义总计和总计标签 新功能
CELLSNET-45156 同步两个网格的分页(Aspose.Cells.GridWeb) 新功能
CELLSNET-45140 仅验证更新的单元格并忽略其他单元格的验证(Aspose.Cells.GridWeb) 新功能
CELLSNET-45158 数据透视表数据源的变化增加了额外的 LinkSource 强化
CELLSNET-45168 形状稍微倾斜/倾斜,其文本“1”位置已更改 漏洞
CELLSNET-45163 将工作表渲染为图像时,形状中的文本会反转 漏洞
CELLSNET-45161 电子表格中图片的角度略有不同 漏洞
CELLSNET-45159 自动形状对象呈现不正确 漏洞
CELLSNET-45138 PrintArea 无法正确转换图像 漏洞
CELLSNET-45136 Excel 转换为 PDF 时框会旋转 漏洞
CELLSNET-45182 生成的电子表格无法在不修复的情况下加载到 Excel 中 漏洞
CELLSNET-45143 Aspose.Cells 在保存到 XLSB 时生成带有报告筛选器的损坏数据透视表 漏洞
CELLSNET-45135 将 HTML 导入为 XLSX 时图像重叠 漏洞
CELLSNET-45134 将 HTML 导入为 XLSX 时列宽丢失 漏洞
CELLSNET-45133 将 HTML 导入为 XLSX 时内容样式丢失 漏洞
CELLSNET-45132 以 XLSX 格式保存时,HTML 中启用的 WrapText 丢失 漏洞
CELLSNET-45127 将 HTML 导入为 XLSX 后,字体样式和大小发生了变化 漏洞
CELLSNET-45115 添加一些数据后刷新数据透视表会生成损坏的 Excel 文件 漏洞
CELLSNET-45109 刷新按日期列分组的数据透视表时出错 漏洞
CELLSNET-45081 数据透视表的合并标签功能不起作用 漏洞
CELLSNET-45076 对齐不起作用,文本超出 Excel 中的单元格以转换为 HTML 漏洞
CELLSNET-45057 HTML 到 XLSX 的转换不正确 漏洞
CELLSNET-45040 一些数据透视字段项呈现为日期值而不是 Numbers 漏洞
CELLSNET-40265 输入文件的文化问题 漏洞
CELLSNET-45142 使用外部范围时 VLOOKUP 函数出现问题 漏洞
CELLSNET-45150 无法展开或折叠工作表的最后一行 漏洞
CELLSNET-45139 分页不适用于一页上的两个 GridWeb 漏洞
CELLSNET-45137 在 Internet Explorer 11 上运行时,分组的行或列在 GridWeb 中有问题 漏洞
CELLSNET-45203 将 Excel 文件呈现为 PDF 时字符重叠 漏洞
CELLSNET-45196 输出打印输出乱码 XPS 漏洞
CELLSNET-45187 标签应按照 TrueType 规范按升序排列 漏洞
CELLSNET-45169 警告:区域的最大大小为 262144 字节,位于 SheetRender.ToImage on Mono 漏洞
CELLSNET-45167 SheetRender.ToImage 渲染内容乱码不完整 Mono 漏洞
CELLSNET-45166 SheetRender.ToImage 只渲染页眉和页脚 Mono 漏洞
CELLSNET-43732 渲染到 EMF 并粘贴到 Word 中导致文本在结果 PDF 中重叠 漏洞
CELLSNET-45186 面积图未显示在 PDF 出口 漏洞
CELLSNET-45178 在将图表渲染为图像时修剪轴标签 漏洞
CELLSNET-45177 将图表渲染为图像时轴标签丢失 - II 漏洞
CELLSNET-45151 图表在将电子表格呈现为 PDF 时丢失所有格式 漏洞
CELLSNET-45147 将电子表格呈现为 PDF 时缺少图表 漏洞
CELLSNET-44998 将电子表格转换为 PDF 后图表的数据标签发生变化 漏洞
CELLSNET-44984 第二张图中的趋势线在输出中未正确呈现 PDF 漏洞
CELLSNET-41539 绿色椭圆艺术字/图片在 PDF 中的图表周围错误呈现 漏洞
CELLSNET-45197 Range.MoveTo 不移动数据验证和条件格式 漏洞
CELLSNET-45183 ActiveX 控件 (ComboBox) 的“锁定”属性未更改 漏洞
CELLSNET-45179 在 XLSX 文件上设置代号无法正常工作 虫子
CELLSNET-45175 图片格式不适用于 XLSX 文件 漏洞
CELLSNET-45174 DeleteRange 后 Print_Area 范围中断 漏洞
CELLSNET-45173 XLSX 保存后文件损坏 漏洞
CELLSNET-45171 移动范围会导致内部范围缩小为一个单元格长 漏洞
CELLSNET-45162 删除范围后图表未正确计算/刷新 漏洞
CELLSNET-45155 Cells.InsertColumns/DeleteColumns 导致 ListObject/Table 出现“#REF” 漏洞
CELLSNET-45154 移动范围不会更新另一张纸上的引用 漏洞
CELLSNET-45145 无法删除 CameraTool 对象 漏洞
CELLSNET-45060 简单的加载和保存操作后按钮的字体设置发生了变化 漏洞
CELLSNET-43722 文件错误:数据可能已丢失,打开时被Excel抛出XLS 漏洞
CELLSNET-45190 计算 WORKDAY 公式时出现异常 例外
CELLSNET-45199 Excel 到 PDF - 索引超出数组异常 例外

公共 API 和向后不兼容的更改

以下是对公众 API 所做的任何更改的列表,例如添加、重命名、删除或弃用成员,以及对 Aspose.Cells for .NET 所做的任何非向后兼容更改。如果您对列出的任何更改有疑虑,请在Aspose.Cells 支持论坛。

自定义数据透视表的全球化设置

使用最近的 17.3.0 或更高版本,开发人员可以在 Excel 文件中自定义数据透视表的全球化设置。他们可能会根据要求更改数据透视表总计、小计、总计、所有项目、多个项目、列标签、行标签、空白值文本。开发人员可以将此功能合并到他们的 .NET 应用程序中,而不管 Excel 文本语言是什么。它可能是阿拉伯语、印地语、波兰语等。下面列出了所有新支持的方法:

  1. 添加 GlobalizationSettings.GetPivotTotalName() 方法 它在数据透视表中获取“总计”标签的名称。当 PivotTable 的数据区域中包含两个或多个 PivotField 时,开发人员可以重写此方法。
  2. 添加 GlobalizationSettings.GetPivotGrandTotalName() 方法 它在数据透视表中获得“总计”标签的名称。
  3. 添加 GlobalizationSettings.GetMultipleItemsName() 方法 它获取数据透视表中“(多项)”标签的名称。
  4. 添加 GlobalizationSettings.GetAllName() 方法 它获取数据透视表中“(全部)”标签的名称。
  5. **添加 GlobalizationSettings.GetColumnLablesName()**方法 - 它获取数据透视表中“列标签”标签的名称。
  6. 添加 GlobalizationSettings.GetRowLablesName() 方法 它获取数据透视表中“Row Labels”标签的名称。
  7. 添加 GlobalizationSettings.GetEmptyDataName() 方法 它在数据透视表中获取“(空白)”标签的名称。
  8. 添加 GlobalizationSettings.GetSubTotalName(PivotFieldSubtotalType subTotalType) 方法 它在数据透视表中获取“PivotFieldSubtotalType”类型的名称。

此代码示例详细说明了如何自定义数据透视表的全球化设置。它创建了一个从基类 GlobalizationSettings 派生的 CustomPivotTableGlobalizationSettings 类,并覆盖了所有必要的方法。这些方法返回数据透视表合计、小计、总计、所有项目、多个项目、列标签、行标签、空白值的自定义文本。然后它将此类的对象分配给 Workbook.GlobalizationSettings 属性。该代码加载包含数据透视表的源 Excel 文件,刷新并计算其数据并将其保存为输出 PDF 文件。开发人员还可以将工作簿保存为任何支持的格式。

.NET, C#

 //Load your excel file

Workbook wb = new Workbook("samplePivotTableGlobalizationSettings.xlsx");



//Setting Custom Pivot Table Globalization Settings

wb.Settings.GlobalizationSettings = new CustomPivotTableGlobalizationSettings();



//Hide first worksheet that contains the data of the pivot table

wb.Worksheets[0].IsVisible = false;



//Access second worksheet

Worksheet ws = wb.Worksheets[1];



//Access the pivot table, refresh and calculate its data

PivotTable pt = ws.PivotTables[0];

pt.RefreshDataFlag = true;

pt.RefreshData();

pt.CalculateData();

pt.RefreshDataFlag = false;



//Pdf save options - save entire worksheet on a single pdf page

PdfSaveOptions options = new PdfSaveOptions();

options.OnePagePerSheet = true;



//Save the output pdf 

wb.Save("outputPivotTableGlobalizationSettings.pdf", options);



// it derives a new class, called CustomPivotTableGlobalizationSettings, from the GlobalizationSettings class, as follows:

private class CustomPivotTableGlobalizationSettings : GlobalizationSettings

{

    //Gets the name of "Total" label in the PivotTable.

    //You need to override this method when the PivotTable contains two or more PivotFields in the data area.

    public override string GetPivotTotalName()

    {

        Debug.WriteLine("---------GetPivotTotalName-------------");

        return "AsposeGetPivotTotalName";

    }



    //Gets the name of "Grand Total" label in the PivotTable.

    public override string GetPivotGrandTotalName()

    {

        Debug.WriteLine("---------GetPivotGrandTotalName-------------");

        return "AsposeGetPivotGrandTotalName";

    }



    //Gets the name of "(Multiple Items)" label in the PivotTable.

    public override string GetMultipleItemsName()

    {

        Debug.WriteLine("---------GetMultipleItemsName-------------");

        return "AsposeGetMultipleItemsName";

    }



    //Gets the name of "(All)" label in the PivotTable.

    public override string GetAllName()

    {

        Debug.WriteLine("---------GetAllName-------------");

        return "AsposeGetAllName";

    }





    //Gets the name of "Column Labels" label in the PivotTable.

    public override string GetColumnLablesName()

    {

        Debug.WriteLine("---------GetColumnLablesName-------------");

        return "AsposeGetColumnLablesName";

    }



    //Gets the name of "Row Labels" label in the PivotTable.

    public override string GetRowLablesName()

    {

        Debug.WriteLine("---------GetRowLablesName-------------");

        return "AsposeGetRowLablesName";

    }



    //Gets the name of "(blank)" label in the PivotTable.

    public override string GetEmptyDataName()

    {

        Debug.WriteLine("---------GetEmptyDataName-------------");

        return "(blank)AsposeGetEmptyDataName";

    }



    //Gets the name of PivotFieldSubtotalType type in the PivotTable.

    public override string GetSubTotalName(PivotFieldSubtotalType subTotalType)

    {

        Debug.WriteLine("---------GetSubTotalName-------------");



        switch (subTotalType)

        {

            case PivotFieldSubtotalType.Sum:

                return "AsposeSum";//polish



            case PivotFieldSubtotalType.Count:

                return "AsposeCount";



            case PivotFieldSubtotalType.Average:

                return "AsposeAverage";



            case PivotFieldSubtotalType.Max:

                return "AsposeMax";



            case PivotFieldSubtotalType.Min:

                return "AsposeMin";



            case PivotFieldSubtotalType.Product:

                return "AsposeProduct";



            case PivotFieldSubtotalType.CountNums:

                return "AsposeCount";



            case PivotFieldSubtotalType.Stdev:

                return "AsposeStdDev";



            case PivotFieldSubtotalType.Stdevp:

                return "AsposeStdDevp";



            case PivotFieldSubtotalType.Var:

                return "AsposeVar";



            case PivotFieldSubtotalType.Varp:

                return "AsposeVarp";



        }



        return "AsposeSubTotalName";

    }

}//End CustomPivotTableGlobalizationSettings

在 GridWeb 控件的页面更改事件上执行客户端脚本

使用 GridWeb 控件的 OnPageChangeClientFunction 属性,开发人员可以在页面更改事件上执行客户端脚本,因为 GridWeb 控件可以在多个页面中保存数据。他们可能需要在他们的网络应用程序中显示当前页面索引。

  1. 在 GridWeb 控件中添加 OnPageChangeClientFunction 属性 它获取或设置页面索引更改时要调用的客户端脚本函数。它仅在 EnablePaging 为真时生效。

此代码示例显示了 OnPageChangeClientFunction 属性的使用。它使用名为 MyOnPageChange 的客户端函数设置属性。现在,每当用户更改 GridWeb 页面时,它都会调用客户端函数 MyOnPageChange 打印当前页面索引安慰:

.NET, C#

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestGridWeb.aspx.cs" Inherits="TestGridWeb" %>



<%@ Register TagPrefix="acw" Namespace="Aspose.Cells.GridWeb" Assembly="Aspose.Cells.GridWeb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Test GridWeb</title>

    <script type="text/javascript">

        function MyOnPageChange(index) {

            console.log("current page is:" + index);

        }

    </script>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <div>

                <b>GridWeb Version:&nbsp </b>

                <asp:Label ID="lblVersion" runat="server" Text="Label"></asp:Label>

                <br />

            </div>

            <acw:GridWeb ID="GridWeb1"

            runat="server" XhtmlMode="True"

            Height="504px" Width="1119px" EnablePaging="true"

            OnPageChangeClientFunction ="MyOnPageChange">

            </acw:GridWeb>

        </div>

    </form>

</body>

</html>

//........................................................

// It is the client side function MyOnPageChange that will be executed because of setting OnPageChangeClientFunction ="MyOnPageChange"property in GridWeb.

function MyOnPageChange(index) {

    console.log("current page is:" + index);

}

验证整个 Excel 工作表

默认情况下,GridWeb 仅验证更新的单元格,而不验证整个 Excel 工作表。但是,如果开发人员需要在 GridWeb 向服务器发送请求之前在客户端验证整个 Excel 工作表,那么您应该将 acwmain.js 中的 needValidateall 变量设置为 true。

使用示例

请查看 Aspose.Cells Wiki 文档中添加的帮助主题列表:

  1. 自定义数据透视表的全球化设置
  2. 在 GridWeb 页面更改时执行客户端功能
  3. 验证整个工作表,而不仅仅是更新的单元格