GrapeCity Documents V7.0 Update2 新特性
服務端表格組件 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
要移除的圖片也可以通過添加到 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文檔中移除各種類型的圖片。請參閱下面的詳細信息:
服務端 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 服務端表格組件的歷史版本。