服务端表格组件 GrapeCity Documents for Excel 更新说明

此版本的主要亮点包括支持动态数组公式、加入了来自 Web 的外部工作簿链接,以及新的计算引擎功能。

动态数组公式

Excel 表格软件在 2018 年推出了动态数组公式的概念,以基于一个公式将多个结果返回到一系列单元格,也称为溢出范围功能。这些公式用于创建唯一值列表(删除重复项)、排序列表、输出过滤的数据范围等等。此外,现有函数可以利用相同的溢出范围功能。

本次更新,GcExcel 可通过代码向 Excel 文件添加动态数组公式的支持。新的 workbook.AllowDynamicArray 将允许您启用/禁用工作表中的动态数组公式。启用后,您可以使用这七个新函数和动态数组公式来提供应用程序所需的结果:

  • FILTER
  • RANDARRAY
  • SEQUENCE
  • SINGLE
  • SORT
  • SORTBY
  • UNIQUE

此外,GcExcel 还添加了两个新错误提示:

  • #Spill! - 表示公式返回多个结果,但不能将这些值返回到相邻单元格
  • #Calc! - 当计算引擎遇到当前不支持的场景时发生

支持新的公式函数

GcExcel 表格组件在其功能集中添加了新的函数,可帮助用户在电子表格中以编程的方式使用更多 Excel 计算公式。

本次更新支持以下功能:

  • WEBSERVICE:帮助从网络服务中提取数据
  • FILTERXML:从 XML 返回特定数据
  • ASC:将字符串中的全角(双字节)字母或片假名更改为半角(单字节)字符(对 JP 和 CN 文本有用)
  • DBCS:将字符串中的半角(单字节)字母转换为全角(双字节)字符(对 JP 和 CN 文本很有帮助)
  • JIS:将字符串中的半角(单字节)字母或片假名更改为全角(双字节)字符
  • XLOOKUP:支持近似和精确匹配、反向搜索和通配符 (* ?) 用于部分匹配和水平/垂直范围内的搜索
  • XMATCH:执行查找并返回垂直或水平范围内的位置。支持近似和精确匹配、反向搜索和部分匹配的通配符 (* ?)

与此同时,GcExcel 还在 IRange 界面中引入了 FormulaLocal 和 FormulaR1C1Local 属性,它们与新的 ASC、DBCS 和 JIS 函数一起使用,以检索或设置工作表单元格中的本地化公式。

如下图,显示了新的 WEBSERVICE 和 FILTERXML 函数的用法:


(函数可从 Web 服务中检索某个位置的天气数据)

支持来自 Web 的外部工作簿链接

在复杂的 Excel 文件中,计算公式通常会引用其他(或外部)工作簿的单元格或公式,为了跟踪这些公式,在本次更新中,GcExcel 不仅支持了外部工作簿的文件夹路径,还可以直接在 Excel 工作簿中引用 Web 上的工作簿。

借助这一特性,当这些工作簿在 Web 上时,使用GcExcel无需手动打开工作簿并复制数据便可以在 Excel 文件中使用。相反,参考外部工作簿,也无需在数据更改时进行重复数据输入或手动更新。

举例:假设多个不同的城市中心提供各种服务。所有这些中心都有一个集中的行政办公室。最终,需要对数据进行整体分析。但是,每个城市中心都在 Web 上的 Excel 工作簿中保留自己的数据集。与复制这些工作簿或复制部分数据相比,引用每个工作簿中的工作簿和/或单元格更容易,因此可以快速有效地完成家庭办公室的计算,消除重复的数据和工作。这也消除了任何手动更新的需要,因为计算将根据打开时引用的工作簿中的最新数据进行更新。

此外,GcExcel 还添加了向工作簿中的外部工作簿链接添加 Web 路径的支持。 IWorkbook.GetExcelLinkSources() 函数现在支持 Web 路径。如果外部数据发生更改,则调用 IWorkbook.UpdateExcelLinks() 方法以更新当前工作簿。 Web 上的工作簿可以通过以下方式访问并在公式属性中使用:


    IWorksheet worksheet = workbook.Worksheets[0];
    worksheet.Range["A1"].Formula = "='https://www.grapecity.com/documents-api-excel/demos/api/sample/[SourceWorkbook.xlsx]Sheet1'!A1";

                                

支持 PDF 导出图表

图表是Excel 电子表格的重要组成部分,大多数用于财务、销售、营销和医疗保健的 Excel 文档都会使用图表分析并提取汇总数据。 GcExcel 组件扩展了对 Java 平台中图表导出为 PDF 的功能支持。

动态设置工作簿的文档属性

GcExcel 加入新的 API 来设置工作簿上的文档属性,如在导出为 PDF 时,借助新的 IWorkbook.BuiltInDocumentPropertyCollection 内置属性集合,用户可以通过 workbook.BuiltInDocumentProperties 修改属性值。

IWorkbook.CustomDocumentProperties 是自定义属性的集合,用户可以使用“Add”方法来创建新的自定义文档属性或“AddLinkToContent(..)”方法来创建可以链接到命名单元格的新文档属性。

获取行和列分组信息

对于一份Excel 中的长报告,为了使其更易于管理,需要在工作表中展开或折叠组以隐藏某些信息或仅根据需要查看详细信息行/列。

假设您可以通过编程方式获取 Excel 工作表中分组的行或列。那么在这种情况下,它就可以帮助您轻松展开/折叠组,而不是打开工作表并手动进行。 为了解决这一问题,GcExcel表格组件新增了通过List RowGroupInfo和List ColumnGroupInfo列表类型获取行、列分组信息的API,借助该API可以实现以下功能:

  • 获取当前组的起始索引
  • 获取组的结束索引
  • 获取当前组的级别
  • 检查组是否折叠
  • 获取组的父行/列
  • 获取组的子行/列

最后,Expand() 或 Collapse() 方法可以帮助展开或折叠行或列。

将隐藏行复制到新范围

于需要隐藏某些行的场景,当您将行复制到其他范围时,也应该复制这些隐藏的行/列。 GcExcel 表格组件添加了新的 API IRange.Copy(IRange destination, PasteOption pasteOption) 来复制隐藏的行/列。 该 API 包括附加属性 AllowPasteHiddenRange,该属性将控制是否复制隐藏行/列的数据。

控制导出 JSON 文件的大小

GcExcel 现在可以通过新的 SerializationOptions.IgnoreColumnRowInfoOutOfUsedRange 来控制导出 JSON 文件的大小。

支持形状中文本的边距设置

GcExcel 的 Shape.TextFrame 类支持 MarginBottom、MarginLeft、MarginTop、MarginRight 属性来设置形状文本的边距。

展开/折叠数据透视表中的分组项目

现在可以通过使用GcExcel新的 IPivotItem.ShowDetail 属性,以编程方式来展开或折叠分组的行/列,展开或折叠数据透视表中的分组行或列。

与前端表格控件 SpreadJS 集成

GcExcel 添加了对以下 SpreadJS 功能的支持,并增强了与客户端 SpreadJS 产品的兼容性。请注意,这些功能仅适用于 SpreadJS 和 PDF 导出,在 MS Excel 中不适用。

  • 在 GcExcel 中支持 RowCount 和 ColumnCount for JSON I/O - Help .NET | 帮助帮助 Java
  • 获取 JSON 格式图片的 URL - 帮助 .NET |帮助 Java
  • 通过JSON I/O、Excel I/O 和PDF 导出支持SpreadJS 的Pivot Table - Help .NET |帮助 Java
  • 支持以下功能:
    - 工作表 TabStrip 位置和属性
    - 设置复选框、复选框列表和单选框列表单元格的大小
    - JSON I/O 支持按钮单元类型的 hoverBackColor
    - JSON I/O 和 PDF 导出支持 buttonBackColor
    - JSON I/O 上的新选项frozenTrailingColumnStickToEdge 和 frozenTrailingRowStickToEdge

 

服务端 PDF 组件 GrapeCity Documents for PDF 更新说明

将图层添加到 PDF 文档

GcPDF 可以将单独的内容层添加到带有 PDF 文档的单个 PDF 中,并通过 Adobe Acrobat 中显示/隐藏这些内容。

如下图是一个户型图,从图上可见房屋的电线、照明等设施排布,如果需要同时查看所有设施,可以将GcPDF组件所有图层的可见性设置调整为“开”。

GcPdfDocument.OptionalContentProperties 类提供了一个广泛的 API 来处理 PDF 图层。 使用这个 API,您可以实现如下功能:

  • 添加图层
  • 枚举并查找现有图层
  • 将您在 GcPdfGraphics、FormXObject 和注释对象上绘制的 PDF 内容与特定图层相关联
  • 检查并设置图层属性,例如可见性、打印状态等
  • 移除图层*注意:目前,移除图层不会移除现有的关联内容

设置输出意图和嵌入 ICC 配置文件

PDF 规范提供了一种定义输出意图对象列表的方法。 这些对象指定可以呈现文档的输出设备的颜色特征。 在本次更新中,GcPDF 添加了对 PDF 输出意图的支持,输出意图由 OutputIntent 类的实例表示,可以通过 GcPdfDocument.OutputIntents 集合访问。

ICCProfile 类表示输出意图使用的 ICC 配置文件。 通过 OutputIntent.DestOutputProfile 属性访问输出意图的 ICC 配置文件。 静态实用程序方法 OutputIntent.Create() 提供了一种创建输出意图的便捷方法。

以下代码显示了如何使用新的 GcPdf API 向 PDF 添加输出意图:

                                  
var profiles = new (string, string)[] {
                ("Probev2_ICCv4.icc", @"https://www.color.org/probeprofile.xalter"),
                ("Probev1_ICCv4.icc", @"https://www.color.org/probeprofile.xalter"),
                ("Probev1_ICCv2.icc", @"https://www.color.org/probeprofile.xalter"),
            };
foreach (var profile in profiles)
{
       sb.AppendLine($"{bullet}{profile.Item1}, source: {profile.Item2}");
       using (FileStream fs = File.OpenRead(Path.Combine("Resources", "Misc", profile.Item1)))
       {
             var oi = OutputIntent.Create($"Output intent testing {i++}", "", "http://www.color.org", profile.Item1, fs);
             doc.OutputIntents.Add(oi);
       }
}                                      
                                  
                              

在这些示例中,使用了“探针”ICC 配置文件,它为了调试和测试目的而故意扭曲颜色。

支持 AES 256 修订版 6 加密

GcPDF 还添加了最初在 PDF 2.0 中添加的 Standard Security Handler Revision 6,它使用 AES 256 加密来加密 PDF 文档,此加密使用更复杂的算法来生成加密密钥。

这种算法提供了一种更安全的解决方案,以防止未经授权访问 PDF 文档。 在GcPDF中,可定义 StandardSecurityHandlerRev6 处理程序属性并将它们设置为 GcPdfDocument.Security.EncryptHandler 类。


var ssh6 = new StandardSecurityHandlerRev6()
 {
            OwnerPassword = ownerPassword,
            UserPassword = userPassword,
            CopyContent = false,
            PrintingPermissions = PrintingPermissions.Disabled,
            EncryptStrings = true,
 };
 
// Assign the handler we created to the document so that it is used when saving the PDF:
doc0.Security.EncryptHandler = ssh6;


改进的 PDF 到图像导出:引入混合模式

GcPdfGraphics 实现了 BlendMode 属性,该属性指定影响当前图形上所有绘图的混合模式,包括图形基元、文本和图像。 支持 PDF 规范中描述的 12 种混合模式。 当 GcPDF将 PDF 渲染为图像时,也支持混合模式。

请注意:虽然 PDF 仅支持 12 种混合模式,但 GcPDF使用的 BlendMode 枚举包括一些 PDF 不支持的其他混合模式。 要以编程方式测试是否支持特定混合模式,请使用 GcPdfGraphics.IsBlendModeSupported()方法。

下图应用了各种混合模式的 PDF 文件,将 PDF 转换为图像时,您也可以获得类似的结果。

 

服务端 Word 组件 GrapeCity Documents for Word 更新说明

在单个模板中支持多个数据源

在复杂的业务应用程序中,数据是从多个数据源存储或检索的。 GcWord 报告模板现在支持将 Word 报告模板与来自多个数据源的数据绑定。 下面的示例向模板添加了两个不同的 JSON 数据源。

'makes' 数据源列出了一些流行的汽车制造商,而另一个数据源 'bodystyles' 列出了汽车的不同风格。


    var makes = "[" +
        "{ \"make\": \"Toyota\" }," +
        "{ \"make\": \"General Motors\" }," +
        "{ \"make\": \"Volkswagen\" }," +
        "{ \"make\": \"Ford\" }," +
        "{ \"make\": \"BMW\" }," +
        "{ \"make\": \"Nissan\" }," +
        "{ \"make\": \"Hyundai\" }," +
        "{ \"make\": \"Honda\" }," +
        "{ \"make\": \"Mazda\" }," +
        "{ \"make\": \"Jaguar\" }," +
    "]";
    var bodyStyles = "[" +
        "{ \"style\": \"Sedan\" }," +
        "{ \"style\": \"Coupe\" }," +
        "{ \"style\": \"Hatchback\" }," +
        "{ \"style\": \"SUV\" }," +
        "{ \"style\": \"Crossover\" }," +
        "{ \"style\": \"Minivan\" }," +
        "{ \"style\": \"Pickup\" }," +
        "{ \"style\": \"Wagon\" }," +
    "]";
 
var doc = new GcWordDocument();
 
// Add the data sources:
doc.DataTemplate.DataSources.Add("makes", makes);
doc.DataTemplate.DataSources.Add("styles", bodyStyles);

                                   
                               

新的范围模板格式化程序:重新启动编号列表

GcWord 组件添加了新的范围模板格式化程序重新启动以重新启动不同数据块中的编号列表。 例如,如果您需要这样的结果:

可以使用以下代码以每个新公司名称重新启动号码。

                                 
{{#products}:restart()}{{products.category}}
   1. {{products.category.productname}}
{{/products}}
                                 
                             

使用“#”将新的重新启动格式化程序附加到模板范围标记。 您还可以使用“all”格式化程序重新启动所有编号列表、父组或内部组。

序列和跟随者格式化程序

GcWord 报告模板中添加了两个新的范围模板格式化程序,即序列(或 seq)和跟随。 当“seq”与“follow”一起使用时,范围将使用与父范围相同的数据索引进行迭代。 结合使用时,您可以同时迭代两个集合的对象并产生如下输出:

                                    
var p = doc.Body.Paragraphs.Add("{{#nums}:seq(seq1)}{{nums.num}} -- {{#ds}:follow(seq1)}{{ds.name}}{{/ds}}{{/nums}}", doc.Styles[BuiltInStyleId.ListParagraph]);                                        
                                    
                                

支持 JSON 作为数据源

JSON 是最广泛使用的网络数据交换数据格式。 您现在可以直接将 Word 报告模板绑定到单个或多个 JSON 数据源。 支持以下新对象类型:

  • JSON 文件
  • JSON 字符串
  • JSON 流
  • JSON 流读取器
  • JSON 令牌

以下示例显示了使用 JSON 字符串作为数据源的 Word 报告模板的绑定:

                                    
var doc = new GcWordDocument();
doc.DataTemplate.DataSources.Add("ds", oceans);
var myListTemplate = doc.ListTemplates.Add(BuiltInListTemplateId.BulletDefault, "myListTemplate");
var p = doc.Body.Paragraphs.Add("", doc.Styles[BuiltInStyleId.ListParagraph]);
p.ListFormat.Template = myListTemplate;
doc.DataTemplate.Process();
doc.Save("Oceans.docx");
                                    
                                

这些资源,了解更多将 Word 报告模板与 JSON 对象类型绑定的示例。

新的复制/粘贴选项

GcWord 现在具有一个新的枚举选项:KeepSource 以键入 FormattingCopyStrategy。 确保 Word 文档中复制和粘贴的范围具有相似的格式; 被另一个文档的默认属性改变。

在下面的快照中,第一个文档的内容被复制到第二个文档。 然后使用 FormattingCopyStrategy.KeepSource 枚举处理模板。 生成的文档在粘贴新内容的同时保持源文档的格式。

Word 到 PDF 和图像导出中的形状和文本框支持

去年,GcWord引入了新的 GcWordLayout 类,它为将 Word 导出为 PDF 和图像格式提供了更强大的支持。 将 Word 导出为 PDF 现在支持 Word 文档中的形状。 Microsoft Word 有几种预定义的形状,包括矩形、箭头、框架等。

GcWord 现在支持 PDF 导出时的所有标准形状。 许多形状也有特殊调整,例如甜甜圈形状内圆的半径。 GcWordLayout 现在完全支持这些调整。

历史版本

查看更多关于 GrapeCity Documents 服务端文档组件库的历史版本。