目前,服务端文档组件库GrapeCity Documents的新版本已正式发布,本次更新主要针对其表格组件 GrapeCity Documents for Excel(GcExcel)进行,更新亮点包括:

  1. 为生成的 Excel 模板加入了更多全新功能
  2. 支持将数字签名添加到 Excel 工作簿
  3. 支持将 Excel 转换为 HTML 格式
  4. 增强数据透视表功能
  5. 增加了与纯前端表格控件 SpreadJS 的产品兼容性

在列举GcExcel V3.0 Update2的新特性之前,请下载最新安装程序,以便同步体验!

>>服务端表格组件 GcExcel 下载地址

为生成的 Excel 模板增加更多功能选项

服务端表格组件GcExcel已经支持了基于 Excel 的文档对象模型,可生成更为复杂的Excel报告。

本次更新,GcExcel为生成的Excel模板增加了更多功能选项,如可通过使用表单域及相关性能的新模板语法在MS Excel中设计PDF表单。

从Excel模板生成可填写的PDF表单

本次更新,GcExcel 引入了“ 表单”组件,用以在Excel模板中定义PDF表单字段和相关属性。字段可以通过Excel文件中的JSON字符串和模板进行设置,这些表单字段可以被转换为PDF表单字段,与Adobe Acrobat的规范完全兼容。

示例:要使用文本框的表单字段,请将MS Excel单元格中的表单字段定义为文本框类型。

{{( form={"type": "textbox", "name": "txt1","font":{"size":10.5},
"justification": "centered"})}}

使用该功能,可在不同的单元格中设置表单域和标签,并利用MS Excel方便地设计复杂的PDF表单样式,且不必依靠Acrobat或第三方工具来调整表单布局,如字符间距和字号。

如下图所示,通过GcExcel将文本框类型的不同表单字段作为模板单元格,即可在模板中使用的不同标签,并定义相关属性。

除了直接在 Excel 中进行设置,还可通过JSON格式来设置PDF表单。

目前,服务端表格组件GcExcel 已支持添加所有PDF表单字段,如:

  • 文本框
  • 复选框
  • 单选按钮
  • 组合框
  • 列表框
  • 按钮
  • 签名栏

在Excel模板中,除了适用于所有“表单字段”的通用设置之外,GcExcel还支持为每个“表单字段”进行特定设置,这些设置可以轻松地以JSON格式定义。

{{(form={"type": "textbox", "name": "txt1","font":{"size":10.5},
"justification": "centered"})}}

示例代码:处理 Excel 模板并直接保存为PDF


//create a new workbook

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

//Load template file from resource

var templateFile = GetResourceStream("xlsx\\\\Template_USTaxForm.xlsx");

workbook.Open(templateFile);

//Invoke to process the template

workbook.ProcessTemplate();

//save to an excel file

workbook.Save("USTaxForm.pdf");

在JavaScript PDF Viewer中查看、编辑、填写和提交PDF表单

为PDF表单绑定数据

服务端表格组件GcExcel除了生成可填写的空白PDF表单外,还可以设计与数据库值绑定的PDF表单。只需在Excel文件的数据库字段声明中定义Form属性即可:

{{ ds.Name (form = {“ type”:“ textbox”,“ name”:“ name”,“ font ”:{“
color”:“#000000”,“ bold”:true}})}}}

经过GcExcel处理后,模板将使用数据库中的数据进行扩展。因此,在PDF中显示的每个字段都是“文本框字段”,您可以随时编辑并保存。

使用字体文件控制PDF表单大小

当您需要在PDF表单中使用某些字体,但是计算机/浏览器可能没有这些字体时,可以在模板文件中使用TemplateOptions.EmbedFontForFormFields 的全局选项,将由Form字段使用的Font字体文件嵌入到生成的PDF文档中。

  • 如果设置为True,则表单字段中使用的字体文件将嵌入到PDF文件中。这将帮助您正确输入任意字符,即使您的机器/浏览器没有安装相应的字体。但是,请注意,这可能会增加PDF文件的大小,尤其是在使用东亚字符的PDF表单中。

  • 如果设置为False,则不会嵌入字体文件。因此生成的PDF文档的大小将很小,但是如果在表单中输入字符,视觉输出可能无法正确显示。

使用迷你图扩展模板

在具有大量数据的Excel文件中,您必须手动为每行添加迷你图,或将其复制到其他行。但是,如果数据范围发生变化,则必须再次手动检查工作表并修改每行迷你图的数据范围。

使用服务端表格组件GcExcel生成的Excel模板,只需定义一次Template范围,Sparklines将始终随着数据库中数据的更新而扩展,从而使Excel文件数据始终保持最新。

使用Excel的表格扩展模板

您可以将数据放入Excel并对其进行排序和过滤,但是当您拥有不同类型的数据时(例如,特定于客户信息的数据或清单等),您可能需要将数据放在单独的表中维护。

因此,在Excel中,表格是处理大量数据的最佳手段。

出于这个原因,服务端表格组件GcExcel使用了模板来支持Excel表格。在数据扩展后,GcExcel的模板功能(格式、排序、过滤等)将自动应用于表格。使用GcExcel,只需在表格区域内定义模板单元格,模板就会随着内置表格的格式和功能自动更新和扩充。

为Excel报表定义固定布局,并在特定范围内填充数据

此外,为了满足不同公司(如发票、采购订单、电话账单等)对于Excel标准模板的要求,GcExcel可以控制Excel报表的布局。

例如,如果Excel模板预定义了一组行,GcExcel通过属性FillMode (FM)和FillRange控制表单布局,则经过处理后,不会在最终报告中插入多余的行。

在下面的示例中,演示了模板处理时使用FM = Overwrite模式的效果。

除了控制表单布局,一旦您的数据不适合模板中定义的范围,服务端表格组件GcExcel可以将其他属性FillRange 与FillModeoverwrite 属性一起使用。在处理模板后,GcExcel 将复制您定义的范围。如果数据仍然不适合该范围,GcExcel 将再次复制该范围,直到数据适合为止。

如,在下面的示例中,数据源包含的行比FR = A12:D23 范围中定义的行多,因此该范围被重复两次以适合模板中的数据,同时保留了模板行的格式。

将Excel电子表格和Excel范围导出到HTML

使用服务端表格组件GcExcel,将不会在Web应用程序中执行复杂的编码,GcExcel支持将完整的Excel电子表格或电子表格的一部分直接导出到HTML文件,并在线显示Excel内容。

目前,GcExcel可以将 Excel 导出为 HTML,并将Excel的内容保存为HTML文件格式,支持的导出选项包括:

  • 网格线
  • 标题
  • 工作表名称
  • Excel范围
  • 隐藏的工作表
  • 图片
  • CSS 样式
  • 注释
  • 超连结

与此同时,GcExcel还可以将整个工作簿、单个工作表或仅一系列数据导出到HTML中。这一步转换很简单,不需要任何控件的依赖。

示例代码:


//create a zip file stream
FileStream outputStream = new FileStream("saveworksheettohtml.zip",
FileMode.Create);

//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
Stream fileStream = this.GetResourceStream("xlsx\\\\BreakEven.xlsx");
workbook.Open(fileStream);
HtmlSaveOptions options = new HtmlSaveOptions();

// Export first sheet
options.ExportSheetName = workbook.Worksheets[0].Name;

// Set exported html file name
options.ExportFileName = "Analysis";
workbook.Save(outputStream, options);

//close the zip stream
outputStream.Close();

支持将数字签名添加到 Excel 工作簿

将数字签名添加到Excel工作簿,可提供有关签名者身份以及文档真实性的高度保证。由于数字签名的安全架构,所有数字签名的文档都将链接到用户身份,并且易于验证。

Excel数字签名可以是定义的签名行,以指示签名者有关签名的详细信息。此外,对电子表格进行签名可以是实际的签名。签名可以是可见的签名,也可以是不可见的签名。

服务端表格组件GcExcel的IWorkbook.Signatures 属性可将数字签名添加到Excel工作簿。以下是具体功能:

  1. 添加、剪切、复制、删除签名行
  2. 在签名行上签名
  3. 在已签名的工作簿中添加签名行
  4. 修改签名的工作簿内容并签名
  5. 从已签名的工作簿中删除不可见的签名
  6. 从签名行中删除签名
  7. 将签名的工作簿导出为PDF
  8. 列出签名行
  9. 移动签名行
  10. 添加隐形签名
  11. 验证签名

GcExcel的 API库完全基于MS Office Digital签名支持,并提供了类似于Excel的强类型API,供用户在Excel电子表格中实现Diital Signature UI或服务。

数据透视表增强功能

从一个 PivotField 创建多个数据字段

服务端表格组件GcExcel可以从单个数据透视表字段中添加一个或多个字段,并对该字段应用多个计算,从而使其在数据透视表中多次出现。

在下面的示例中,“求和”和“计数”功能两次应用于单个“数量”数据透视字段,该字段可能出现在“数据透视表”的不同列下。

延迟布局更新

每当添加、删除数据透视表的数据字段或将其移动到其他位置时,都会重新计算整个数据透视表,这影响了Excel电子表格生成的整体性能。

为此,GcExcel 添加了DeferLayoutUpdate 属性,可推迟数据透视表的任何更新操作,直到用户选择调用Update方法,这样可以提高在Excel电子表格中使用数据透视表的性能。

示例代码:


IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Range["A1:F16"].Value = sourceData;
worksheet.Range["A:F"].ColumnWidth = 15;
var pivotcache = workbook.PivotCaches.Create(worksheet.Range["A1:F16"]);
var pivottable = worksheet.PivotTables.Add(pivotcache, worksheet.Range["H7"],
"pivottable1");

// defer layout update
pivottable.DeferLayoutUpdate = true;

//config pivot table's fields
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.RowField;
var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.ColumnField;
var field_Amount = pivottable.PivotFields["Amount"];
pivottable.AddDataField(field_Amount, "sum amount", ConsolidationFunction.Sum);

// must update the pivottable.
pivottable.Update();

//save to an excel file
workbook.Save("PivotTable.xlsx");

支持数据透视表的布局和格式选项

服务端表格组件GcExcel 当前已支持各种数据透视表布局和格式选项,以更好地呈现数据,其支持的选项包括:

  1. 可合并具有外行项目、列项目、小计标签和总计标签的单元格:IPivotTable.MergeLabels
  2. 启用紧凑行布局窗体时,自动缩进数据透视表项:IPivotTable.CompactRowIndent
  3. 可对数据透视表字段进行排序(DownThenOver 或OverThenDown ):IPivotTable.PageFieldOrder
  4. 可检索或设置“数据透视表”中每个列或行的字段数:IPivotTable.PageFieldWrapCount
  5. 可在包含错误的单元格中获取或设置字符串:IPivotTable.ErrorString
  6. 可获取或设置包含空值的单元格字符串:IPivotTable.NullString

排序(Sorting)

GcExcel 可使用IPivotField.AutoSort对数据透视表中的数据进行排序。

此外,GcExcel 还可以通过AutoSortField 属性,检索指定数据透视表中用于排序的数据字段名称,并通过使用Auto SortOrder 属性来检索其排序顺序,使用IPivotItem 接口的Position 属性来设置或检索其字段中的位置。

访问表的详细范围

如果只是访问数据透视表的对象,将很难获取其详细范围,您需要编写更多代码才能访问此类范围并应用格式,例如:

  1. 在不同范围内,应用单独的条件格式,如用溢出值而不是小计区域标记数据区域。
  2. 在小计范围内,应用特定的文本格式。
  3. 在合并小计范围或总计范围内,获取标题单元格

通过使用GcExcel ,可以很方便的解决上述问题。GcExcel 可直接在数据透视表中访问详细范围,并根据需要格式化数据或单元格:

  • PivotRowAxis:访问数据透视表的左下角。
  • PivotColumnAxis:访问数据透视表的右上角。
  • PivotLine:访问RowAxis 或ColumnAxis 。
  • PivotLineCell:访问数据透视表中的单元格。
  • PivotValueCell:访问值区域中Pivot单元的包装。

在以下示例中,通过使用PivotLineType 检测小计线类型,可以很容易地给PivotLine 单元格设置背景色。

支持各种数据透视表字段布局设置

服务端表格组件GcExcel 可通过代码更改数据透视表的布局,实现紧凑、松散或表格布局。本次更新,GcExcel还增加了插入空白行、设置小计位置、显示所有项目和重复数据透视表布局中的任何项目等功能。

形状 z-order 支持

为了确保一组形状的正确显示,必须定义形状的上下层顺序。为此,GcExcel 添加了IShape.ZOrder (ZOrderType zOrderType )来设置Shape的z-order,并添加了IShape.ZOrderPosition 来获取形状的ZOrder 位置。

导出为PDF 时优化图像质量

使用服务端表格组件GcExcel,可以根据要求调整导出PDF时的图像质量,通过PDFSaveOptions.ImageQuality 属性控制。图像质量越高,则PDF的尺寸越大。

将图像添加到Excel时,支持透明度调节

如果您想将图片设置为水印/徽标或文档状态(例如草稿等),则需要对图片的透明度进行调节。GcExcel 增加了在Excel中为图像设置透明度的支持,使用IPicture.PictureFormat.Transparency 来设置透明度值。

与纯前端表格控件SpreadJS集成的更多功能

服务端表格组件GcExcel 增加了与纯前端表格控件 SpreadJS 的产品兼容性。请注意,这些功能仅适用于SpreadJS,在原生Excel中不支持。

分别显示/隐藏水平或垂直网格线

在Excel中,仅可同时设置“水平”和“垂直”网格线为true或false,不能单独设置。但使用GcExcel,可以分别将这些网格线设置为true或false。

使用DisplayHorizo​​ntalGridlines 和IWorksheetView.DisplayVerticalGridlines ,可分别将Horizo​​ntal或Vertical网格线设置为true或false。

如下所示,垂直网格线被设置为关闭状态。

自定义冻结线颜色

在Excel中,无法自定义冻结线的颜色。但使用GcExcel,可以用其他颜色显示冻结线,以便始终清晰地分离和隐藏其下的数据。

服务端表格组件GcExcel 的FrozenLineColor属性,用于设置冻结窗格的颜色。

示例代码如下:


//Use sheet index to get worksheet.
IWorksheet worksheet = workbook.Worksheets[0];

// freeze pane
worksheet.FreezePanes(3, 3);

// Set frozen line color as dark blue.
worksheet.FrozenLineColor = Color.Red;

冻结尾部的行/列

在Excel中,仅可冻结初始行或列。但是有时候,我们需要数据在最右边的列上计算一个“摘要”,或者将诸如按钮之类的窗体控件添加到触发动作列中。此时,添加一个选项来冻结Excel电子表格中的尾部行或列将变得很有用。

服务端表格组件GcExcel 添加尾部行/列的冻结方式:

  • IWorksheet.FreezeTrailingPanes (int行,int列):冻结工作表的尾部行或列。
  • IWorksheet.UnfreezeTrailingPanes ():解冻工作表的尾部窗格。
  • IWorksheet.FreezeTrailingRow :获取工作表的尾部冻结行数。

示例代码如下:


//Use sheet index to get worksheet.
IWorksheet worksheet = workbook.Worksheets[0];


// freeze pane
worksheet.FreezePanes(2, 2);


// freeze trailing pane
worksheet.FreezeTrailingPanes(2, 3);

以上,就是服务端表格组件 GcExcel V3.0 Update2 的新特性说明,如需了解更多,欢迎前往 GcExcel 产品官网下载体验。