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

新增 Goal Seek 功能

Excel的目标求解功能使用户能够确定达到期望结果所需的输入值。通过设置一个目标输出,目标求解功能会自动调整输入值,直到达到期望的结果。此功能在场景分析和Excel建模中的决策制定中非常有用。

GcExcel 新增了一个 API,可以通过编程方式在电子表格中添加目标求解功能。新的 IRange.GoalSeek(double goal, IRange changingCell) 方法(布尔值)尝试通过修改指定的 changingCell,来实现由 IRange 所代表的单元格中的公式计算结果达到指定的目标。goal 参数指定了期望的目标输出,而 changingCell 参数指定了将改变其值以实现目标值的单元格。

以下代码使用新的 GoalSeek 方法来查找一个人需要得到多少利率(changingCell 参数),以达到你的目标贷款(goal 参数)

    
//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
//Set MaximumIterations and MaximumChange  
workbook.Options.Formulas.MaximumIterations = 1000;
workbook.Options.Formulas.MaximumChange = 0.000001;
var activeSheet = workbook.ActiveSheet;
activeSheet.Range["A1:A4"].Value = new string[] { "Loan Amount", "Term in Months", "Interest Rate", "Payment" };
// This is the amount that you want to borrow.
activeSheet.Range["B1"].Value = 100000;
activeSheet.Range["B1"].NumberFormat = "$#,##0";
// This is the number of months that you want to pay off the loan.
activeSheet.Range["B2"].Value = 180;
// This is the number of interest rate.
activeSheet.Range["B3"].NumberFormat = "0.00%";
// This formula calculates the payment amount.
activeSheet.Range["B4"].Formula = "=PMT(B3/12,B2,B1)";
activeSheet.Range["B4"].NumberFormat = "$#,##0";
// Use goal seek to calculate the value of cell B3.
activeSheet.Range["B4"].GoalSeek(-900, activeSheet.Range["B3"]);
activeSheet.Range["A1:B4"].AutoFit();
// Save to an excel file
workbook.Save("GoalSeek.xlsx");
    

欢迎查看我们的演示以获得更佳的体验。

Help .NET | Demo .NET | Help Java | Demo Java

数据透视表中的标签筛选和数值筛选

在v7.2版本中,GcExcel增强了数据透视表筛选的支持,使开发人员能够以编程方式在数据透视表中优化和管理大型数据集。GcExcel新增的筛选选项有助于缩小数据范围,专注于特定条件,从而使分析更加精确和相关。

GcExcel 支持新的 API 在数据透视表中添加标签筛选(包括日期筛选)和数值筛选。标签筛选 API 有助于根据行或列字段中的标签筛选数据,而数值筛选 API 则用来显示满足特定条件的数值数据。GcExcel 提供的 IPivotField 接口的 PivotFilters 属性,使用户可以使用 PivotFilterType 枚举添加标签、数值或日期筛选到数据透视表字段中,该枚举可以作为参数传递给IPivotFilters接口的Add方法。新的API添加还包括 AllowMultipleFilters 属性,帮助在一个字段上同时添加标签和数值筛选,从而允许开发人员在一个字段上添加多个筛选。新API添加还包括ClearLabelFilter、ClearValueFilter和ClearAllFilters方法以删除筛选。

以下代码显示如何在“产品”数据字段上应用标签筛选,其中标题包含文本“mi”。

    
//config pivot table's fields
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Filter for products where the product name contains 'mi'.
field_Product.PivotFilters.Add(PivotFilterType.CaptionContains, "mi");

worksheet.Range["A:D"].EntireColumn.AutoFit();
        
// Save to an excel file
workbook.Save("PivotLabelFilter.xlsx");
    

Help .NET | Demo .NET | Help Java | Demo Java

GcExcel 模板增强:根据数据源进行数据过滤

在业务场景中,开发人员会整合来自多个数据源的数据。在这样的应用程序中,数据之间存在关系。GcExcel 现在支持通过在 Excel 模板中定义过滤属性来表示这些关系。单个模板单元格可以对应数据源中的多条记录,开发人员可以相应地过滤扩展数据。模板中的过滤属性也可以轻松修改,使报告能够动态适应不断变化的数据。

模板数据过滤功能,仅支持 .NET 中的 System.Data.DataTable 或 ITableDataSource 以及 Java 中的 java.sql.ResultSet 或 ITableDataSource 。

GcExcel 增加了使用 F 或 Filter 属性定义过滤条件和过滤切片的功能。过滤属性可以添加到 Excel 模板文件的所需单元格中,条件过滤的语法是

    
F/Filter = (field1 > 1 and field2 = 2 or field3 <> 3)
    

GcExcel 同样增强了从多张表中进行数据处理和报告生成的能力。在条件过滤属性,您可以使用 AND、OR、NOT 和 LIKE 等操作符和关键来表示不同过滤条件间的关系。

切片过滤属性则通过指定从一个索引到另一个索引的范围来实现数据提取。切片过滤属性可以使用以下语法添加到 Excel 模板文件的所需单元格中

    
F/Filter = [start:stop:step]
    

此外,您也可以将条件过滤属性和切片过滤属性结合起来,GcExcel 会先过滤具有条件过滤属性的记录,然后根据应用的切片过滤属性过滤记录。语法如下:

    
F/Filter = [start:stop:step](field1 > 1 and field2 = 2 or field3 <> 3)
    

以下示例展示了一个复杂的业务场景,其中通过在各自的单元格中应用两个过滤条件从两个表中提取数据

请查看以下详细资源:

Help .NET | Demo .NET | Help Java | Demo Java

为 GcExcel 模板绑定 JSON 数据源

GcExcel 模板现在可以直接绑定 JSON 文件。GcExcel 提供了 ITableDataSource 接口,通过实现该接口,可以将 JSON 数据封装成 ITableDataSource 的对象,并将其绑定至 GcExcel 模板。ITableDataSource 支持模板过滤属性,因此可以通过 ITableDataSource 为多个 JSON 数据源进行关联以及过滤。

请查看下面的详细资源:

Help .NET | Demo .NET | Help Java | Demo Java

异步IMAGE函数

Excel 中的 IMAGE 函数允许用户将图像直接插入单元格,从而增强电子表格的视觉吸引力,例如要点说明、添加 Logo 或结合数据以说明分析。在最新版本中,GcExcel 现在包括 IMAGE 函数,允许用户在单元格内添加图像。支持的图像类型与 ImageType 枚举中可用的类型相同。此外,GcExcel 还添加了 Workbook.WebRequestHandler 接口,允许用户自定义如何发送网络请求,通过 WebRequestHandler,IMAGE 函数可以通过 URL 显示来自在线来源的图像,该接口允许异步处理网络请求,并提供了一种向指定 URI 发送 GET 请求的方法,这在 导出 PDF 时很有用。

参考以下代码,了解在单元格中如何设置图像。


// The user can set a custom web request handling class,
// and all network requests in GcExcel will use this class to send network requests.
Workbook.WebRequestHandler = new WebRequestHandler();
var workbook = new Workbook();
var sheet = workbook.ActiveSheet;
// Set image function
sheet.Range["A1"].Formula = "=IMAGE(\"https://support.content.office.net/en-us/media/926439a2-bc79-4b8b-9205-60892650e5d3.jpg\")";
// Calculate all formulas so the asynchronous image function will run.
workbook.Calculate();
// Block the current thread until all asynchronous functions have finished.
// If this method is not called, the exported file may contain #BUSY! error.
workbook.WaitForCalculationToFinish();
workbook.Save("D:\\res.pdf");

有关 WebRequestHandler 类的实现,请参阅此处的完整示例:

Help .NET | Demo .NET | Help Java | Demo Java

使筛选功能与SpreadJS相似的选项

GcExcel新增了一个选项,可以在筛选数据时将第一行数据视为数据行而非标题行。API引入了一个新的 Range.AutoFilter() 方法重载,这将有助于使GcExcel的筛选行为与SpreadJS类似。此重载方法包括一个名为 isFirstRowData 的参数,用于指示选择区域中的第一行是否参与筛选过程。此特性仅在 SpreadJS 中有体现。

参考以下示例代码,使用 AutoFilter 方法的 isFirstRowData 参数对包含数据的第一行添加筛选器:

                                
// Create a new workbook.
var workbook = new Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
// Add data to the range.
object[,] data = new object[,]{
{"Luigi", "New York", new DateTime(1998, 4, 7), "Blue", 67, 165},
{"Richard", "New York", new DateTime(1968, 6, 8), "Blue", 67, 165},
{"Nia", "New York", new DateTime(1972, 7, 3), "Brown", 62, 134},
{"Jared", "New York", new DateTime(1964, 3, 2), "Hazel", 72, 180},
{"Natalie", "Washington", new DateTime(1972, 8, 8), "Blue", 66, 163},
{"Damon", "Washington", new DateTime(1986, 2, 2), "Hazel", 76, 176},
{"Angela", "Washington", new DateTime(1993, 2, 15), "Brown", 68, 145}
};
worksheet.Range["A1:F7"].Value = data;
// Set column width.
worksheet.Range["A:F"].ColumnWidth = 15;
// Apply filter to first row.
worksheet.Range["A1:F7"].AutoFilter(true, 4, "<72");
// Create a file stream to export ssjson file.
FileStream outputStream = new FileStream("HeadersAsData.ssjson", FileMode.Create);
// Export the ssjson file.
workbook.ToJson(outputStream);
// Close the stream.
outputStream.Close(); 
                            

Help .NET | Demo .NET | Help Java | Demo Java

新增迷你图

GcExcel 现在支持通过对应的新函数来添加线型、柱状以及盈亏迷你图。迷你图是嵌入在单元格内的紧凑且简单的图表,用来直观地展示数据趋势。你可以在GcExcel中使用以下语法来添加迷你图:

                                
=LINESPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
=COLUMNSPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
=WINLOSSSPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
                            

如果想了解每个参数的具体用法,请参考 SpreadJS 迷你图

注释:在电子表格中添加迷你图(Sparklines)的支持是 SpreadJS 的一个特性,这些函数的结果将在 SpreadJS 的 SSJSON I/O、SJS I/O、PDF、图像和 HTML 导出文件中可见。

                                
worksheet.Range["G3:G5"].Formula = "=COLUMNSPARKLINE(B3:F3,1,,,\"{showMarkers:TRUE}\")";
worksheet.Range["G3:G5"].Formula = "=LINESPARKLINE(B3:F3,1,,,\"{showMarkers:TRUE,lineWeight:1.5,markersColor:#7030a0}\")";
worksheet.Range["G3:G5"].Formula2 = "=WINLOSSSPARKLINE(B3:F3-300000,1,,,\"{showNegative:TRUE}\")";
                            

下图展示了一个在 SpreadJS 中添加到电子表格中的柱状迷你图(Column Sparkline)。

从以下演示和帮助中,了解更多关于迷你图的细节:

Help .NET | Demo .NET | Help Java | Demo Java

无损 I/O 支持 SpreadJS 的多种特性

随着 v7.2 版本的发布,我们增强了GcExcel与 Spread JS 17.1版本 的 .sjs 和 ssjson 文件格式的兼容性(实现无损导入/导出)。在 SJS / SSJSON I/O上已经支持了多项特性。查看完整列表的受支持的 SpreadJS 特性

基于像素的渲染 PDF 和图像

为了增强电子表格内容导出 PDF 和图像的性能,并使其渲染效果更接近于 SpreadJS,GcExcel 引入了 WorkbookOptions 类,该类提供了一个属性 —— PixelBasedColumnWidth。如果将其设置为true,则在将电子表格渲染为 PDF 和图像时,工作簿会采用基于像素的列宽。此外,此选项会让其他 API 行为,如自动调整列宽和其他 PDF 及图像渲染结果,更加接近于SpreadJS的效果。

下面的代码将工作簿中的 PixelBasedColumnWidth 属性设置为true,并将工作簿导出为 PDF,呈现出与 SpreadJS 相似的渲染效果。

                                
// Create a new workbook with workbook options
WorkbookOptions workbookOptions = new WorkbookOptions();
// Enable pixel-based column width for the workbook
workbookOptions.PixelBasedColumnWidth = true;
var workbook = new Workbook(workbookOptions);

var fileStream = this.GetResourceStream("sjs\\Event budget.sjs");

workbook.Open(fileStream, OpenFileFormat.Sjs);
        
// Save to a pdf file
workbook.Save("SavePDFWithPixelBasedColumnWidth.pdf");
                            

Help .NET | Demo .NET | Help Java | Demo Java

支持使用 FromSJSJson API 加载单个 json SJS 文件

GcExcel 在 Workbook 类和 IWorkbook 接口中增加了 FromSjsJson 方法,允许用户加载由 .sjs 文件生成的 JSON 文件字符串或流。

这表示 GcExcel 现在具备了直接从 .sjs 文件格式生成的 JSON 数据中加载信息的能力,通过使用新增的 FromSjsJson 方法,用户可以直接处理 .sjs 文件转换成的 JSON 内容,无需进行额外的转换步骤,这提高了数据加载的效率和便利性。

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

workbook.Open("source.sjs");

// Generate a JSON string containing the contents of .sjs file format.
SjsSaveOptions saveOptions = new SjsSaveOptions();
string sjsJson = workbook.ToSjsJson(saveOptions);

// Generates a workbook from the JSON string containing the contents of .sjs file format.
SjsOpenOptions openOptions = new SjsOpenOptions();
workbook.FromSjsJson(sjsJson, openOptions);
                                
                            

Help .NET | Demo .NET | Help Java | Demo Java

在导出到PDF时定制边框样式

GcExcel 现在允许您使用 PdfSaveOptions 类中的新 BorderOptions 属性来导出带有自定义边框样式的 PDF 文档。此属性利用了 CustomBorderStyle 类的 BorderWidth 和 Dashes 属性,以及BorderLineStyle 枚举,以定义边框宽度、虚线段长度和线条样式。BorderWidth 属性设置在导出 PDF 文档时的边框宽度,而 Dashes 属性确定虚线中每一段的长度。

以下代码示例展示了在导出到 PDF 时如何定制边框样式:

                                
// Create a pdf file stream
FileStream outputStream = new FileStream("CustomBorder.pdf", FileMode.Create);

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

var templateFile = this.GetResourceStream("xlsx\\CustomBorderStyle.xlsx");
workbook.Open(templateFile);

// Customizing the border style for exporting to PDF.
var pdfSaveOptions = new PdfSaveOptions();
var thinBorderSetting = new CustomBorderStyle { BorderWidth = 0.4 };
var middleBorderSetting = new CustomBorderStyle { BorderWidth = 1.5 };
var dashBorderSetting = new CustomBorderStyle { BorderWidth = 0.4, Dashes = new List { 0.8, 0.8 } };
pdfSaveOptions.BorderOptions.Add(BorderLineStyle.Thin, thinBorderSetting);
pdfSaveOptions.BorderOptions.Add(BorderLineStyle.Medium, middleBorderSetting);
pdfSaveOptions.BorderOptions.Add(workbook.ActiveSheet.Range["B13"].Borders[BordersIndex.EdgeTop].LineStyle, dashBorderSetting);
//Save the workbook into pdf file.
workbook.Save(outputStream, pdfSaveOptions);
        
// Close the pdf stream
outputStream.Close();
                            

Help .NET | Demo .NET | Help Java | Demo Java

 

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

从PDF文档中移除图片

GcPdf 现在支持从 PDF 文档中移除图片的 API 。新增加了一个方法GcPdfDocument.RemoveImages(IList images),该方法有助于从文档中移除图片,从而减小最终 PDF 文档的大小,并满足修改 PDF 文档的其他需求。图片通过 PdfImageInfo 对象指定,这些对象可以通过 GcPdfDocument.GetImages (…)方法的不同重载版本获取。

要移除的图片也可以通过添加到 PdfImageInfo 类中的新 WidgetReferences 属性返回。在大多数情况下,图片被内容流(如页面、FormXObjects)使用,但图片也可以直接通过 WidgetAnnotation 对象的属性(如 WidgetAnnotation.ButtonAppearance.Image、WidgetAnnotation.ButtonAppearance.RolloverAppearance.Image、WidgetAnnotation.ButtonAppearance.DownAppearance.Image)引用。现在,GcPdfDocument.GetImages() 也会通过 PdfImageLocation.WidgetReferences 属性返回此类图片。

以下是一个简单的代码示例,用于从 PDF 文档中移除所有图片:

                                
LoadPdf(doc, "Wetlands.pdf");
var images = doc.GetImages();
doc.RemoveImages(images);
                            

然而,有许多场景和实现方式可以帮助从PDF文档中移除各种类型的图片。请参阅下面的详细信息:

Help | Demo

 

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

对于形状的超链接属性

现在,您可以为形状程序化地添加超链接属性 HyperlinkOnClick 和 HyperlinkOnHover,这可以为Word 文档增加更多交互性。

GcWord 添加了HyperlinkOnAction 类,它允许开发者向所有形状类(Picture、CanvasShape、GroupShape、InkShape、Shape)添加超链接属性。指定这些属性还会将“编辑链接/打开链接/移除链接”命令添加到 MS Word 中形状的上下文菜单上(除了墨迹形状之外)。

以下代码使用新的 API 增强功能向 Picture 类添加了超链接属性。

这意味着开发者能够更加灵活地控制文档内的形状元素,使其能够响应点击或悬停事件,跳转到指定的 URL 或其他文档位置,从而提高文档的互动性和功能性。如果您需要具体实现这段功能的代码示例,请告知我您使用的编程语言和开发环境,以便提供更详细的帮助。

                                
var doc = new GcWordDocument();
var pic = doc.Body.AddParagraph().AddRun().AddPicture();
pic.Size.Width.Value = 400;
pic.Size.Height.Value = 400;
var picBytes = File.ReadAllBytes(Path.Combine("mescius-video-thumbnail.jpg"));
pic.ImageData.SetImage(picBytes, "image/jpeg");

var newUrl = new Uri("https://developer.mescius.com/document-solutions", UriKind.RelativeOrAbsolute);
pic.HyperlinkOnClick.Address = newUrl;
doc.Save("HyperlinkOnPicture.docx");
                            

历史版本

查看更多关于 GrapeCity Documents 服务端表格组件的历史版本。