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

Excel 模板处理性能大幅提升

GcExcel 从模板生成 Excel 文档的速度比以往更快,在处理多个数据源记录时,ProcessTemplate()方法将更加高效,且随着记录数量的增加,将模板生成到最终报告中的速度也会增加。 以下是GcExcel 处理100,000条记录的性能测试报告:

如下是GcExcel 的性能指标对比(相对上一个版本)

可将公式字符串解析为语法树

当您只需要修改公式的某些部分,而不是整个公式时,可使用此项功能。

例如,当你需要在以下公式中将“ NOW()”函数更改为其他日期时:

=LET(AppUpTime,NOW()-DATE(2020,4,17)+366, YEAR(AppUpTime)-1900-1 & " years"

以往需要修改:

=LET(AppUpTime,DATE(2021,2,14)-DATE(2020,4,17)+366,YEAR(AppUpTime)-1900-1&" years")

但在 GcExcel 新版本中,可使用 GrapeCity.Documents.Excel.Expressions 命名空间,将公式表达式解析为语法树,以便直接创建、解析和修改公式。

上述 FormulaSyntaxTree 类是表达式 API 的条目,可以通过解析公式来执行以下功能:

  • 产生公式
  • 修改公式
  • 解析和格式化选项
  • 打印语法树

如下示例是将公式分解为不同的部分:

保存 Excel 文件时忽略公式

GcExcel 与 SpreadJS 进行交互时,可将具有值但不包含公式的 Excel 文件返回给客户端,当使用 GcExcel 保存 Excel 文件时,可以设置 XlsxSaveOptions.IgnoreFormulas 属性,将公式单元格作为值单元格导出。

在 PdfSaveOptions 上支持 Open Action Script

在打开导出的PDF文件时设置特定的操作。例如,当打开 PDF 文件时,将使用 GcExcel 模板创建的 PDF 表单字段的值转换为数字。现在,您可以在 PdfSaveOptions 类的 OpenActionScript 属性中设置 JavaScript 代码。

以下代码将文本框字段值转换为 Javascript 中的数字,该数字在 OpenActionScript 属性中定义。

Workbook workbook = new Workbook();
workbook.Open("SampleTemplate.xlsx");

workbook.ProcessTemplate();

PdfSaveOptions options = new PdfSaveOptions();
options.OpenActionScript="var fld1 = this.getField(\"num\");" +"fld1.value = fld1.value;" +"this.dirty = false;";

workbook.Save("SampleTemplate.pdf", options);

全新的加载 JSON 重载方法

可使用 GcExcel 的 Workbook.Open方法(DeserializationOptions)打开 JSON 文件。打开 JSON 文件时,返回值将显示错误列表。

var workbook = new Workbook();
var jsonErrors = workbook.Open("file.json", new DeserializationOptions { IgnoreFormula = true });

改进设置值时的计算引擎性能

GcExcel 添加了新的 Workbook.DeferUpdateDirtyState 布尔属性,用于更改单元格的值并设置 Workbook.DeferUpdateDirtyState = True 时,不会立即更新公式单元格脏状态。上述改进在 Excel 文件中设置值时,可以提高计算引擎的性能。

与 SpreadJS 的更多功能支持

GcExcel 作为后端表格处理组件,每次发布更新均保持对前端表格控件 SpreadJS 的兼容性支持。

1. 支持 RangeTemplate 单​​元格类型

GcExcel 全新的 RangeTemplate 类将允许用户将单元格范围的模板定义为单个单元格类型,并将该模板应用于单元格。

使用该类,您可以将不同的数据加载到模板中,包括多行和多列,从而使您可以在一个单元格中显示名片视图。

将单元格类型应用于单元格或单元格范围后,范围模板将使用一个或多个单元格值作为数据源来解析指定范围的绑定路径。此用法类似于其他单元格类型。

2. 在CheckboxList和RadioButtonList单元格类型上应用自定义对象

在 Checkboxlist 或 RadioButtonlist 列表中,用户需要灵活地从列表中选择多个项目。现在,可以通过在这些单元格类型上应用自定义对象,来在 CheckboxList 或 RadioButtonList 单元格类型中选择多个选项。

注意:此结果仅在“ PDF导出”上可见。

3. 工作簿元素的 ToJson 和 FromJSON 方法

SpreadJS 用户只需要更新工作簿的某些部分并不少见。例如,用户可能不想加载或保存整个工作簿,而只是更新范围、形状、表格或更多此类数据时,GcExcel 可将 FromJson 和 ToJson 方法应用于不同的 Workbook 元素,以启用这些操作。

例如,可以使用 IStyle.FromJson(string json)更新现有的命名样式,并使用 IStyle.ToJson()将命名样式导出为 JSON 字符串。这些方法包括在以下类中:

  • 风格
  • 范围
  • 验证
  • SparklineGroup,Sparkline
  • 格式条件
    • 前10名
    • 高于平均水平
    • 唯一值
    • 色标
    • 数据栏
    • IconSetCondition
  • 桌子
  • 形状
  • 切片机
  • 评论
  • Name
  • 页面设置
  • 保护设置

以下代码从 JSON 导入验证设置:

var book = new Workbook();
var sheet = book.Worksheets[0];

sheet.Range["A1:B2"].Validation.FromJson("{\"type\":5,\"condition\":{\"conType\":0,\"compareType\":1,\"item1\":{\"conType\":13,\"compareType\":5,\"expected\":\"9:08:09\"},\"item2\":{\"conType\":13,\"compareType\":3,\"expected\":\"19:08:09\"},\"ignoreBlank\":true},\"ranges\":\"A3:B4\",\"highlightStyle\":\"{\\\"type\\\":0,\\\"color\\\":\\\"red\\\"}\"}");

sheet.Range["C1:D2"].Validation.FromJson("{\"inputTitle\":\"Tip\",\"inputMessage\":\"Enter a date between 12/31/2012 and 12/31/2013.\",\"type\":4,\"condition\":{\"conType\":0,\"compareType\":1,\"item1\":{\"conType\":5,\"compareType\":5,\"expected\":\"/OADate(41274)/\",\"ranges\":[{\"row\":0,\"rowCount\":2,\"col\":2,\"colCount\":2}]},\"item2\":{\"conType\":5,\"compareType\":3,\"expected\":\"/OADate(41639)/\",\"ranges\":[{\"row\":0,\"rowCount\":2,\"col\":2,\"colCount\":2}]},\"ignoreBlank\":true,\"ranges\":[{\"row\":0,\"rowCount\":2,\"col\":2,\"colCount\":2}]},\"ranges\":\"C3:D4\",\"highlightStyle\":\"{\\\"type\\\":0,\\\"color\\\":\\\"red\\\"}\"}");

4. 获取并将自定义对象设置为单元格值

SpreadJS 的某些 API 支持自定义数据类型或用户定义的数据类型。

GcExcel 支持 SpreadJS 互操作性的 Range.Value 属性中的自定义数据类型。

以下代码将字典分配给一个范围:

//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();

var activeSheet = workbook.ActiveSheet;
IRange a1 = activeSheet.Range["A1"];
var dict = new Dictionary()
{
    {"TempData1", 1},
    {"TempData2", "Temp value 2"},
    {"TempData3", 3},
    {"TempData4", "Temp value 4"}
};
// Set temporary data to a range
a1.Value = dict;

// Display the custom object later
var obj = (IReadOnlyDictionary)a1.Value;
var row = 1;
foreach (var kv in obj)
{
    activeSheet.Range["B" + row].Value = kv.Key;
    activeSheet.Range["C" + row].Value = kv.Value;
    row += 1;
}

// Arrange
activeSheet.Columns.AutoFit();
activeSheet.Columns[0].Hidden = true;

//save to a pdf file
workbook.Save("setcustomrangevalue.pdf");

 

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

使用结构标签从 PDF 文档中提取数据

在最近的几个版本中,我们专注于从 PDF 文档中提取数据以进一步处理数据。因为可访问性标准要求标记PDF文件,所以这些标记的PDF文件包含描述逻辑文档结构和不同文档元素(例如图片、文本块、列、标题)的顺序的元数据。这使屏幕阅读器更容易从PDF文件中提取文本或图形,并以正确的顺序显示文件内容。

支持 PDF Type 1 字体

Type 1 字体广泛用于桌面发布软件上的PDF文档中或用于打印目的。在此版本中,我们增加了对使用 Adobe Type 1 字体格式正确呈现PDF的支持。还包括使用 Type 1 字体的图像文件,这些文件在 PDF 文档中可以正确呈现。

编辑多边形区域

GcPDF 的 Redact 工具是用于编辑和完全删除 PDF 文档中数据的高效工具。由于内容分布在不同的区域,因此可能需要对某些 PDF 区域进行编辑,不仅是将其编辑为矩形,还需要将其编辑为多边形。现在,您可以编辑文档中的多边形区域。为此,请在“修订注释”的新“添加多边形”方法中提供定义多边形的点和多边形填充模式。

private void AddPolygonToRedact(Page p, Color fillColor, PointF[] pts, FillMode fillMode = FillMode.Alternate)
{
    var redact = new RedactAnnotation()
    {
        Page = p,
        OverlayFillColor = fillColor
    };
    redact.AddPolygon(pts, fillMode);
}

 

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

改进的复制和移动范围操作

在 Word 文档中应用复制和移动范围操作时,现在已改进了几种方案:

  • 现在可以复制/移动填充图像和线条图像的形状,组形状,墨水形状,画布和图片
  • 现在可以正确复制和移动样式,而无需创建其他样式

在 Word 模板处理中支持格式错误的超链接

某些 Word 文档包含格式错误的超链接(不符合超链接标准的链接)。GcWord 现在支持通过超链接中格式错误的 URL 打开和保存 Word 文档。

GcWord 的 DefaultMalformedURIRewriter 类实现 IMalformedUriRewriter 接口,并且该类型的 GcWordDocument.MalformedUriRewriter 属性可用于实现自定义策略,以重写格式错误的 URI。该属性封装了两个委托,这些委托在加载格式错误的 URI 事件或保存文档中的任何URI时调用。您还可以定义任何自定义重写器实现,该实现重写委托并重写自定义实现中定义的格式错误的 URI。

var doc = new GcWordDocument();
doc.Load(@"example_malformed_mailto.docx");
//attach default rewriter
doc.MalformedUriRewriter = new DefaultMalformedUriRewriter();

添加了在替换操作期间删除空运行的功能

默认情况下,替换 GcWordDocument 中的文本时,替换操作不会删除空运行。在某些情况下,可能希望删除空运行,因此为了控制它,GcWord 引入了 FindReplaceOptions.RemoveEmptyRuns 布尔属性,指示替换是否应删除空运行。

添加了新的重载以使用 .NET Image 和 GcImaging 添加图像

现在,您可以同时利用 .NET Image 和 GcImaging 类在 Word 文档中添加图像。查看以下新的重载:

  • 方法已添加到 PictureCollection 类中
    • Picture Add (Image image)
    • Picture Add (GcImage image)
    • Picture Insert (Image image, InsertLocation location)
    • Picture Insert (GcImage image, InsertLocation location)
  • 方法已添加到ImageData类中
    • void SetImage (Image image)
    • void SetImage (GcImage image)

历史版本

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