GrapeCity Documents 服务端文档组件库 - 历史版本
GrapeCity Documents 历史版本
GrapeCity Documents for Excel V7.0 Update1 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
改进的模板语言,性能更佳
在我们最近的努力中,我们承担了重构 GcExcel 模板的任务,主要着重于提升性能和稳定性。我们的目标是满足更广泛的用户需求和使用场景,确保用户拥有流畅高效的体验。最近的改进包括:
- 对于缺少的数据源,将视为Null
- 启用固定布局功能,使其在分页和非分页模式下无缝运行
- 增强模板处理功能,支持图片和形状
- 提升了在处理具有合并单元格的模板时的性能
- 确保从旧模板设计中无缝继续功能,而不引入任何破坏性变化
欢迎查看我们的演示以获得更佳的体验。
Help .NET| Help Java| Demo .NET| Demo Java
自定义排序顺序和多列排序
GcExcel 模板长期以来一直支持使用语法定义模板单元格中的排序方向来对模板数据进行排序。但实际上场景中,需要根据其他单元格的值对单元格进行排序,且进一步需求使用多个单元格值对数据进行排序的能力。为了满足这种需求,GcExcel 扩展了语法,使其能够同时包含多个排序条件,而不是使用不同的排序条件多次进行模板填充。
支持的多种情况包括:
- 根据其他列的顺序对当前列进行排序
- 根据多个其他列的顺序对当前列进行排序
- 自定义排序顺序
以下示例中,将按日期(列C)升序排序列A中的数据,然后按销售额(列D)降序排序。
在下面的资源中详细阅读增强的排序语法和支持的场景。
Help .NET| Help Java| Demo .NET| Demo Java
取消执行中的 ProcessTemplate 方法
在某些情况下,由于数据量大或者对基本原因不明确,导致 ProcessTemplate 方法的执行时间延长,展示填充的数据会有延迟。因此,如果有一种方法可以中断 processTemplate 方法并恢复到未填充数据模板的初始状态,以便用户选择限制数据源的数量并重新处理模板将会很有用。
GcExcel 现在支持通过调用带有 CancellationToken 参数的 Workbook.ProcessTemplate(CancellationToken) 重载来中断 processTemplate 方法。您可以通过以下三种方式中断模板处理:
- 使用 CancellationTokenSource.Cancel 立即请求取消
- 使用 CancellationTokenSource.CancelAfter 在指定延迟时间后请求取消
- 使用 CancellationTokenSource.Dispose (.NET) 或 close (Java) 释放资源
当取消成功时(ProcessTemplate 执行中且通过CancellationTokenSource请求取消),Workbook.ProcessTemplate 方法将抛出 OperationCanceledException(.NET System 类的情况)或 CancellationException(Java Platform SE 8 的情况)。
在处理异常时,workbook 对象处于一个中间状态(数据可能仅填充了一部分)。此时,需要决定是否继续使用该 workbook 对象。如果希望使用模板填充前的 workbook,则需要在模板填充前,对workbook进行备份,在操作取消后进行还原。 以下代码在当前线程中使用 workbook 并在另一个线程中取消:
C#
using (CancellationTokenSource cancellation = new CancellationTokenSource())
{
void cancelHandler(object sender, ConsoleCancelEventArgs e)
{
// Exit process gracefully
e.Cancel = true;
cancellation.Cancel();
};
Console.CancelKeyPress += cancelHandler;
cancellation.CancelAfter(TimeSpan.FromSeconds(10));
Console.WriteLine("Start ProcessTemplate.");
try
{
workbook.ProcessTemplate(cancellation.Token);
Console.WriteLine("ProcessTemplate finished.");
}
catch (OperationCanceledException ex) when (ex.CancellationToken == cancellation.Token)
{
Console.WriteLine("ProcessTemplate was canceled.");
}
}
欢迎查看以下资源来了解更多关于该功能的内容。
Help .NET| Help Java| Demo .NET| Demo Java
CalculationMode 选项
此功能专门为 SpreadJS 用户设计,他们在后端使用 GcExcel 生成大量的 Excel 文件。有些情况下,用户希望避免自动计算以减少打开工作表所需的时间。此外,在某些场景中,用户只想导出特定的工作表而不是整个工作簿。值得注意的是,Excel 文件可能包含跨工作表的公式,用户希望在导出过程中这些公式保持未计算状态。因此,用户正在寻找一个选项来启用/禁用手动计算,以更好地控制这些方面。
为了解决这个问题,GcExcel 引入了 Workbook.Options.Formulas.CalculationMode 属性。该属性允许在工作表上设置公式的计算模式,从而在打开工作表时控制公式的计算。该属性支持以下枚举值:
- Automatic:自动
- Semiautomatic:除模拟运算表外,自动重算
- Manual:手动
该属性在 Excel I/O、SpreadJS I/O 和 SSJSON I/O 中受支持。
以下代码演示了将计算模式更改为 Manual,其中在 MS Excel 中打开导出的 XLSX 文件时不会自动计算公式。
C#
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Range["A1:F7"].Value = data;
worksheet.Range["A:F"].ColumnWidth = 15;
//add table.
worksheet.Tables.Add(worksheet.Range["A1:F7"], true);
//show totals
worksheet.Tables[0].ShowTotals = true;
worksheet.Tables[0].Columns[4].TotalsCalculation = TotalsCalculation.Average;
worksheet.Tables[0].Columns[5].TotalsCalculation = TotalsCalculation.Average;
var comment = worksheet.Range["F8"].AddComment("Please press F9 to calculate the formula.");
comment.Visible = true;
//set calculation mode to manual
workbook.Options.Formulas.CalculationMode = CalculationMode.Manual;
// Save to an excel file
workbook.Save("CalculationOptions.xlsx");
Help .NET| Help Java| Demo .NET| Demo Java
以流(stream)的方式为导出任务注册自定义字体 - 仅 GcExcel Java 支持
此前,GcExcel Java 提供了 Workbook.FontsFolderPath 接口,允许用户指定保存所需字体文件的目录。需要注意的是,FontsFolderPath 必须表示一个绝对磁盘路径。然而,某些环境存在限制,阻止用户直接在磁盘上存储字体。在这种情况下,用户只能提供字体流。例如,当用户将其应用程序部署为 Java 中的 war 包时,字体被打包在 war 包中。因此,在这些情况下,GcExcel 必须提供一个能够适应字体流的接口。
在 GcExcel 的 Workbook 类中,已经加入了 Workbook.FontProvider 字段,以便用户通过字体流提供字体,用于自适应、PDF 导出和图像导出等任务。用户可以实现 IFontProvider 接口及其方法, getFontFilePaths 和 getFont,来实现注册字体。
getFontFilePaths 方法用于检索所有字体文件路径。另一方面,getFont 方法负责返回与给定字体文件路径对应的字体流。当用户使用 FontProvider 类时,GcExcel 将专门在字体流中搜索字体路径。如果没有实现 FontProvider ,GcExcel 将默认搜索 FontsFolderPath 中的字体。
以下示例展示了如何通过字体流设置字体:
Java
// Create a new workbook.
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);
// Set style of the font.
sheet.getRange("A1").setValue("Sheet1");
sheet.getRange("A1").getFont().setName("Arial");
sheet.getRange("A1").getFont().setColor(Color.GetRed());
sheet.getRange("A1").getInterior().setColor(Color.GetGreen());
// Implement FontProvider.
Workbook.FontProvider = new IFontProvider() {
@Override
public List getFontFilePaths() {
return new ArrayList<>(Arrays.asList(
"fonts\\arial.ttf",
"fonts\\arialbd.ttf",
"fonts\\ariali.ttf"
));
}
@Override
public InputStream getFont(String fontFilePath) {
return getClass().getClassLoader().getResourceAsStream(fontFilePath);
}
};
// Save the workbook.
workbook.save("FontStreaming.pdf", SaveFileFormat.Pdf);
在跨工作簿公式中支持表格引用
在大型和复杂的 Excel 文件中,通常公式会引用其他工作簿中的数据,无论是内部还是外部。传统的方法会通过复制的方式,将数据整理到同一个工作簿中。但一种更有效的方法是直接使用跨工作簿公式引用外部工作簿中的数据。因此为了增强该场景下的易用性,在 v7.1 版本中,GcExcel 支持在跨工作簿公式中使用表格引用。
Plain Text
workbook.Worksheets[0].Range["B1"].Formula = "=SUM('[Sales.xlsx]'!Table1[Sales])";
忽略范围内的错误
为了能让用户在导出Excel时,不显示单元格中左上角的绿色三角,GcExcel 在 IRange 接口中引入了 IgnoredError 属性以及 IgnoredErrorType 枚举,允许用户在 Excel 中有选择地忽略诸如无效的公式结果、以文本形式存储的数字、相邻单元格中不一致的公式等错误。
C#
worksheet.Range["A8:F11"].IgnoredError = IgnoredErrorType.All;
Help .NET| Help Java| Demo .NET| Demo Java
在 Excel 文件中导出条形码为图片
在保存 Excel 文件时,您可以选择保留包含从 SpreadJS 或 GcExcel 生成的条形码。GcExcel 添加了 Workbook.ConvertBarcodeToPicture(ImageType) 方法,在保存为Excel之前,使用该方法可以将条形码转换为图像,并应用于所有工作表,以便在 Excel 文件中无缝存储,消除了出现 "#Ref" 值的情况。在没有显式指定 ImageType 参数的情况下,默认设置为 SVG 图像类型。
Help .NET| Help Java| Demo .NET| Demo Java
搜索带有标签的单元格
GcExcel 提供有 Tag 属性,该属性可与 SpreadJS 配合使用。该属性可以包含指定类型的数据并将其附加在单元格,行,列或者工作表上。此外,您可以使用 SSJSON 导入/导出带有简单数据的标签。在 v7.1 版本中,GcExcel 引入了 SpecialCellType.Tags 和 IRange.SpecialCells(SpecialCellType.Tags) 重载,便于对指定范围内带有标签的单元格进行识别。
以下代码用于查找带有标签的单元格并将它们设置为红色:
C#
IRange allTagCells = worksheet.UsedRange.SpecialCells(SpecialCellType.Tags);
allTagCells.Font.Color = Color.Blue;
foreach (var area in allTagCells.Areas)
{
for (int i = 0; i < area.Cells.Count; i++)
{
if (area.Cells[i] != null && area.Cells[i].Tag is string && int.Parse(area.Cells[i].Tag as string) % 10 == 0)
{
area.Cells[i].Interior.Color = Color.Red;
}
}
}
Help .NET| Help Java| Demo .NET| Demo Java
SpreadJS 兼容特性
GcExcel 整合了额外的 SpreadJS 特性,提升了与客户端端的 SpreadJS 产品的兼容性。需要强调的是,这些新特性仅与 SpreadJS 配合使用,不兼容 Microsoft Excel。
- 获取并设置单元格背景图片 - Help .NET | Help Java | Demo .NET | Demo Java
- 支持 GanttSheet 的无损 .sjs/ssjson 输入/输出 - Demo .NET | Demo Java
- 支持 ReportSheet 的无损 .sjs/ssjson 输入/输出 - Demo .NET | Demo Java
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
向 PDF 文档添加丰富的媒体
通过无缝地将音频和视频等丰富的媒体元素整合到 PDF 文档中,增强您的 PDF 文档。通过添加丰富的媒体,您可以提升用户参与度,并在 PDF 中创建动态、交互式内容。通过使用新的 RichMediaAnnotation 类,可以将多媒体支持以编程方式整合到您的 PDF 文档中。
其包含有以下功能:
1、嵌入多媒体内容:RichMedia 注释使得可以将包括音频、视频和动画在内的多媒体资产整合到 PDF
文件中。这可以增强演示文稿、教育材料或交互式表单等内容。
2、注释属性:RichMedia 注释具有定义多媒体内容如何呈现的属性。这些属性可能包括激活条件、可见性设置以及注释的外观。
3、激活和停用:激活条件确定多媒体内容何时开始或停止播放。例如,您可以设置当用户单击注释或包含剪辑的页面变为可见时播放内容。
4、呈现样式:RichMedia 注释支持两种呈现样式 - 嵌入式和窗口式。
5、控制导航:RichMedia 注释允许您控制导航选项设置为 True 或 False。
以下代码向 PDF 文档添加了一个 RichMediaAnnotation:
C#
GcPdfDocument doc = new GcPdfDocument();
var p = doc.NewPage();
// add video when page becomes visible
RichMediaAnnotation rma = new RichMediaAnnotation();
rma.SetVideo(GetFile(doc, "Wetlands.mp4"));
rma.PresentationStyle = RichMediaAnnotationPresentationStyle.Embedded;
rma.ActivationCondition = RichMediaAnnotationActivation.PageBecomesVisible;
rma.DeactivationCondition = RichMediaAnnotationDeactivation.PageBecomesInvisible;
rma.ShowNavigationPane = true;
rma.Page = p;
rma.Rect = new _Rect(10, 10, 300, 200);
doc.Save("doc.pdf");
下面的视频展示了一个使用GcPDF以编程方式添加RichMedia注释的PDF文件。
Help| Demo Basic| Demo - Insert Video in existing PDF
合并 PDF 时删除重复图片
现在,在合并 PDF 文档时可以移除重复的图片。GcPDF 在合并文档时提供了两个选项来移除重复的图片:
1、新的 GcPdfDocument.RemoveDuplicateImages() 方法用于移除重复图片
2、设置 MergeDocumentOptions.RemoveDuplicateImages 布尔属性为 true/false
以下是实现 GcPdfDocument.RemoveDuplicateImages() 方法的代码示例:
C#
static void MergeDoc(GcPdfDocument dstDoc, string fileName)
{
GcPdfDocument d = new GcPdfDocument();
var fs = new FileStream(fileName, FileMode.Open);
d.Load(fs);
dstDoc.MergeWithDocument(d);
}
static void Main(string[] args)
{
GcPdfDocument doc = new GcPdfDocument();
MergeDoc(doc, @"..\..\..\Individual_PDF1.pdf");
MergeDoc(doc, @"..\..\..\Individual_PDF2.pdf");
doc.RemoveDuplicateImages();
doc.Save("doc.pdf");
}
在未旋转的矩形边界内绘制旋转文本
在未旋转的矩形边界内绘制旋转文本具有诸多优势,如更好地利用空间、布局一致性、在响应式设计中提高效率而不对设计造成重大干扰等。GcPDF 现在支持在未旋转的矩形边界内绘制旋转文本。通过 GcPDF,用户现在可以在 GcGraphics 类中使用 DrawRotatedText 和 MeasureRotatedText 方法来绘制在未旋转的矩形边界内旋转文本,类似于 MS Excel 在无边框单元格内绘制旋转文本。DrawRotatedText 有助于在指定矩形内以一定角度绘制文本,而 MeasureRotatedText 则计算文本的边界,以便准确放置文本。GcPDF 还允许用户使用 RotatedTextAlignment 枚举设置旋转文本的对齐方式,该枚举是上述方法中的一个参数。这些新方法适用于所有派生自 GcGraphics 的类,包括用于绘制 PDF、SVG 和位图的类。
以下代码使用以下参数在未旋转的矩形边界内以负角度绘制旋转文本:
旋转角度:-45°,文本对齐:Leading,旋转文本对齐:BottomLeft,是否垂直堆叠:False
C#
var doc = new GcPdfDocument();
var page = doc.Pages.Add();
var g = page.Graphics;
Draw(g, new RectangleF(10,10,100,100), angle: -45, false, RotatedTextAlignment.BottomLeft, TextAlignment.Leading);
static void Draw(GcGraphics g, RectangleF rect, int angle, bool verticalStacking, RotatedTextAlignment rotatedAlign, TextAlignment textAlign)
{
// Draw a legend stating the current DrawRotatedText arguments' values:
var tlLegend = g.CreateTextLayout();
// The target rectangle for the DrawRotatedText call:
var d = tlLegend.ContentHeight + 12;
rect.Y += d;
rect.Height -= d;
// Text layout to draw:
var tl = g.CreateTextLayout();
tl.DefaultFormat.FontName = "Calibri";
tl.DefaultFormat.FontSize = 12;
tl.Append("The quick brown fox jumps over the lazy dog. ");
tl.Append("The quick brown fox jumps over the lazy dog.");
tl.TextAlignment = textAlign;
// Outline the target rectangle in green:
g.DrawRectangle(rect, new GCDRAW::Pen(Color.PaleGreen, 3));
// Outline the actual text rectangle in red:
var tlCopy = tl.Clone(true);
var tlRect = g.MeasureRotatedText(tlCopy, angle, verticalStacking, rect, rotatedAlign);
g.DrawRectangle(tlRect, new GCDRAW::Pen(Color.Red, 1));
// Draw rotated text:
g.DrawRotatedText(tl, angle, verticalStacking, rect, rotatedAlign);
}
当将上面的代码保存为图像时,将生成以下输出:
在倾斜矩形内绘制文本
文本也可以在倾斜的矩形内旋转,类似于 MS Excel 在带有边框的单元格中绘制旋转文本。为了实现这种布局,GcPDF 还添加了特殊方法 - DrawSlantedText 方法,与 DrawRotatedText 方法非常相似,只是 SlantedTextAlignment 类型的最后一个参数指定了目标矩形内倾斜文本的对齐方式。这个枚举类型有六种模式:
BelowRotatedInside、BelowRotatedOutside、AboveRotatedInside、AboveRotatedOutside、CenterInsideOutside、CenterOutsideInside。
以下是如何使用 DrawSlantedText 方法在 PDF 文档中绘制倾斜矩形中的文本的基本代码(参见后面的图片)。SlantedTextAlignment.CenterInsideOutside 枚举选项使文本在以相同角度旋转的矩形边界中间显示。文本上方的边界向内旋转到矩形内部。
C#
static void RText(GcGraphics g, int angle, float x1, float y1, float x2, float y2, string s)
{
var tl = g.CreateTextLayout();
tl.TextAlignment = TextAlignment.Center;
tl.Append(s, new TextFormat
{
FontName = "Segoe UI",
FontSize = 27,
FontSizeInGraphicUnits = true,
FontBold = true
});
var rc = new RectangleF(x1, y1, x2 - x1, y2 - y1);
g.DrawSlantedText(tl, angle, false, rc, SlantedTextAlignment.CenterInsideOutside);
}
请查看我们的演示,了解如何在未旋转的矩形边界内绘制旋转文本,或在倾斜矩形中绘制文本,并使用 DrawRotatedText 和 SlantedTextAlignment 枚举的各种选项。
GcPDF
服务端 Word 组件 GrapeCity Documents for Word 更新说明
在 Word 文档中添加在线视频
将在线视频整合到 Word 文档中增强了动态视觉元素,使复杂概念更加清晰。此外,它促进了多样化内容的创建,为各种目的提供互动和信息丰富的文档,从教育材料到商业报告。GcWord 提供了 WebVideoProperties 类,让用户可以自定义视频播放器的 HTML 内容并定义其尺寸。这有助于将在线视频无缝整合到 Word 文档中,实现直接在文档内播放视频,获得更丰富的多媒体体验。该类提供了 SetUrl 方法及其三个重载,允许用户指定视频的输入 URL、标题、高度和宽度。该方法在内部生成适当的 EmbeddedHTML 字符串,为用户定义这些参数提供了方便的方式,避免了直接编写可能较为复杂的部分。
以下代码向 Word 文档添加在线视频:
C#
var gcdoc = new GcWordDocument();
gcdoc.Load("wetlands.docx");
var pic = gcdoc.Body.Paragraphs[3].AddRun().AddPicture();
// Poster frame image.
byte[] imageBytes = File.ReadAllBytes("Wetlands.jpg");
pic.ImageData.SetImage(imageBytes, contentType: "image/jpeg");
pic.ImageData.WebVideoProperties.SetUrl("https://www.youtube.com/watch?v=k9UbKlBc3W4", "title", 60, 60);
历史版本
查看更多关于 GrapeCity Documents 服务端表格组件的历史版本。
GrapeCity Documents for Excel V7.0 更新内容
重要信息:GrapeCity Documents 组件包更名为 GcDocs
为了更好的持续改进产品以及服务中国用户,从 V7.0 开始 GrapeCity Documents 正式更名为 GcDocs,这个更名会延伸至 GcDocs 套件下的所有 API 组件。
- GcDocs.Excel Java (GcExcel Java) (之前为 GrapeCity Documents For Excel, Java (GcExcel Java))
- GcDocs.Excel .Net (GcExcel .Net) (之前为 GrapeCity Documents For Excel, .Net (GcExcel .Net))
- GcDocs.PDF (GcPdf) (之前为 GrapeCity Documents For PDF, Java (GcPdf))
- GcDocs.Word (GcWord) (之前为 GrapeCity Documents For Word, .Net (GcWord))
同时,您可以在 Maven 和 Nuget 上找到全新的 GcDocs 组件产品。
GcExcel Java : https://central.sonatype.com/artifact/com.grapecitysoft.documents/gcexcel/overview
GcExcel .Net : https://www.nuget.org/packages/GcDocs.Excel
GcPdf : https://www.nuget.org/packages/GcDocs.Pdf
GcWord : https://www.nuget.org/packages/GcDocs.Word
为了方便,您对已有的工程进行升级,我们也提供了迁移工具。您可以在 GcDocs 各产品试用下载包中看到该工具。
对于旧的包(Grapecity Dcouments 组件),您仍然可以从下面的 Maven 或者 Nuget 页面访问获取,或者您可以联系我们。
- GrapeCity Documents For Excel, Java (GcExcel Java)
- GrapeCity Documents For Excel, .Net (GcExcel .Net)
- GrapeCity Documents For PDF, Java (GcPdf)
- GrapeCity Documents For Word, .Net (GcWord)
需要强调的是 GcDocs 仅仅是包名字的修改,组件内所有的命名空间,类型名等并未更名,对于您已有的代码,无需做任何修改。
下面让我们开始了解 V7.0 的新功能。
服务端表格组件 GrapeCity Documents for Excel 更新说明
增加异步自定义函数
Excel 支持使用异步编程技术的自定义函数进行异步计算。假设您有一个场景,需要从外部源获取数据或执行耗时的计算。传统的同步函数会阻止 Excel 的响应,直到计算完成,导致用户界面的延迟。使用异步计算,您可以通过在耗时的任务进行时允许其他操作继续来提高响应性。
在 GcExcel 中,您可以通过继承 AsyncCustomFunction 类来注册异步自定义函数。此外,CalcError 类型引入了'Busy'枚举,表示单元格当前正在计算异步公式。这个 GcExcel 中的增强功能使用户在自定义函数中利用异步计算,在涉及复杂计算的情况下提供灵活性和效率。
GcExcel 模板增强
保持图片比例
在很多场景中,我们需要保持图片的比例,例如(国旗,照片等)为了防止比例因单元格的大小而改变,使得它们看起来失真。在 v7 版本中,GcExcel 模板中引入了新的属性,即 image.keepaspect 或 image.ka。当设置为 true 时,其可确保图像的比例,从而允许其适合单元格大小,而不管其高度或宽度如何。
示例:以下代码将国旗的比例设置为 True,来让国旗以正常比例显示
SQL
{{ds.BikeSeries.CountryImage(image=true,image.keepaspect=true)}}
在分页模式下重复形状和图片
GcExcel 模板一直提供对分页模式的支持,可以对报表中的工作表进行分页。这个功能在每个工作表具有一致布局但数据不同的报表中特别有用,比如发票、进展报告和医学检测报告。在这些报表中,通常需要重复使用形状和图像,包括标志或图形,以及数据。在 v7 版本中,GcExcel 模板引入了增强的支持,可以在处理 Excel 模板时重复使用带有数据的形状和图像。这个增强功能确保更动态地处理形状和图像,为报表生成过程增加了灵活性。
形状或图像将根据起始位置的左上单元格的父级进行重复。
例如:在下面的快照中,图像根据 D12 的父级单元格 B12 重复 10 行(CP=10)。
导出 Html 支持 Inline CSS
GcExcel 支持将 Excel 电子表格导出为 HTML,并且提供了包含单独的 CSS 文件作为一个整体的灵活性。但值得注意的是,在将内容导出 HTML 通过电子邮件共享时,或集成到内容管理系统(CMS)中的情况下,CSS 样式需要内嵌至 HTML 标签内。
在最新的更新中,GcExcel 引入了一项新功能,可以在导出 HTML 时,将 CSS 样式存储在标签内(内联样式)。与此功能相配套,GcExcel 引入了 HtmlSaveOptions.CssExportType 枚举,提供三个值来将 Excel 文件以不同的 CSS 选项导出为 HTML:
External:将 CSS 导出到单独的文件中。
Internal:将 CSS 与 style 标签一起导出到 HTML 中。
Inline:将 CSS 与 HTML 元素内的 style 属性一起导出。
示例:以下代码将 Excel 工作簿导出为具有 CssExportType.Inline 选项的 HTML。请注意,样式标签嵌入在 HTML 文件中。
页面设置起始页码支持“自动”
在打印 Excel 表时,用户可以在页面设置对话框中使用'FirstPageNumber'属性来给页面加上页码。如果要使用默认的页码系统,可以将该属性设置为'Auto'。
为了解决编程场景中的需求,GcExcel 引入了 IPageSetup.IsAutoFirstPageNumber 属性,便于在打印时检索和修改第一页的页码是否设置为'Auto'。默认值为 true;但是,如果 IPageSetup.FirstPageNumber 属性已经明确设置,那么 IPageSetup.IsAutoFirstPageNumber 属性将变为 false,并需要重新设置。
示例:以下代码片段演示了如何为已将 FirstPageNumber 设置为 3 的工作表将IPageSetup.IsAutoFirstPageNumber 属性设置为 true。这样在打印时第一页的页码将自动确定,即使之前已经设置为特定值。
C#
//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
var fileStream = GetResourceStream("xlsx\\ConfigIsAutoFirstPageNumber.xlsx");
workbook.Open(fileStream);
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.PageSetup.CenterFooter = "&P";
//Set auto page number, original first page number is 3.
worksheet.PageSetup.IsAutoFirstPageNumber = true;
// Save to an excel file
workbook.Save("SetIsAutoFirstPageNumber.xlsx");
改善选项按钮的分组策略
选项按钮的分组功能现在全面增强,您现在可以通过分组框将选项按钮进行分组,其分组策略与 MS Excel 更加一致。分组框中的选项按钮是独立运行的,这样可以确保不同分组的选项按钮组不会互相影响。您可以通过以下场景了解分组策略:
分组逻辑:
- GcExcel 将根据选项按钮和分组框的范围来判断从属关系。
- 如果选项按钮完全包含在分组框中,则选项按钮的 GroupBox 属性将被设置为第一个匹配的分组框。
- 如果没有匹配的分组框,选项按钮将默认属于工作表组。
分组行为:
- 当两个或多个选项按钮共享同一个分组框时,它们将形成一个单选按钮组。
- 在一组内,只有一个选项按钮可以被选择。
共享 LinkedCell 属性:
- 同一组中的选项按钮现在共享 LinkedCell 属性。
- 因此,为组中的一个选项按钮定义的 LinkedCell 会传播到同一组中的其他选项按钮。
这些增强功能简化了分组框中选项按钮控件的管理和行为,提高了操作的灵活性和一致性。
增强趋势图的格式设置
在图表中绘制数据时,直观地表示潜在趋势通常至关重要。Excel 中的趋势线是分析数据和根据现有趋势预测未来值的宝贵工具。GcExcel 一直支持使用 ITrendline 接口向图表添加趋势线方程,特别是通过 ITrendline.DisplayEquation 和 ITrendline.DisplayRSquared 属性。
在 v7 版本中,GcExcel 向 ITrendline 接口引入了格式化属性,以增强趋势线的视觉效果。ITrendline 接口中添加了一个新属性 DataLabel,允许用户访问与趋势线关联的数据标签。此功能使用户能够利用 IDataLabel 接口中的字体、格式、数字格式、角度、方向和自动图文集等属性来格式化趋势线方程标签。
此外,v7 版本还提供了 ITrendline.Delete 方法,该方法可以删除趋势线方程标签。值得注意的是,趋势线方程现在支持导出为 PDF、HTML 和图像,从而确保各种格式之间的一致性。这些增强功能有助于在 GcExcel 中以更全面、更具视觉吸引力的方式表示趋势线数据。
示例:在下面的快照中,使用 IDataLabel 接口的新属性格式化趋势线方程。
新增单元格默认值功能
用户现在可以选择为单元格建立默认值。如果未指定常规值,则将显示默认值并将其包含在计算中。GcExcel 添加 IRange.DefaultValue 属性来获取或设置单元格的默认值。
示例:以下代码为单元格区域 C4:C8 添加默认值(公式),同时在单元格 C6 和 C8 的添加公式。C9 单元格在计算公式时,基于 C4、C5 和 C7 的默认值进行计算。
PDF 导出支持平滑线图表
为了追求视觉上吸引人的表现和对图表数据的全面理解,GcExcel 现在支持平滑的图表线,同时也支持导出 PDF。
以下图表类型受益于此功能:
- 折线图
- 散点图
- 组合图
支持在 PDF 中生成交互式表单
GcExcel 的最新更新引入了一项强大的功能,允许用户在导出为 PDF 时直接使用 GcExcel API 创建交互式表单。GcExcel 添加了新属性 PdfSaveOptions.FormFields。当设置为 true 时,此属性允许将 Excel 表单控件导出为 PDF 表单控件,同时将 Excel 文件导出为 PDF。某些表单控件的相应属性映射到其各自的 PDF 表单控件属性。
要详细了解映射的属性和限制并进一步探索此功能,请查看下面快照后提供的资源。这一增强功能增强了 GcExcel 的多功能性,为用户提供了更全面的选项来无缝创建和管理交互式表单。
PDF 导出支持漏斗图
GcExcel 现在还将支持漏斗图将 Excel 文件导出为 PDF。因此,您现在可以将漏斗图添加到 Excel 并直接将文件保存为 PDF。
C#
// 创建一个漏斗图
IShape shape = worksheet.Shapes.AddChart(ChartType.Funnel, 10, 150, 300, 200);
shape.Chart.SeriesCollection.Add(worksheet.Range["A1:B7"]);
// 设置漏斗图的样式
shape.Chart.ChartTitle.Text = "Funnel Chart";
foreach (var s in shape.Chart.SeriesCollection)
{
s.DataLabels.Font.Color.RGB = Color.White;
}
// 保存为PDF
workbook.Save("FunnelChartPdf.pdf");
CSV 导出支持指定列包含“引号”
在某些情况下,导出 CSV 时,需要给特定的列使用“引号”(转义字符)。采取此预防措施是为了防止导出到 CSV 时出现任何潜在的数据误报。GcExcel 添加了新属性 CsvSaveOptions.QuoteColumns 来指定需要转义字符的特定列。可以在属性中指定列的索引。GcExcel 会根据该属性中指定列,使用 CsvSaveOptions.CellSeparator 指定的符号来为这些列添加转义字符。
当 CsvSaveOptions.QuoteColumns 不为 null 时; 只有指定列中的数据才会用转义字符引起来,而其他列中的数据则不加转义字符。请务必注意,如果值包含特殊字符(例如引号或分隔符),则无论如何都会将其括在转义字符中。
示例:在以下示例中,CsvSaveOptions.QuoteColumns 属性定义导出到 CSV 之前需要转义字符的列。
增强 与 SpreadJS 兼容
GcExcel 新增了对 SpreadJS 功能的支持,增强了与客户端 SpreadJS 产品的兼容性。请注意,这些附加功能仅适用于 SpreadJS,并且与 Microsoft Excel 不兼容。
- 对 cell.altText 属性的支持
- 对 IRange.DefaultValue 的支持
- 支持遮罩样式
- 支持受保护工作表中的密码
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
新的插入符注释
在 GcPDF 中引入了插入符注释,这是一种用于审阅 PDF 文档的强大工具。
CaretAnnotation 类使得以编程方式精确指出缺失的内容或必要的更改成为可能。如果你需要以编程方式在文档的多个位置添加插入符注释,那么这将特别有用。
示例:以下代码展示如何查找特定文本,并在该文本之后添加一个插入符注释。
C#
using (FileStream fs = new FileStream(@"Wetlands.pdf", FileMode.Open, FileAccess.Read))
{
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs);
var page = doc.Pages[0];
var tm = page.GetTextMap();
// insert the CaretAnnotation after "The Importance" text
tm.FindText(new FindTextParams("The Importance", false, true), (fp_) =>
{
// r - bounds of the found text
var r = fp_.Bounds[0].ToRect();
// create the CaretAnnotation and add it to the page
CaretAnnotation ca = new CaretAnnotation();
ca.Page = page;
// in this code annotation size is hardcoded, you can make a code
// which will adjust size of the annotation depending on height of the found text fragment
ca.Rect = new System.Drawing.RectangleF(r.Right - 4, r.Bottom - 8, 8, 8);
});
doc.Save(@"doc.pdf");
}
自定义时间戳
在某些情况下,由于安全原因,服务可能无法连接并从客户端返回所需的时间戳。在这些情况下,可能需要一个定制的时间戳服务向客户端发送一个有效的时间戳令牌。
然后客户端利用时间戳令牌对 PDF 文件进行签名,以确保符合各种 PAdES B-T/B-LT/B-LTA 等级的要求。简而言之,要求是在使用 PDF API 对 PDF 文档进行签名时定制时间戳令牌的生成。现在您可以在 GcPdf v7 中通过使用新的 ITimeStampGenerator 接口实现相同的功能,该接口使用户能够通过将其分配给 SignatureProperties 和 TimeStampProperties 类的 TimeStamp 属性来轻松生成个性化的时间戳令牌。
示例:以下代码将展示生成带有定制时间戳令牌的签名。
C#
// generate the signature with time-stamp token
X509Certificate2 crt = new X509Certificate2(@"User.pfx", "**");
using (FileStream fs = new FileStream(@"EmployeeTimeSheet.pdf", FileMode.Open))
{
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs);
SignatureProperties sp = new SignatureProperties();
sp.SignatureBuilder = new Pkcs7SignatureBuilder()
{
CertificateChain = new X509Certificate2[] { crt },
};
sp.TimeStamp = new TimeStampGenerator()
{
ServerUrl = @"http://ts.ssl.com",
};
sp.SignatureField = doc.AcroForm.Fields[0];
doc.Sign(sp, "signed.pdf");
}
服务端 Word 组件 GrapeCity Documents for Word 更新说明
图片效果
在不断发展的文档创建领域中,动态和视觉吸引力的内容需求至关重要。为了满足对多功能和可定制文档元素的需求,GcWord v7 推出了一套强大的功能,允许用户对图片应用各种不同的特效。这一拓展不仅增强了文档的视觉吸引力,还简化了通过代码整合 Microsoft Word 支持的图片特效的过程。使用这些特效,您可以对图片进行以下的编程操作:
- 调整图片的亮度和对比度
- 使用预设色彩重新着色
- 修改图像颜色
- 设置透明色
- 在图片上叠加特定的颜色色调
- 还有更多其他功能...
以下是新引入的 API:
- RecolorType 枚举 - 指定图像颜色变化的类型。
- ImageEffectType 枚举 - 指定图像特效的类型。
- UserColor 类 - 表示扩展颜色。
- WebVideoProperties 类 - 表示向用户显示在线视频的属性。
- ImageEffect 类 - 表示图像特效的基类。
- AlphaBiLevel 类 - 表示Alpha双级效果。
- AlphaCeiling 类 - 表示Alpha天花板效果。
- AlphaFloor 类 - 表示Alpha地板效果。
- AlphaInverse 类 - 表示Alpha反转效果。
- AlphaModulation 类 - 表示Alpha调制固定效果。
- AlphaModulationComplex 类 - 表示Alpha调制复杂效果。
- AlphaReplace 类 - 表示Alpha替换效果。
- BiLevel 类 - 表示双级(黑/白)效果。
- ColorChange 类 - 表示颜色改变效果。
- ColorReplacement 类 - 表示纯色替换效果。
- Duotone 类 - 表示双色调效果。
- Grayscale 类 - 表示灰度效果。
- HslEffect 类 - 表示色相/饱和度/亮度效果。
- Luminance 类 - 表示亮度效果。
- Tint 类 - 表示着色效果。
- ImageEffectList 类 - 表示图像特效列表。
- EmbeddedImageData 类 - 表示嵌入式图像数据。
- PicturePreset 枚举 - 添加图片,略微逆时针旋转的图片,并带有白色边框。
- 对以下 API 进行的新添加和更改:
- ImageData 类
- Blur 类
- FillOverlay 类
在下面的示例中,将一个图像添加到 Word 文档中,并使用 GcWord API 的 Picture.ImageData.RecolorType 枚举将其重新着色为灰度。
GrapeCity Documents for Excel V6.0 Update2 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
支持SpreadJS的.sjs文件格式
在 GcExcel 的 V6.0 Update 2 版本中,增加了对 SpreadJS .sjs 文件格式的支持。通过导出为 .sjs 格式,可以实现更短的导出时间和更小的文件尺寸。现在,您可以将 xlsx、xlsm、csv、ssjson 等格式的文件导出为 .sjs 格式,以更高效地处理数据。
增强了Workbook类上的open和save方法,支持.sjs文件,当加载或保存.sjs文件时,可以通过OpenFileFormat和SaveFileFormat,来选择Sjs枚举项。
因为对.sjs文件格式的支持,则可以满足以下功能:
- 快速将Excel文件转换为.sjs格式
- 以更小的占用空间保存文件
- 从.sjs文件中压缩的JSON文件生成单个JSON字符串
- 使各种可用选项自定义SpreadJS.sjs文件的打开和保存
新添加两个类,SjsOpenOptions和SjsSaveOptions。在导入/导出.sjs文件时,可以通过这两个类来定制包含/排除特定的功能。
以下代码加载 SpreadJS 的 .sjs 文件,并通过使用 SjsOpenOptions 排除公式和样式,然后使用 GcExcel 打开并保存该文件。
// 创建一个新的工作簿
Workbook workbook = new Workbook();
InputStream stream = this.getResourceStream("sjs\\LoanDetails.sjs");
// .sjs 文件格式的 OpenOptions
SjsOpenOptions openOptions = new SjsOpenOptions();
openOptions.setIncludeFormulas(false);
openOptions.setIncludeStyles(false);
// GcExcel 支持使用 OpenOptions 打开 .sjs 文件格式
workbook.open(stream, openOptions);
// 保存为 .sjs 文件
workbook.save("OpenSjsWithOpenOptions.sjs");
形状文本的对齐选项
GcExcel在ITextRange接口中添加了新的TextAlignment属性,用于获取或设置形状中文本范围或段落的对齐方式。该属性可以给文本设置对齐方式,如左对齐、右对齐、居中、分散和两端对齐。在需要按照UI设计规则或按照数据格式对齐文本(例如将文本左对齐或将数字右对齐)的场景中非常有帮助。
以下代码将形状中多个段落的对齐方式设置为居中和左对齐:
IShape shape = worksheet.Shapes.AddShape(AutoShapeType.RoundedRectangle, (double)10, (double)10, (double)320, (double)150);
shape.TextFrame.TextRange.TextAlignment = TextAlignmentAnchor.Left;
shape.TextFrame.TextRange.Font.Name = "Calibri";
shape.TextFrame.TextRange.Font.Size = 16;
shape.TextFrame.TextRange.Font.Color.RGB = Color.Black;
shape.TextFrame.TextRange.Font.Underline = TextUnderlineType.None;
shape.TextFrame.TextRange.Paragraphs.Add("Quarterly Results");
shape.TextFrame.TextRange.Paragraphs[0].TextAlignment = TextAlignmentAnchor.Center;
shape.TextFrame.TextRange.Paragraphs[0].Font.Size = 28;
shape.TextFrame.TextRange.Paragraphs[0].Font.Underline = TextUnderlineType.Single;
shape.TextFrame.TextRange.Paragraphs.Add("");
shape.TextFrame.TextRange.Paragraphs.Add("Business Domain: E-Commerce");
shape.TextFrame.TextRange.Paragraphs[2].TextAlignment = TextAlignmentAnchor.Left;
shape.TextFrame.TextRange.Paragraphs.Add("Quarter: Q4");
shape.TextFrame.TextRange.Paragraphs[3].TextAlignment = TextAlignmentAnchor.Left;
在形状和图表中设置垂直文本方向
在某些文档中,希望将文本方向设置为垂直方向。GcExcel在形状和图表的API中添加了Direction属性:
- IShape.TextFrame.Direction:用于形状的文本方向
- ITickLabels.Direction:用于图表轴上刻度标签的文本方向
- IChartTitle.Direction 或 IChartTitle.TextFrame.Direction:用于图表标题的文本方向
- IAxisTitle.Direction 或 IAxisTitle.TextFrame.Direction:用于坐标轴标题的文本方向
- IDataLabels.Direction:用于指定系列数据标签的文本方向
- IDataLabel.Direction 或 IDataLabel.TextFrame.Direction:用于图表数据点上数据标签的文本方向
Direction属性接受TextDirection枚举选项,可设置文本在以下方向上的方向:
- TextDirection.Horizontal:表示文本水平显示
- TextDirection.Vertical:表示文本垂直显示
- TextDirection.Rotate90:表示文本将旋转90度
- TextDirection.Rotate270:表示文本将旋转270度
- TextDirection.Stacked:表示文本将堆叠显示,读取顺序从左到右
- TextDirection.StackedRtl:表示文本将堆叠显示,读取顺序从右到左
以下代码将文本的TextDirection设置为Stacked方向:
var shape = worksheet.Shapes.AddShape(AutoShapeType.Rectangle, worksheet.Range["C2:F12"]);
shape.TextFrame.TextRange.Add("欢迎来到葡萄城");
//将文本方向设置为堆叠,并且文本的阅读顺序从左到右。
shape.TextFrame.Direction = TextDirection.Stacked;
支持双面打印 仅适用于.NET版本
有时候我们需要在一页的两面打印一个包含长工作表的工作簿。GcExcel .NET提供了PrintOutOptions类中的Duplex枚举来启用/禁用页面上的双面打印。该枚举有四个选项,用户可以根据需要选择打印工作簿的方式:
- Duplex.Default 表示打印机的默认双面打印设置
- Duplex.Simplex 表示单面打印
- Duplex.Vertical 表示双面垂直打印
- Duplex.Horizontal 表示双面水平打印
以下代码将以双面垂直打印方式打印三份工作簿副本:
// 创建打印选项。
PrintOutOptions options = new PrintOutOptions();
// 设置打印的打印机名称为 "Printer"。
options.ActivePrinter = "Printer";
// 打印3份副本。
options.Copies = 3;
// 设置双面垂直打印。
options.Duplex = System.Drawing.Printing.Duplex.Vertical;
// 使用 "Printer" 打印此工作簿。
workbook.PrintOut(options);
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
对PDF打开和保存时的增强
在新的V6.0 Update 2版本中,GcPdf在处理由其他软件生成的现有PDF文档方面进行了改进,并提供了以下优势:
1、GcPdf现在可以加载和保存可能不严格符合PDF规范的PDF文档
2、GcPdf将保留嵌入在PDF文档中的任何非PDF规范的自定义数据
3、加载PDF文档的平均速度得到了改善
这些改进使得GcPdf能够更好地处理各种PDF文档,即使这些文档不是完全符合PDF规范或包含一些非标准的数据。同时,加载PDF文档的速度也得到了提升。
在不指定密码的情况下处理受密码保护的文件
GcPdf现在允许在不指定密码的情况下处理受密码保护的文件。在加载受密码保护的文件后,您现在可以执行以下操作而无需指定密码:
读取/写入不基于PDF字符串对象的属性,例如:
- 您可以获取/设置CheckBoxField或RadioButtonField的值
- 获取某个文档的特定统计信息,例如获取页面数、注释数等
- 获取或更改文档元数据,因为元数据通常未加密
- 更改某些类型字段的值:CheckBoxField、RadioButtonField;可以更改TextBoxField、CombTextField的值,但有一些限制
如果可以在不使用PDF字符串的情况下定义新对象,您可以添加新对象。例如,您可以向一个页面或所有页面添加一个SquareAnnotation。
新增了DecryptionOptions类来表示解密选项。当加载加密的PDF时,您可以将其作为(可选)参数传递给GcPdfDocument.Load()方法。通过将DecryptionOptions.ThrowExceptionIfInvalidPassword设置为false(默认为true),以允许加载受密码保护的PDF而无需指定其密码。另一个相关的标志是DecryptionOptions.ThrowExceptionIfUnsupportedSecurityOptions,默认情况下也为true。将其设置为false可以允许GcPdf加载具有未知或损坏的安全处理程序的文档。
以下代码示例展示了如何向受密码保护的PDF添加注释,而无需指定密码:
using var fs = File.OpenRead("financial-report.pdf");
var doc = new GcPdfDocument();
doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false });
// 获取第一页的尺寸:
var page = doc.Pages[0];
var pageSize = page.Size;
// 添加一个方形注释:
SquareAnnotation sa = new SquareAnnotation();
sa.Page = page;
sa.Rect = new RectangleF(10, 10, pageSize.Width 20, pageSize.Height 20);
sa.Color = Color.Red;
doc.Save("AnnotationAdded.pdf");
操作底层PDF对象的API(GrapeCity.Documents.Pdf.Spec和GrapeCity.Documents.Pdf.Wrappers命名空间)
在这个版本中,GcPdf介绍了一个新的API,允许熟悉PDF规范的开发人员直接访问PDF底层对象,这些对象是构成PDF文档的基本组成部分。其中包括:
- PDF数组,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfArray、PdfArrayObject、IPdfArray、IPdfArrayExt以及GrapeCity.Documents.Pdf.Wrappers命名空间的PdfArrayWrapper
- PDF布尔值,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfBool、PdfBoolObject、IPdfBool和IPdfBoolExt
- PDF字典,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfDict、PdfDictObject、IPdfDict、IPdfDictExt以及GrapeCity.Documents.Pdf.Wrappers命名空间的PdfDictWrapper
- PDF名称,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfName、PdfNameObject、IPdfName和IPdfNameExt
- PDF空值,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfNull、PdfNullObject、IPdfNull和IPdfNullExt
- PDF数字,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfNumber、PdfNumberObject、IPdfNumber和IPdfNumberExt
- PDF引用,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfRef、PdfRefObject、IPdfRef和IPdfRefExt
- PDF流,参见GrapeCity.Documents.Pdf.Spec命名空间的PdfStreamObjectBase
- PDF字符串,参见GrapeCity.Documents.Pdf.Spec命名空间的类型PdfString、PdfStringObject、IPdfString和IPdfStringExt
这些新的API可以用来访问PDF制作者有时会添加但在PDF规范中没有描述的自定义属性。例如,DocumentInfo对象是一个PDF字典。PDF规范列出了可能存在于该字典中的属性(Creator、Author等),但在许多实际的PDF文件中,DocumentInfo字典包含了PDF规范中不存在的“SourceModified”属性。GrapeCity.Documents.Pdf.Spec命名空间中的类型现在允许开发人员访问/编辑这样的自定义项。
请参阅GcPdf参考文档以获取有关GrapeCity.Documents.Pdf.Spec和GrapeCity.Documents.Pdf.Wrappers命名空间的更多信息。
示例:获取图像属性
使用上述新的API,现在可以使用从流中检索的图像处理由图像扫描仪创建的许多PDF(其中大多数每页只包含一个JPEG或G4 TIFF图像)。 GcPdf包括新的PdfImageInfo类,它是PdfDictWrapper对象的派生类。该类包含许多方法,允许获取底层PDF流对象的属性/数据。此添加将检索流图像并直接解压缩或处理图像。
您可以检索以下图像属性:
- 直接检索每个页面上每个图像的流(使用GetImages()检索)
- 检索上述图像流的压缩格式(Filter)
- 检索上述图像流的黑白信息(Decode或BlackIs1)
- 检索可识别上述图像流颜色的信息(ColorSpace或BitsPerComponent)
- 检索每个掩码的流和每个信息(ImageMask)
- 等等……
以下代码从PDF流中检索图像属性:
using (FileStream fs = new FileStream(@"..\..\..\06-1.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs);
var imgs = doc.GetImages();
// 获取PDF中第一张图像的信息(我们知道有一张图像,因此为简单起见,没有进行索引检查):
PdfImage pi = (PdfImage) imgs[0].Image; // 注意:这里不需要强制类型转换,PdfImageBase是Image属性的类型。
Console.WriteLine($"PdfImage object ID: {pi.ObjID}");
// PdfImage是PdfDictWrapper对象的派生类,它有许多方法可用于获取底层PDF流对象的属性/数据
using (PdfStreamInfo psi = pi.GetPdfStreamInfo())
{
Console.WriteLine($" Image stream length: {psi.Stream.Length}");
Console.WriteLine($" ImageFilterName: {psi.ImageFilterName}");
Console.WriteLine($"ImageFilterDecodeParams: {psi.ImageFilterDecodeParams}");
// 打印ImageFilterDecodeParams的内容
foreach (var kvp in psi.ImageFilterDecodeParams.Dict)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
// 示例如何获取BlackIs1的值:
var blackIs1 = psi.ImageFilterDecodeParams.GetBool(PdfName.Std.BlackIs1, null);
Console.WriteLine($"BlackIs1: {blackIs1}");
}
// 打印PdfImage字典的属性
Console.WriteLine();
Console.WriteLine("Properties of PdfImage dictionary:");
foreach (KeyValuePair kvp in pi.PdfDict.Dict)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
var cs = pi.Get(PdfName.Std.ColorSpace);
Console.WriteLine($"ColorSpace: {cs.GetType().Name} {cs}");
var bpc = pi.Get(PdfName.Std.BitsPerComponent);
Console.WriteLine($"BitsPerComponent: {bpc?.GetType().Name} {bpc}");
}
输出显示了获取的所有图像属性。
在TextField中设置格式
GcPdf现在允许用户使用直接的方法(SetPercentFormat、SetNumberFormat、SetDateFormat、SetTimeFormat、SetSpecialFormat方法)以直观的方式给TextField指定日期、时间、数字格式和特殊格式。这些方法已经添加到TextField、CombTextField和ComboBoxField类中。新的方法支持设置与Acrobat中的TextField属性类似的属性。
新增了枚举SpecialFormat、CurrencySymbolStyle、NumberNegativeStyle和NumberSeparatorStyle。这些枚举用作上述方法的参数。
以下代码使用新的方法和参数在TextField上设置数字值。
GcPdfDocument doc = new GcPdfDocument();
var p = doc.NewPage();
var g = p.Graphics;
TextField result = new TextField();
result.Widget.Page = p;
result.Widget.Rect = new System.Drawing.RectangleF(100,100,100,100);
result.Widget.Border.Width = 1;
result.SetNumberFormat(2, Field.NumberSeparatorStyle.Dot, Field.NumberNegativeStyle.ShowParentheses, "\u20ac", Field.CurrencySymbolStyle.BeforeNoSpace);
result.Value = "12345.67f";
result.SetNumberValue(12345.67f, 2, Field.NumberSeparatorStyle.Dot, Field.NumberNegativeStyle.None, "$", Field.CurrencySymbolStyle.BeforeNoSpace);
p.Doc.AcroForm.Fields.Add(result);
doc.Save("NumberTextField.pdf");
为GcGraphics绘制布局的辅助类
在最新版本的GcPdf中,添加了新的布局引擎,引入了GrapeCity.Documents.Layout命名空间中的LayoutRect和其他相关类,以基于约束和扁平元素层次结构的布局模型来实现在PDF页面或图像上绘制多个元素而无需计算每个元素相对于其他元素的位置。新的布局引擎提供了灵活性,可以定位和调整元素的大小,从而实现在PDF和图像上绘制复杂的图形布局。
在V6.0 Update 2版本中,GcPdf还在GrapeCity.Documents.Layout.Composition命名空间中添加了额外的类:Surface、Layer、View、Space和Visual类,它们充当布局引擎与绘图表面之间的媒介,使得绘制更复杂的图形、文本和图像更加容易。下面简要介绍这些类的功能:
- Surface是Composition引擎中的主要类。它包含一个LayoutHost(布局引擎的根对象)和一个或多个视图(层)。层由可绘制元素(visuals)和嵌套层组成。Surface类的Render方法调用LayoutHost类的PerformLayout方法来计算表面布局,然后它会在指定的GcGraphics对象上从底部到顶部绘制所有层,包括嵌套层
- 层分为两种类型:Layer类对象和View类对象(派生自Layer对象)。View对象封装了LayoutView对象,它代表具有自己的转换矩阵的单独坐标系统。Layer对象充当轻量级的视图,具有自己的可绘制元素列表、嵌套层和可能的裁剪区域
- 层包含可绘制元素(Visuals)和空间(Spaces)。空间对象表示可能影响其他元素布局但本身不会被绘制的LayoutRect。Visual类继承自Space类。Visual类表示将在目标GcGraphics上绘制的元素
此外,这些类还允许您自定义绘制图形的Z顺序和裁剪。例如,可以从多个可绘制元素组合成一个PDF页面,然后在渲染到文档之前进一步调整这些元素。某些可视元素或层可以隐藏,其他可视元素可以在Z顺序中移动等。
还引入了其他API来实现各种布局。如需了解有关新类和每个类的功能的更多信息,请参阅相关文档。
以下是使用这些API可以实现的一个非常复杂布局的示例:
请查看用于生成此布局的完整源代码的在线演示:Documents for PDF | Text Flow (C#)
服务端 Word 组件 GrapeCity Documents for Word 更新说明
对于Office Math函数和转换为MathML的支持
GcWord现在支持在Word文档中创建和编辑Office Math内容。GcWord中的OMath支持包括完整的API,用于处理在科学、数学和通用目的的Word文档中广泛使用的数学符号、公式和方程。以下是OMath支持引入的新API的主要亮点:
- 用于表示GcWord中的Office Math内容的两个主要类是OMathParagraph和OMath。OMathParagraph表示带有Office Math内容的段落,而OMath表示内联的Office Math区域,可以包含在OMathParagraph或常规段落中
- 提供了专门的类(如OMathFunction、OMathEquationArray、OMathRadical等),用于表示OMath区域中的各种数学结构。这些类都是从通用的抽象OMathStruct基类派生而来
- 可以通过新的RangeBase属性(OMathParagraphs、OMaths、OMathStructs、OMathElements和OMathMatrixRows)访问Office Math内容
- 为了方便添加MS Word支持的内置方程,RangeBase、OMathParagraph、OMath和OMathElement类上提供了方便的Add/Insert方法,接受一个OMathBuiltInEquation枚举值,用于识别所需的方程
- 包含一个实用的MathMLConverter类,可以方便地在GcWord的OMath内容和MathML之间进行转换
有关GcWord中OMath支持的详细信息,请参阅Office Math文档。
以下代码使用OMath类和其函数将一个方程添加到Word文件中:
var sampleDoc = new GcWordDocument();
var om = sampleDoc.Body.AddParagraph().AddOMathParagraph().AddOMath();
om.AddRun("Γ").Font.Italic = false;
om.AddDelimiter(new string[] { "z" });
om.AddRun("=");
var nary = om.AddNary("", "0", "∞", "∫");
nary.Base.AddSuperscript("t", "z-1");
nary.Base.AddSuperscript("e", "-t");
nary.Base.AddRun("dt");
om.AddRun("=");
var frac = om.AddFraction();
var superscript = frac.Numerator.AddSuperscript("e", "-");
superscript.Superscript.AddRun("γ").Font.Bidi = true;
superscript.Superscript.AddRun("z");
frac.Denominator.AddRun("z");
nary = om.AddNary("", "k=1", "∞", "∏");
superscript = nary.Base.AddSuperscript("", "-1");
var delimiter = superscript.Base.AddDelimiter();
var item = delimiter.Items.Add();
item.AddRun("1+");
item.AddFraction("z", "k", null);
superscript = nary.Base.AddSuperscript("e", "z");
superscript.Superscript.AddRun("/").OMathFormat.IsLiteral = true;
superscript.Superscript.AddRun("k");
om.AddRun(", γ≈0.577216");
sampleDoc.Save("MathEquation.docx");
新增方法用于向 Word 文档添加内容
到目前为止,在Word文档中添加内容对象有一种或多种方式。例如-可以通过段落创建构造函数调用-doc.Body.Paragraphs.Add(“text”)或使用paragraph.GetRange()。Runs.Add(...)并在此调用之前创建段落来添加段落的“runs”。然而,使用V6.0 Update 2版本,现在可以直接在段落元素上使用新的'AddRun(...)'方法来创建runs。
类似地,GcWord在Word文档中的每种内容对象上添加了"Add<content object>(..)"方法,这样它们就可以直接添加到其父对象中,使代码更简洁高效。现在,可以使用新的辅助方法将这些对象直接添加到Word文档中的不同节或内容对象中:
- 表格(Table)
- 段落(Paragraph)
- 内容控件(ContentControl)
- 简单域(SimpleField)
- 超链接(Hyperlink)
- 双向覆盖(BidirectionalOverride)
- 数学公式段落(OMathParagraph)
- 数学公式(OMath)
- 运行内容(Run)
- 脚注(Footnote)
- 尾注(EndNote)
- 复杂域(ComplexField)
- 组合形状(GroupShape)
- 形状(Shape)
- 图片(Picture)
- 手写形状(InkShape)
请查看以下代码,该代码使用新方法'AddRun(..)'将一个段落运行添加到一个段落中:
GcWordDocument doc = new GcWordDocument();
// 添加一个带有默认格式的段落
var p = doc.Body.AddParagraph("text1");
// 在该段落中添加另一段使用“Heading1”样式格式化的文本
// 先前的代码应该是:p.GetRange().Runs.Add("text2", doc.Styles[BuiltInStyleId.Heading1]);
// 现在的代码更简洁,更清晰地表明可以将内容添加到对象中
p.AddRun("text2", doc.Styles[BuiltInStyleId.Heading1]);
在GcWord模板中转义模板标签
如果你想要防止特定的数据模板标签被数据模板引擎处理(即在模板扩展后字面上引用它),请在标签的开头双花括号之前插入一个反斜杠。
以下代码片段展示了如何转义原本会打印数据值的标签:
var dsPoint = new string[] { "2.2", "3.3", "4.4" };
var doc = new GcWordDocument();
doc.Body.Paragraphs.Add(@"\{{dsPoint.value}:todouble():format(0.#%)}");
doc.DataTemplate.DataSources.Add("dsPoint", dsPoint);
doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US"));
doc.Save("DocumentWithSingleSlash.docx");
另外,为了在模板标签之前使用反斜杠而不禁用模板处理,GcWord允许您插入两个或更多反斜杠,取决于需要多少个反斜杠。在处理模板标签时,它会从前面的反斜杠中移除一个反斜杠。
下面的代码向模板语法添加了双斜杠。当处理模板语法时,这将在生成的Word文件中添加一个反斜杠。
var dsPoint = new string[] { "2.2", "3.3", "4.4" };
var doc = new GcWordDocument();
doc.Body.Paragraphs.Add(@"\\{{dsPoint.value}:todouble():format(0.#%)}");
doc.DataTemplate.DataSources.Add("dsPoint", dsPoint);
doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US"));
doc.Save("DocumentWithDoubleSlash.docx");
GrapeCity Documents for Excel V6.0 Update1 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
通过 Copy/Move 系列新接口,更方便的复制和移动 Worksheet
在某些场景下,需要复制或移动一个工作簿中某一个或几个表单(Worksheet),GcExcel(Grapecity Documents for Excel)在新版本中通过增加新的接口,支持试用代码的方式复制或者移动表单,具体接口如下:
复制 API 用于将工作表集合复制到其他位置。
- IWorksheets.Copy(IWorkbook targetWorkbook = null) 用于将工作表集合复制到指定工作簿的末尾。 如果目标工作簿为空,工作表集合将被复制到当前工作簿。
- IWorksheets.CopyBefore(IWorksheet targetSheet) 用于将工作表集合复制到指定工作表之前的位置。 目标工作表可以属于任何工作簿。
- IWorksheets.CopyAfter(IWorksheet targetSheet) 用于将工作表集合复制到指定工作表之后的位置。 目标工作表可以属于任何工作簿。 移动 API 用于将工作表集合移动到其他位置。
- IWorksheets.Move(IWorkbook targetWorkbook = null) 用于将工作表集合移动到指定工作簿的末尾。 如果目标工作簿为空,则工作表集合将移动到当前工作簿。
- IWorksheets.MoveBefore(IWorksheet targetSheet) 用于将工作表集合移动到指定工作表之前的位置。 目标工作表可以属于任何工作簿。
- IWorksheets.MoveAfter(IWorksheet targetSheet) 用于将工作表集合移动到指定工作表之后的位置。 目标工作表可以属于任何工作簿。 注意:
- 不能将当前工作簿的所有工作表移动到另一个工作簿会导致异常。 将所有工作表移动到当前工作簿时,什么都不做。
- 当目标工作簿中存在同名时,工作表将通过添加后缀(x)来重命名。 x 代表同名索引。
示例代码:
导出图片时,通过 ImageSaveOptions 调整输出图像
GcExcel 已经提供了一种使用 ToImage 方法将工作表、任何指定范围和各种形状类型转换为图像的方法。
GcExcel 现在还添加了 ImageSaveOptions 类,提供各种属性以在将工作表、范围或形状导出到图像文件时修改和调整图像。
有以下的选项:
- ScaleX and ScaleY
- Resolution
- BackgroundColor
- ShowRowHeadings
- ShowColumnHeadings
- ShowGridlines
- GridlinesColor
- ShowDrawingObjects
- BlackAndWhite
接口
以下设置用于 IWorksheet、IRange 或 IShape ToImage()。
- 使用 ImageSaveOptions.ScaleX 和 ImageSaveOptions.ScaleY 获取或设置比例。
- 使用 ImageSaveOptions.Resolution 获取或设置 jpeg 文件 dpi,其他图像格式将忽略此属性。
- 使用 ImageSaveOptions.BackgroundColor 获取或设置导出图像的背景颜色。
- 使用 ImageSaveOptions.BlackAndWhite 获取或设置是否导出黑白图像。
以下设置仅用于 IWorksheet 或 IRange ToImage()。
- 使用 ImageSaveOptions.ShowRowHeadings 或 ImageSaveOptions.ShowColumnHeadings 获取或设置是否显示行标题或列标题。
- 使用 ImageSaveOptions.ShowGridlines 获取或设置是否显示网格线。
- 使用 ImageSaveOptions.ShowDrawingObjects 获取或设置是否显示绘图对象(图表、形状和图片)。
- 使用 ImageSaveOptions.GridlineColor 获取或设置网格线颜色。
添加一组支持 ImageSaveOptions 参数的新方法。
- 使用 IWorksheet.ToImage(string imageFile, ImageSaveOptions options) 或 IWorksheet.ToImage(Stream stream, ImageType imageType, ImageSaveOptions options) 使用选项将工作表导出到图像文件。
- 使用 IRange.ToImage(string imageFile, ImageSaveOptions options) 或 IRange.ToImage(Stream stream, ImageType imageType, ImageSaveOptions options) 使用选项将范围导出到图像文件。
- 使用 IShape.ToImage(string fileName, ImageSaveOptions options) 或 IShape.ToImage(Stream stream, ImageType imageType, ImageSaveOptions options) 使用选项将形状导出到图像文件。
代码示例
以下代码设置导出工作表图像的背景颜色并设置网格线颜色
支持直接加载和保存 Xltx 文件
xltx格式文件是Excel提供的模板文件,xltx文件可以用来预设一些样式和数据,我们可以使用模板文件创建具有相同样式和数据的 xlsx 文件。
您现在可以直接在 GcExcel 中加载 Xltx 文件,修改并保存回来。 GcExcel 在 I/O 上支持新的 Xltx 文件格式。
Workbook.open 和 Workbook.save 方法现在接受新的 XltxOpenOptions 和 XltxSaveOptions 类来加载 XLTX 工作簿或将其保存回工作簿。 您可以从文件或文件流加载或保存 Xltx。
以下代码使用 GcExcel 打开和保存 .xltx 文件。
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
新的 ClonePage 方法
在使用 GcPdf API - GcPdfDocument.MergeWithDocument 方法之前可以合并 PDF 文档。 随着 v6.1 版本的发布,还可以在 PDF 文档中克隆页面。 使用新的 PageCollection.ClonePage(..) 方法在特定索引处复制 PDF 的页面,并将其放置在同一 PDF 中的另一个索引处。 您还可以控制是否在克隆页面中包含注释或表单字段。
以下代码可用于克隆页面。 第一个参数指定需要克隆的页面的索引,而下一个参数是克隆页面将插入的目标索引。 这里省略了可选参数cloneAnnotations和cloneFields。 它们默认为 true,因此任何注释和字段也将被克隆。
服务端 Word 组件 GrapeCity Documents for Word 更新说明
增强了对在聚合函数中使用多个表达式的支持
在上一版本中,我们使用新的“calc”模板功能向 GcWord 报告模板添加了计算,该功能允许在类似 VBA 的表达式中使用模板数据字段和文字。Calc 表达式支持算术、逻辑和其他常用运算符、文本和数据聚合函数等。
现在可以将表达式用作聚合函数的参数。表达式可以在函数中使用常量、聚合或两个集合。
现在可以进行以下计算 -
-
使用常量 -
{{ calc Sum(2 + ds.value)}}
-
在聚合函数中使用聚合 -
{{ calc Average(ds.value+Sum(ds.value)/2)}}
-
在函数中使用两个集合 -
{{ calc Average(ds.value+ds2.value)}}
请查看以下发票报表,其中发票总和是通过在聚合“总和”函数中使用多个表达式计算的。
添加基于集合的状态函数
GcWord 模板现在支持以下集合状态函数:IsFirst、IsLast、可应用于迭代范围的索引。这些函数返回集合上当前迭代的状态。在 Word 报表中,可以实现如下方案 -
- 仅显示集合的偶数元素。
- 显示元素数和当前元素数。
- 检查单词是集合中的第一个元素还是最后一个元素。
- 在某个位置插入一个单词。 下面的代码在集合的末尾插入一个单词。
var p = doc.Body.Paragraphs.Add("{{if IsLast(ds)}} Employee List {{endif}} {{ds.value}}", doc.Styles[BuiltInStyleId.ListParagraph]);
支持 Word (.docx) 文件中的链接样式
此功能将允许开发人员使用新的 GcWordDocument.Styles.AddLinkedStyle 方法将链接样式应用于 Word 文档中的两个段落或运行。还添加了一个布尔属性 HideLinkedCharacterStyles,可用于隐藏链接的字符样式。
您可以将链接样式应用于以下 API -
- Run.Style - 添加一个运行并为其设置链接样式
- ContentControl.Style - 将链接样式设置为内容控件
- FormattedMark.Style - 将链接样式设置为段落的标记(用于表示段落段落标记的物理位置的字形)
- FindFormatting.Style - 创建查找选项并为其设置链接样式
“以下”将通用链接样式应用于段落和段落的一部分,即运行。请注意,链接的样式反映在 MS Word 的样式列表中。
支持形状和字体中的三维效果
GcWord 现在支持 API 中形状和字体的 3D 效果。
GcWord 的 TextFrameFormat 和 Effects 类已扩展为 ThreeDFormat 和 ThreeDScene 效果。
类在字体或形状上设置三维格式属性。
ThreeDScene 类将 3D 场景效果应用于对象,如照明、摄像机、背景等。
字体、形状、组合形状和图片类具有新的 ApplyEffects Preset 方法,用于设置文本和形状的内置效果。
以下快照显示了文本上的三维格式设置,这些设置反映在生成的 Word 文档中。
以下快照显示了应用于形状的三维格式以及三维旋转设置,这些设置反映在生成的Word文档中。
GrapeCity Documents for Excel V6.0 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
1、EXCEL 工作簿大小优化
Excel 文件可能经常包含未使用的格式、定义的名称或空区域单元格。这些单元格最初可能具有数据和格式,但随着时间的推移不再使用,数据被删除但格式保留。工作簿中存在大量此类单元格会导致性能下降并增加工作簿的大小。
使用 GcExcel,您现在可以排除此类单元格并在保存工作簿的同时减小工作簿的大小。
GcExcel 在 XLSXSaveOptions() 类中提供了新选项,以使用 Workbook.Save(..) 方法优化您的工作簿。
引入了三个新选项:
- XlsxSaveOptions.ExcludeUnusedStyles{ get; set; } - 指示是否排除用户定义但从未使用过的单元格样式。 默认值为 false
- XlsxSaveOptions.ExcludeUnusedNames{ get; set; } - 指示是否排除用户定义但从未使用过的定义名称。 默认值为 false
- XlsxSaveOptions.ExcludeEmptyRegionCells{ get; set; } - 指示是否排除所用数据范围之外的任何空单元格(没有数据或只有样式的单元格)
下面的代码排除了工作簿中任何未使用的样式、名称或空区域单元格,从而减小了工作簿的大小。
//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
Stream fileStream = this.GetResourceStream("xlsx\\File needs to be optimized.xlsx");
workbook.Open(fileStream);
XlsxSaveOptions options = new XlsxSaveOptions {
ExcludeEmptyRegionCells = true,
ExcludeUnusedStyles = true,
ExcludeUnusedNames = true
};
using (MemoryStream outputStream = new MemoryStream()) {
workbook.Save(outputStream, options);
outputStream.Position = 0;
workbook.Open(outputStream, OpenFileFormat.Xlsx);
}
// Save to an excel file
workbook.Save("OptionsToOptimizeFileSize.xlsx");
2、JDK8 是GcExcel(for Java) 最低支持的版本
由于 JDK 6 和 JDK 7 已经结束,GcExcel 将不再支持 JDK 6 和 7,现在将从 v6 版本开始面向 JDK 8。 GcExcel 现在也不再需要将 GcExcel 扩展包添加到项目中。
3、GcExcel 模板增强功能
分页电子表格报告新的增强功能
在上一个版本中,GcExcel 模板引入了“TemplateOptions.PaginationMode”和 CountPerPage 属性 (CP) 来管理工作簿分页到单独的工作表中,工作表布局中的行数固定。
在 v6 中,引入了一个新的 API 来完成额外的布局。借助分页模板功能,您可以使用新 API 创建以下类型的布局:
在分页电子表格中为页面或组配置页眉/页脚
添加了新的 API: RepeatType、NoRepeatAction 和 RepeatWithGroup 以重复组内的单元格值或为每个页面配置页面/组页眉/页脚。
- RepeatType 属性确定在设置 RepeatWithGroup 属性时如何在组内重复单元格值
- NoRepeatAction 属性决定了普通内容不显示在当前页面时如何设置删除方式
- RepeatWithGroup 属性指定模板中与生成的报告中的组重复的单元格引用
在以下快照中,RepeatType 设置为患者和标本信息的 FirstPage,RepeatWithGroup 设置为 D3,这意味着页眉范围 A6:I18 为 D3 中设置的每个新患者 ID 重复。
组的页码和页数
在固定行布局中,引入了新属性 - PageNumber 用于设置当前页的页码,PageCount 用于设置当前组的页数。 这将有助于指示组的当前页码和组中的总页数。 这两个属性可以使用语法定义 - PageNumber(string cell) 和 PageCount(string cell)。 在下面的布局中,患者 ID P001 的信息被分页为四页,并且可以显示当前页码。
根据页面大小对电子表格进行分页
到目前为止,您一直在根据 CountPerPage (CP) 属性对工作表进行分页,该属性在工作表布局中生成固定数量的行并分页到多个工作表中。 但是,可以根据页面大小对报表进行分页,页面大小由 Excel 中的页面设置设置决定。 在这种情况下,如果 CP 属性未设置或设置为 *,则 TemplateOptions.PaginationMode 为 true。 该报告将根据页面大小分页到多个工作表中。
在这种类型的分页中,添加了新属性 RepeatOutput、KeepTogether 和 AttachTo,它们有助于在每页的最大行数之后插入分页符,而不管组和每个组的小计。 在这种情况下,最大行数取决于纸张大小。
- RepeatOutput 属性指定合并单元格的值是仅出现在报表的第一页还是每一页
- KeepTogether 属性确保单元格及其后代出现在同一页上。 该属性允许您选择是否要将单元格与水平分页或垂直分页保持在一起
- AttachTo 属性允许将单元格模板与另一个单元格绑定,以确保它不会单独出现在页面上。 您可以使用此属性来防止文档中出现孤立的页眉/页脚
下面的示例显示了一个根据页面大小分页的报告。 根据 Excel 的页面设置设置,当行达到工作表中的最大行数时,无论模板组设置如何,报告都会分页到下一个工作表。 在这里,“RepeatOutput”设置在合并的单元格上,我们可以选择在每个工作表上重复或不重复。
保留原始模板或流程特定的模板工作表
到现在为止,您可以将整个工作簿模板处理成一个报告。但是,GcExcel 现在引入了 Workbook.GenerateTemplate() 方法,该方法返回一个新的工作簿实例而不改变原始模板工作簿。
此外,您的工作簿可能有多个模板,您可能只需要处理一个特定的模板工作表。GcExcel 添加了一个条款来处理来自许多模板的特定模板工作表。 您可以将这个特定的模板工作表传递给新的 Workbook.GenerateTemplate() 方法。请参阅下面的代码:
IWorkbook workbook = workbook.GenerateReport(new IWorksheet[] { sheet });
该方法返回一个新的工作簿实例,仅处理作为参数传递的模板而不更改原始模板。 如果未提供参数,GenerateTemplate() 方法将处理所有工作表。
在以下示例中,仅处理了三个工作表中的特定工作表“PurchaseOrder”。
// Add data source
workbook.AddDataSource("dt", salesData);
// Init template global settings
workbook.Names.Add("TemplateOptions.KeepLineSize", "true");
// Process the template and return the specified report
IWorkbook report = workbook.GenerateReport(workbook.Worksheets["PurchaseOrder"]);
// Save the report as xlsx to a stream
report.Save(outputStream);
4、获取所选区域的使用范围
GcExcel 在工作表中提供了 UsedRange 属性和 GetUsedRange 方法来获取工作表中所有已使用的范围。 您可能还希望获取选定范围内的已用范围,而不是已用范围的整个工作表。 GcExcel 将 UsedRange 属性和 GetUsedRange 方法添加到 IRange 接口。
以下代码在选定范围内查找使用范围并更改使用范围的单元格背景颜色。
// Init data.
IRange range = sheet.Range["B2:D4"];
range.Value = "Unused";
// Select range.
IRange selectedRange = sheet.Range["C3:E5"];
selectedRange.Select();
// Get the used range from selectedRange.
IRange usedRange = selectedRange.UsedRange;
usedRange.Value = "Used";
usedRange.Interior.Color = Color.LightBlue;
5、添加具有范围参考或定义名称的形状文本
假设您有大量员工销售数据,并希望使用任何图形图像突出显示当月的总销售额。 您可以将形状与数据绑定公式链接起来,这可以动态地表示所选形状中当月的销售额。 在某些情况下,工作表中的形状可以包含引用范围或定义名称的文本。 此文本可以根据范围内的数据或定义的名称进行更改。 GcExcel 添加 IShape.Formula 属性来设置或删除当前形状的范围引用或定义的名称。 您可以设置 IShape.Formula=”=A1”(到单元格/区域)或 IShape.Formula = “=refname”(到定义的名称)。
下面的代码将公式设置为一个形状,该形状使用一个公式引用单元格 G8:
// set shape formula to G8
IShape shapeResult = worksheet.Shapes.AddShape(AutoShapeType.Rectangle, worksheet.Range["B7:D8"]);
shapeResult.Formula = "=G8";
6、使用直接方法将形状/图片添加到单元格/单元格区域
为了简化将 IShape 添加到范围的过程,提供了一系列直接方法来将 IShape 添加到范围而无需获取其坐标。 GcExcel 向 IShape 接口添加了五个新方法:
- AddPicture() - 根据当前工作表指定范围内的现有文件创建图片
- AddShape() - 返回表示当前工作表指定范围内的新自选图形的对象
- AddChart() - 在当前工作表的指定范围内创建图表
- AddConnector() - 在当前工作表的指定范围内创建一个连接器
- AddCameraPicture() - 在当前工作表上创建从参考范围到目标范围的图片
以下代码将图片与连接器一起直接添加到范围:
var workbook = new GrapeCity.Documents.Excel.Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
// Place the same picture to two range
System.IO.Stream stream = this.GetResourceStream("puffins.jpg");
IShape smallPicture = worksheet.Shapes.AddPicture(stream, ImageType.JPG, worksheet.Range["B2:B4"]);
IShape bigPicture = worksheet.Shapes.AddPicture(stream, ImageType.JPG, worksheet.Range["D4:F12"]);
worksheet.Shapes.AddConnector(ConnectorType.Straight, worksheet.Range["C2:F3"]);
worksheet.Shapes.AddConnector(ConnectorType.Straight, worksheet.Range["B5:C12"]);
// Save to an excel file
workbook.Save("AddPictureToRange.xlsx");
7、支持新的 Lambda 函数,包括帮助函数
如果您的工作表包含复杂的计算,您必须详细了解它们。 这可能容易出错并且难以维护。 为什么不只添加一次复杂的计算,给它一个简单的名字,然后在你的工作表中重复使用它呢? GcExcel 支持以编程方式添加 LAMBDA 函数。 它有助于将流程抽象为函数并创建自定义、可重用的函数,并使用熟悉的名称调用它们。 语法很简单。 只需将函数添加到 Workbook 的 Names 集合中即可。
=LAMBDA([参数 1, 参数 2, …,] 计算)
上面的语法添加了一个 LAMBDA 函数,其中包含要传递给该函数的参数,例如单元格引用、字符串或数字。 您最多可以输入 253 个参数。 此参数是可选的。 另一个参数是作为函数结果执行和返回的公式。
下面的代码在 workbook.Names 集合中将 LAMBDA 函数命名为“CountWords”。 LAMBDA 函数执行长时间计算以计算文本中的单词数。 该函数被赋予了一个简单的名称,‘CountWords’,它可以在工作表中多次重复使用,而不是重复冗长的计算函数。
workbook.Names.Add("CountWords", "=LAMBDA(text,IF(LEN(TRIM(text))=0,0,LEN(TRIM(text))-LEN(SUBSTITUTE(TRIM(text),\" \",\"\"))+1))");
GcExcel 中的 LAMBDA 函数支持包括对七个新的 Helper 函数的支持,这些函数有助于 LAMBDA 函数处理数组:
- BYROW
- BYCOL
- SCAN
- REDUCE
- MAP
- MAKEARRAY
- ISOMITTED
8、新的文本和数组操作 Excel 函数
GcExcel 现在支持以下函数集:
文本操作函数
以前,为了提取文本的一部分,您必须使用多个函数。 例如,要从文本中提取名字,比如单元格中的“Mark Taylor”,您必须使用 FIND 或 SEARCH 函数来查找列表中第一个空格的位置,然后使用 LEFT、MID 或 RIGHT 结合 LEN 来提取数据。 但是,新的文本操作函数有助于提取或组合各种文本片段,并使用单个函数将结果溢出到其他单元格。 支持以下新的文本操作功能。
- TEXTSPLIT
- TEXTBEFORE
- TEXTAFTER
以下代码使用 TEXTBEFORE 函数查找句子中单词之前的文本:
sheetOfTEXTBEFORE.Range["A3"].Value = "Little red Riding Hood's red hood";
sheetOfTEXTBEFORE.Range["A4"].Value = "Formulas";
sheetOfTEXTBEFORE.Range["A4"].Font.Bold = true;
sheetOfTEXTBEFORE.Range["B4"].Value = "Results";
sheetOfTEXTBEFORE.Range["B4"].Font.Bold = true;
sheetOfTEXTBEFORE.Range["B5"].Formula2 = "=TEXTBEFORE(A2,\"Red\")";
sheetOfTEXTBEFORE.Range["A5"].Formula = "=FORMULATEXT(B5)";
sheetOfTEXTBEFORE.Range["B6"].Formula2 = "=TEXTBEFORE(A3,\"red\",2)";
sheetOfTEXTBEFORE.Range["A6"].Formula = "=FORMULATEXT(B6)";
sheetOfTEXTBEFORE.Range["B7"].Formula2 = "=TEXTBEFORE(A3,\"red\",-2)";
sheetOfTEXTBEFORE.Range["A7"].Formula = "=FORMULATEXT(B7)";
sheetOfTEXTBEFORE.Range["B8"].Formula2 = "=TEXTBEFORE(A3,\"Red\")";
sheetOfTEXTBEFORE.Range["A8"].Formula = "=FORMULATEXT(B8)";
sheetOfTEXTBEFORE.Range["B9"].Formula2 = "=TEXTBEFORE(A3,\"Red\",,1)";
sheetOfTEXTBEFORE.Range["A9"].Formula = "=FORMULATEXT(B9)";
sheetOfTEXTBEFORE.Range["B10"].Formula2 = "=TEXTBEFORE(A3,\"Riding\")";
sheetOfTEXTBEFORE.Range["A10"].Formula = "=FORMULATEXT(B10)";
数组操作函数
数组操作函数将有助于合并和调整范围并溢出公式的范围。如果您的工作表有动态数组公式,这些新函数将使您的电子表格更具吸引力,并支持动态数组的高级和优化操作。添加了以下新功能:
HSTACK、VSTACK、TOROW、TOCOL、WRAPROWS、WRAPCOLS、TAKE、DROP、CHOOSEROWS、CHOOSECOLS 和 EXPAND
以下代码将数组的数据转换为一行:
sheetOfTOROW.Range["A7"].Value = "Result";
sheetOfTOROW.Range["A7"].Font.Bold = true;
sheetOfTOROW.Range["A8"].Formula2 = "=TOROW(A2:D4)";
9、范围交集、并集和偏移
GcExcel 一直支持 API 来查找两个范围的交集/联合/偏移量。在 v6 中,我们通过引入直接方法简化了这个操作:
- IRange.Intersect(IRange range2) 或 IRange.Intersect(params IRange[] ranges) 获取当前范围与一个或多个范围参数的交集
- IRange.Union(IRange range2) 或 IRange.Union(params IRange[] ranges) 获取当前范围和一个或多个范围参数的并集
- IRange.Offset(int rowOffset, int columnOffset) 获取当前范围的偏移量
下面的代码执行两个范围的交集和并集,分别为相交范围和并集范围设置内部颜色:
// Set the intersection of two range value and style.
var intersectRange = worksheet.Range["A2:E6"].Intersect(worksheet.Range["C4:G8"]);
intersectRange.Interior.Color = Color.FromArgb(56, 93, 171);
var firstUnionRange = worksheet.Range["A11:D13"];
firstUnionRange.Merge();
firstUnionRange.Interior.Color = Color.FromArgb(56, 93, 171);
firstUnionRange.HorizontalAlignment = HorizontalAlignment.Center;
firstUnionRange.VerticalAlignment = VerticalAlignment.Center;
var secondUnionRange = worksheet.Range["D14:G16"];
secondUnionRange.Merge();
secondUnionRange.Interior.Color = Color.FromArgb(145, 167, 214);
secondUnionRange.HorizontalAlignment = HorizontalAlignment.Center;
secondUnionRange.VerticalAlignment = VerticalAlignment.Center;
// Set the union of two range value and font style.
var unionRange = worksheet.Range["A11:D13"].Union(worksheet.Range["D14:G16"]);
10、控制自动调整的选项
GcExcel 已经支持在打开 Excel 文件时自动调整行/列。但是,在 v6 中,API 添加了一个新选项来控制此行为。
GcExcel 现在支持 XlsxOpenOptions.DoNotAutoFitAfterOpened 属性来获取/设置是否在打开文件后自动调整行高。 默认值为false。
11、SpreadJS 功能支持
GcExcel 添加了新的选项来支持额外的 SpreadJS 特性:
- 在 JSON I/O 中支持“RowColumnStates”
- 支持跨工作簿公式 - JSON I/O 中的 'externalReference'
- 支持将浮动物体(floatingObject)和图片形状写成JSON文件中的形状
- 支持 JSON I/O 中的“allSheetsListVisible”字段
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
1、支持所有注释的外观流(Appearance Streams)
为了在所有查看器中以相同的显示呈现注释,外观流与注释相关联——这些是 PDF 规范的可选设置部分。GcPdf 现在支持它支持的所有注释的外观流,从而在任何查看器中以完全相同的外观呈现注释。 请注意 - 在此版本中,GcPdf 无法为富文本生成正确的外观流。
此外,在 v6 版本中,GcPdf 添加了 GcPdfDocument.BuildRichTextAppearanceStreams 布尔属性,该属性为具有富文本的注释生成内容流。 该属性默认为false,因此不会生成富文本的内容流,支持富文本的查看器可以像以前一样渲染这些注释。 如果设置为 true,GcPdf 将使用纯文本生成内容流,这样富文本将丢失,但注释在所有查看器中看起来都是一样的。 在下面的快照中,此属性设置为 false,因此可以正确显示带有富文本的自由文本注释。 注释的外观与 Acrobat 中呈现的外观相同。
服务端 Word 组件 GrapeCity Documents for Word 更新说明
1、GcWord 报告模板增强功能
有条件地显示/隐藏多个数据块
GcWord 报告模板添加了新的“if/else/endif”语句来定义一次显示/隐藏整个块或多个块的条件。 定义的条件是一组与算术或逻辑运算相结合的模板值操作数。 考虑以下示例,它显示来自具有单个 if/endif 条件的咨询协议文档的保留信息(如果 payRetainer=1 则显示保留信息),而不是之前使用 hbi 语句隐藏特定块。
将计算添加到 Word 模板
您现在可以使用新的“calc”模板功能将计算添加到 GcWord 报告模板,该功能允许您在类似 VBA 的表达式中使用模板数据字段和文字。 Calc 表达式支持算术、逻辑和其他常用运算符、文本和数据聚合函数等。
一些有效的“calc”表达式示例包括:
- {{ Calc 2 * 2 + 4 }}
- {{ Calc ds.UnitPrice * ds.Quantity }}
- {{ Calc Sum(ds.Price)}}
- {{ Calc Max(ds.Price)}}
此外,calc 和新的条件构造可以一起使用,从而在 if 下启用复杂条件,例如:
{{ if useLimit and Sum(ds.score)> limit }} passed {{ else }} failed {{ endif }}
考虑以下示例,其中发票报告使用 calc 表达式添加报告中所有项目的总价。
2、支持形状和字体效果
反射效果
GcWord 添加了一个具有详细属性的 Reflection 类,以在形状或文本上应用反射效果。效果看起来像形状或文本上的水效果。您可以使用 ApplyBuiltInReflection 方法通过 TextEffects、ShapeEffects 或 FormatScheme 类为反射效果设置自定义属性,该方法可以在文本或绘图对象上设置 9 种内置反射效果中的一种。另外,你也可以直接通过Shape.Effects.Reflection属性给形状设置反射效果。
以下代码在标题上添加了“HalfTouching”反射效果:
GcWordDocument doc = new GcWordDocument();
var style = doc.Styles.Add("My Style", StyleType.Paragraph);
style.Font.Size = 48;
// apply top half touching reflection effect to the text
style.Font.Effects.ApplyBuiltInReflection(BuiltInReflectionId.HalfTouching);
doc.Body.Paragraphs.Add("Wetlands", style);
doc.Save("font-reflection-sample.docx");
发光效果
此效果在形状区域或文本之外添加了模糊的颜色边界。您可以直接使用 shape.Effects.Glow 属性设置发光效果,或使用 TextEffects、ShapeEffects 类的 ApplyBuiltInGlow 方法为文本或绘图对象设置 24 种内置发光效果中的一种。
以下代码直接使用 ApplyBuiltInGlow 方法添加发光效果:
var style = doc.Styles.Add("My Style", StyleType.Paragraph);
style.Font.Size = 48;
style.ParagraphFormat.Alignment = ParagraphAlignment.Center;
// apply 5 point accent 2 glow effect to the text
style.Font.Effects.ApplyBuiltInGlow(BuiltInGlowId.Radius5Accent2);
doc.Body.Paragraphs.Add("Wetlands", style);
doc.Save("Article.docx");
模糊效果
为了使 Word 文档内容中使用的某些形状脱颖而出,GcWord 添加了添加模糊效果的功能。 ShapeEffects 类扩展了新的 Blur 类。 您还可以使用 Shape 的 FormatScheme 类设置模糊效果。
以下代码使用 shape.Effects.Blur 类的直接方法对 Shape 设置模糊效果。
Shape shape = run.GetRange().Shapes.Add(100, 100, GeometryType.Star4);
shape.Fill.Type = FillType.Solid;
shape.Fill.SolidFill.RGB = Color.Yellow;
shape.Line.Width = 4;
shape.Line.Fill.SolidFill.RGB = Color.Red;
// apply 7 point blur effect to the shape
shape.Effects.Blur.Radius = 7f;
软边效果
GcWord 添加了另一种方法,可以在 Word 文档中以编程方式为形状添加艺术效果。ShapeEffects 类已使用 SoftEdge 类进行了扩展。软边缘效果是形状边缘的微妙模糊。 它可以通过 SoftEdge.Radius 值应用。软边效果可以直接通过 Shape 类或 FormatScheme 类的 Shape.Effects 类应用。
下面的代码通过形状样式属性将软边效果应用于形状。
Shape shape = run.GetRange().Shapes.Add(100, 100, GeometryType.Star7);
shape.Fill.Type = FillType.Solid;
shape.Fill.SolidFill.RGB = Color.Yellow;
shape.Line.Width = 8;
shape.Line.Fill.SolidFill.RGB = Color.Red;
// apply 5 point soft edge effect to the style
var fmtEffect = doc.Theme.FormatScheme.Effects.Add();
shape.Style.Effects.ThemeEffects = fmtEffect;
填充叠加效果
填充叠加层可用于为对象指定额外的填充并将两种填充混合在一起。 GcWord 添加了可以应用于形状的填充叠加效果。ShapeEffects 类已使用 FillOverlay 效果类进行了扩展。此外,还可以通过 FormatScheme 类使用固定、占位符或图案颜色使用来应用效果。
以下代码将一个形状的图案填充叠加层应用到另一个形状上。
GcWordDocument doc = new GcWordDocument();
Paragraph p = doc.Body.Paragraphs.Add();
Run run = p.GetRange().Runs.Add();
Shape shape = run.GetRange().Shapes.Add();
shape.Fill.Type = FillType.Solid;
shape.Fill.SolidFill.ThemeColor = ThemeColorId.Accent1;
// apply pattern fill overlay with another color to mix with the main fill
var fmtEffect = doc.Theme.FormatScheme.Effects.Add();
var overlay = fmtEffect.FillOverlay;
overlay.BlendMode = BlendMode.Multiply;
var foFill = overlay.Fill;
foFill.Type = FillType.Pattern;
foFill.PatternFill.Type = PatternFillType.DashedHorizontal;
foFill.PatternFill.ForeColor.ThemeColor = ThemeColorId.None;
foFill.PatternFill.BackColor.ThemeColor = ThemeColorId.Accent6;
shape.Style.Effects.PlaceholderColor.ThemeColor = ThemeColorId.Accent3;
shape.Style.Effects.PlaceholderColor.Transparency = 0.6f;
shape.Style.Effects.ThemeEffects = fmtEffect;
doc.Save(@"shape-filloverlay-style-pattern-mixed-sample.docx");
历史版本
查看更多关于 GrapeCity Documents 服务端文档组件库的历史版本。
GrapeCity Documents for Excel V5.0 Update2 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
1、添加 Excel 表单控件的新 API
在电子表格中收集和呈现数据的一种方法是通过添加到工作表的表单控件。列表框、复选框和按钮等控件有助于构建工作表并管理其数据。
GcExcel 现在支持 API 以编程方式添加 Excel 表单控件。您可以使用标准表单控件创建 Excel 表单、对其进行自定义、从用户那里收集数据或以编程方式检索表单控件值。此外,如果您的多个 Excel 电子表格包含表单控件,则电子表格可以加载到 GcExcel 对象模型中,并且可以修改表单控件。
GcExcel 引入了 IControlCollection, 它添加了IControl类型的表单控件的所有通用成员 。您可以使用 Worksheet.Controls 添加或访问控件。支持以下控件:
- Button
- DropDown
- CheckBox
- Spinner
- ListBox
- OptionButton
- GroupBox
- Label
- ScrollBar
有了这种支持,您还可以使用以下功能。
每个控件都有自己的一组属性。您可以使用每个控件的特定 API 进行设置。例如,以下代码显示了如何设置特定于按钮控件的属性:
[code]
var workbook = new GrapeCity.Documents.Excel.Workbook();
IWorksheet ws = workbook.Worksheets["Sheet1"];
var button = ws.Controls.AddButton(50, 30, 120, 40);
button.Text = "Submit";
button.PrintObject = true;
button.HorizontalTextAlignment = HorizontalAlignment.Center;
button.VerticalTextAlignment = VerticalAlignment.Center;
// Save to an excel file
workbook.Save("ButtonsBasicUsage.xlsx");
[/code]
- 修改表单控件和表单控件值 - 使用 Worksheet.Controls 集合访问控件。 CheckBox、OptionButton、ListBox、DropDown 和 Scrollbar 表单控件的LinkedCell 属性有助于将控件的值绑定到链接单元格,反之亦然。您可以使用 LinkedCell 属性获取控件的值
- 将表单控件用作 Shapes - 一个新选项, FormControl 已添加到 ShapeType 枚举,它可以检查表单控件是否为 Shape 类型。此外,使用<IControl>.ShapeRange 来使用表单控件上的某些形状功能,例如复制控件形状或复制单元格上的形状
- 通过 Excel I/O 和 JSON I/O 使用表单控件
- 导出为 PDF、HTML 和图像(导出为图像)
2、GcExcel 模板增强
分页模板
如果您有一个特定的模板,您希望页面上的行数固定,并且需要在以下工作表上重复相同的布局,您可以选择将工作簿分页到单独的工作表中。GcExcel 模板引入了“ TemplateOptions.PaginationMode”, 这是一个全局布尔属性,当它为真时,可以将工作簿分页到单独的工作表中。同时,如果 false 将遵循模板布局和分页的传统规则。如果为 true,您可以定义新的 CountPerPage 属性 (CP) 用于需要重复数据的单元格。该属性将限制页面上生成的模板单元格的实例(记录)数量。当记录数超过 CP 的值时,会自动创建(或分页)一个新的工作表,其布局与模板相同。“CountPerPage”属性是指工作表上分组记录的计数。
以下快照显示 CP 值为 10,为模板单元设置。FM=O 表示当模板单元展开时,新实例将覆盖下面的单元。
在某些条件下 CountPerPage (CP) 属性将起作用。例如,当 Group (G) 属性设置为 Normal/Merge/Repeat时,记录被分组,count 是指创建的组数。如果 Group (G) 属性设置为 List,则记录不分组,Count 指的是实际记录数。
模板语言的调试模式
现在不再需要打开原始模板文件来检查模板是否正确展开。GcExcel 支持在 TemplateOptions 中定义名称 TemplateOptions.DebugMode 。当 DebugMode 为真时,原始模板工作表将出现在工作表 1 中,紧挨着展开的模板工作表 2。
3、支持图表 - 数据表
图表中的数据表有助于方便地查看/分析数据。在 Excel 中,数据表显示在 Excel 图表下方。这特别有用,因此可以一起分析数据和图表,而不是滚动到工作表或其他工作表中的不同位置以将图表数据与源数据匹配。为了帮助解决这个问题,GcExcel 引入了两个新属性 - IChart.HasDataTable 设置 true 或 false,是否将数据表添加到图表,IChart.DataTable 表示图表的数据表,它可以提供各种选项来设置数据表,如字体、格式、显示图例键等。
代码后快照中的数据表是使用新 API 添加的。数据表的格式可以自定义。看看下面的代码:
[code]
IWorksheet worksheet = workbook.Worksheets[0];
// Set data.
worksheet.Range["A1:C3"].Value = new object[,]
{
{"BUDGET TOTALS", "ESTIMATED", "ACTUAL"},
{"Income", 63300, 57450},
{"Expenses", 54500, 49630}
};
//Create chart.
GrapeCity.Documents.Excel.Drawing.IShape shape = worksheet.Shapes.AddChart(GrapeCity.Documents.Excel.Drawing.ChartType.ColumnClustered, 250, 0, 350, 250);
shape.Chart.SeriesCollection.Add(worksheet.Range["A1:C3"]);
shape.Chart.ChartTitle.Text = "Estimated vs Actual";
//Display the data table.
shape.Chart.HasDataTable = true;
//Config the data table.
GrapeCity.Documents.Excel.Drawing.IDataTable datatable = shape.Chart.DataTable;
datatable.Format.Line.Color.ObjectThemeColor = ThemeColor.Accent6;
datatable.Font.Color.ObjectThemeColor = ThemeColor.Accent2;
datatable.Font.Size = 9;
// Save to an excel file
workbook.Save("chartdatatable.xlsx");
[/code]
4、在数据透视表中添加计算项
计算项有助于在数据透视表中添加自定义公式,对源数据中不存在的其他项执行自定义计算。GcExcel 引入了以下 API:
- IPivotField.CalculatedItems() 获取CalculatedItems 集合,表示指定数据透视表字段中的所有计算项
- ICalculatedItems.Add(string name, string formula) 创建一个新的计算项
- ICalculatedItems.Remove(string name) 按名称删除计算字段
- IPivotItem.Formula 获取或设置计算项目公式
如果数据透视表单元格中的值受两个或多个计算项的影响,则该值由求解顺序中的最后一个公式确定。使用 GcExcel,您可以使用以下 API 设置求解顺序:
- IPivotFormula 是一个表示内容的对象,并解决了计算项的顺序
- 使用 IPivotTable.IPivotFormulas() 获取 IPivotFormula 集合,该集合表示 指定数据透视表字段中的所有IPivotFormula
- 使用 IPivotFormula.Index{get;set;} 获取或设置当前 PivotFormula的索引
下面的电子表格将国家和产品设置为计算项。'Country' 计算项添加了属于同一大陆的国家/地区的销售额,而 Product Calculated Item 将所有价值为 2500 美元的产品设置为 iPhone13,之后将此类项目的 Visible 设置为 False。
[code]
ICalculatedItems countryCalcItems = calculatedItemTable.PivotFields["Country"].CalculatedItems();
ICalculatedItems productCalcItems = calculatedItemTable.PivotFields["Product"].CalculatedItems();
// add some calculated items
countryCalcItems.Add("Oceania", "=Australia+NewZealand");
countryCalcItems.Add("Europe", "=France+Germany");
countryCalcItems.Add("America", "=Canada");
productCalcItems.Add("IPhone 13", "=2500");
// hide the duplicate normal item.
IPivotItems countrys = calculatedItemTable.PivotFields["Country"].PivotItems;
countrys["United Kingdom"].Visible = false;
countrys["United States"].Visible = false;
IPivotItems products = calculatedItemTable.PivotFields["Product"].PivotItems;
products["IPhone 13"].Visible = false;
calculatedItemSheet.Range["A:I"].AutoFit();
calculatedItemSheet.Activate();
// Save to an excel file
workbook.Save("Calculateditem.xlsx");
[/code]
5、在数据绑定中支持 JSON 作为 DataSource
您现在可以使用 JSON 字符串作为数据源绑定 Excel 电子表格。worksheet.DataSource 现在可以直接绑定到 接受 JSON 字符串作为数据源的JsonDataSource类。以下示例代码从 JSON 文件导入数据并将其绑定到工作表:
[code]
string jsonStr = "[{\"name\":\"jack\",\"age\":12},{\"name\":\"alice\",\"age\":25}]";
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.DataSource = new JsonDataSource(jsonStr);
worksheet.Range["A1"].BindingPath = "name";
workbook.Save("DataSource.xlsx");
[/code]
6、自定义函数中的 IsVolatile 属性支持
使用自定义函数时,GcExcel 将具有相同名称和参数的公式缓存存储在同一列中。这使得相同的公式在同一列中只计算一次。 GcExcel 在定义自定义函数时支持 IsVolatile布尔属性。该属性将控制在使用自定义函数时是否使用缓存。
以下示例演示如何创建自定义函数以生成 GUID。要每次生成唯一的 GUID,自定义函数不应使用缓存。因此,示例代码将 IsVolatile 属性设置为 true ,以便在每次调用时生成一个新的 GUID。
[code]
//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
GrapeCity.Documents.Excel.Workbook.AddCustomFunction(new GeneralID());
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Range["A1"].Formula = "GeneralID()";
var valueA1Before = worksheet.Range["A1"].Value;
worksheet.Range["A2"].Formula = "GeneralID()";
// A1's value has changed.
var valueA1After = worksheet.Range["A1"].Value;
/* Implementation of GeneralID
public class GeneralID : CustomFunction
{
public GeneralID() : base("GeneralID", FunctionValueType.Object)
{
this.IsVolatile = true;
}
public override object Evaluate(object[] arguments, ICalcContext context)
{
return Guid.NewGuid().ToString("N");
}
}
*/
[/code]
7、获得准确的范围边界
GcExcel .NET 添加了新的 CellInfo.GetAccurateRangeBoundary(..) 方法,该方法返回比 RectangleF 更准确的范围边界值。
以下代码获取范围的准确范围边界并在该确切位置添加形状。
[code]
// Get the absolute location and size of the Range["G1"] in the worksheet.
IRange range = worksheet.Range["F1:G1"];
RectangleF rect = GrapeCity.Documents.Excel.CellInfo.GetAccurateRangeBoundary(range);
// Add the image to the Range["G1"]
System.IO.Stream stream = this.GetResourceStream("logo.png");
worksheet.Shapes.AddPictureInPixel(stream, GrapeCity.Documents.Excel.Drawing.ImageType.PNG, rect.X, rect.Y, rect.Width, rect.Height);
// Save to an excel file
workbook.Save("getrangeboundary.xlsx");
[/code]
8、电子表格中的 SVG 图像支持
GcExcel 添加了 IShapes.AddPicureInPixel(..) 方法以添加 SVG 格式的图像。另外,ToImage(..) 方法支持导出为 SVG 图片的如下:
- 使用 IRange.ToImage(string filename) 方法将范围导出为 SVG 图片
- 使用 ISheet.ToImage(string filename) 方法将工作表导出为 SVG 图片
- 使用 IShape.ToImage(string filename) 方法将形状导出为 SVG 图片
GcExcel 还将在以下情况下支持带有 SVG 图像的电子表格:
- 无损导入导出excel文件
- JSON 输入/输出
- 导出为 PDF/HTML/图像文件
注意:要在 Java 中使用带有 GcExcel API 的 SVG 图像,扩展包 batik (1.14) 和 gcexcel-extension-5.2.0.jar 应该包含在项目中。
9、新的 Excel 函数
LET 函数
在您的电子表格中,您可能使用了多个可能很复杂的公式。LET 函数将用户友好的名称应用于范围/单元格或计算,并有助于提高公式计算性能。重复计算的冗长公式只能计算一次,并且可以用易于理解的名称存储结果。此名称可以在 LET 函数中进一步使用,只计算一次,稍后再使用结果。您不再需要记住引用的底层逻辑。GcExcel 将此 LET 函数添加到其 支持的 Functions列表中。如果多个工作表重复重复计算,您可以更新这些公式以使用 LET 函数。下面给出了对电子表格进行这种改进的一个示例。
在上面的示例中,LET 函数通过使用 LET 函数并将 VLOOKUP 的输出定义为 'name' 和 'points' 变量并在公式中重新使用它们,将 VLOOKUP 的计算次数从 4 次减少到 2 次。
下面的代码展示了如何在代码中设置函数:
[code]
ws.Range["$F$9"].Formula2 = "=LET(name,VLOOKUP($G$5,$B$5:$D$16,2,0),points,VLOOKUP($G$5,$B$5:$D$16,3,0),"Ho, "&name&", you have "&points&" points. "IF(points>300, "Great job, "&name&"!",""))
[/code]
10、GetPivotData 公式支持溢出数据
在上一个版本中,GcExcel 引入了 GETPIVOTDATA(...) 函数和新的 IRange.GenerateGetPivotDataFunction(IRange destination = null) 方法来为不同的工作表生成 GETPIVOTDATA 函数。
在 v5.2 中,我们扩展了此函数的功能,以支持类似于动态数组公式的溢出数据。该语法现在支持数组项和引用 - “ =GETPIVOTDATA(data_field, pivot_table, [field1, item1, field2, item2], ...)”。 因此,在下面的示例中,使用 GcExcel 在其中一个单元格中设置的 GETPIVOTDATA 函数将两个城市一起放入数组 {'New York', 'Boston'} 中,以便从数据透视表中一次性查找数据该函数的先前实现。
11、使用 InvalidFormulaException 中的其他详细信息更好地调试
为了向客户提供更多信息以解决电子表格中的错误,GcExcel 在 InvalidFormulaException中添加了更多信息。异常现在将包括单元格的位置和公式文本以跟踪错误。因此,如果您遇到此异常,您将获得更多信息来解决电子表格中的问题。
服务端 Word 组件 GrapeCity Documents for Word 更新说明
1、GcWord 报告模板增强功能
模板标签的扩展语法检查
GcWord 现在包括模板处理时的模板标签语法检查。将扫描候选模板标签,并检查结构。如果发现任何错误,将引发异常,并提供有关问题的详细信息。
在下面的示例中,解析段落中指定的日期格式。格式中指定的字符被扫描并在异常中报告。
[code]
var coll = new[] { DateTime.Parse("2022/02/12"), DateTime.Parse("1011/03/04") };
var doc = new GcWordDocument();
doc.DataTemplate.DataSources.Add("ds", coll);
doc.Body.Paragraphs.Add(@"{{ds.value}:format(yyyy:MM:dd)}");
doc.DataTemplate.Process();
//result
GrapeCity.Documents.Word.InvalidTemplateFormatException:
'Template key {{ds.value}:format(yyyy:MM:dd)} have non-escaped service char in the formatter param at position 23.
Chars '(',')',':','{','}' should be escaped.'
[/code]
添加特定于数据源的文化
使用 GcWord 模板,您现在可以将特定文化添加到添加到模板中的特定数据源。doc.DataTemplate.DataSources.Add(..) 方法中提供了新的区域性参数 。如果设置了此参数,则所有带有来自数据源的标签的文化特定转换都将使用提供的文化。
以下代码为不同的数据源添加了不同的文化:
支持 Decimal、DateTime 和 DateTimeOffset 作为原始类型
GcWord 模板 在模板中允许原始类型(如整数或浮点数)并使用“值”标签访问它们。也可以通过这种方式使用Decimal、DateTime和 DateTimeOffset类型 。
以下代码演示了对 DateTime 和 DateTimeOffset 类型的支持,同时添加到数据源以及使用 value 标记对其进行访问以设置 Date/DateTime 格式:
[code]
var doc = new GcWordDocument();
// The data source (Napoleon's first italian company battle dates from Wikipedia):
doc.DataTemplate.DataSources.Add("dsItalianBattles", new DateTime[]
{
//first stage
DateTime.Parse("1796/04/12"),
DateTime.Parse("1796/04/14"),
DateTime.Parse("1796/04/15"),
DateTime.Parse("1796/04/19"),
DateTime.Parse("1796/04/22"),
//second stage
DateTime.Parse("1796/05/10"),
DateTime.Parse("1796/09/4"),
DateTime.Parse("1796/10/15"),
DateTime.Parse("1796/12/14"),
});
// The data source (world wide wars start dates):
doc.DataTemplate.DataSources.Add("dsWW", new DateTimeOffset[]
{
DateTimeOffset.Parse("28/07/1914"),
DateTimeOffset.Parse("01/09/1939"),
});
// Add a list template so that the data is formatted as a list:
var myListTemplate = doc.ListTemplates.Add(BuiltInListTemplateId.BulletDefault, "myListTemplate");
//DateTime list
doc.Body.Paragraphs.Add("Napoleon's first italian company battles dates:", doc.Styles[BuiltInStyleId.Heading1]);
// Add a list of battles dates:
var p = doc.Body.Paragraphs.Add("{{#dsItalianBattles}}{{dsItalianBattles.value}:format(yyyy-MM-dd)}{{/dsItalianBattles}}", doc.Styles[BuiltInStyleId.ListParagraph]);
p.ListFormat.Template = myListTemplate;
//DateTimeOffset list
doc.Body.Paragraphs.Add("World wars start dates:", doc.Styles[BuiltInStyleId.Heading1]);
p = doc.Body.Paragraphs.Add("{{#dsWW}}{{dsWW.value}:format(yyyy\\:MM\\:dd)}{{/dsWW}}", doc.Styles[BuiltInStyleId.ListParagraph]);
p.ListFormat.Template = myListTemplate;
[/code]
对文本和形状应用阴影效果
您现在可以使用新的 API 在 MS Word 中自定义内容的外观,以便在形状和文本 Word .docx 文件中应用阴影效果。新的 Effects 属性被添加到 Font、Shape、Picture、GroupShape、CanvasShape、ShapeStyle 和 FormatSсheme 类中。阴影效果分为四类:
- ShadowBase 是所有影子类的基础抽象类
- ShadowPreset 和 InnerShadow 基于 ShadowBase 类
- OuterShadow 基于 InnerShadow 类
- TextEffects 类用于对 Font 类应用效果,仅包含 OuterShadow 阴影类型,而 ShapeEffects 是基于 TextEffects 类,并具有额外 的InnerShadow 和 ShadowPreset 阴影类型
以下快照显示了 应用于“Treadstone”文本 的外阴影效果和使用 GcWord API 应用于形状的 BuiltInShadowId.ProspectiveLowerLeft 枚举。
您可以将自定义阴影和内置阴影应用于文本和形状。请注意,目前 PDF/图像导出不支持阴影。
2、示例:将 markdown (.md) 文档导入 Word(并转换为 PDF/图像)
现在将您的 Markdown 文档导入 GcWord 并将它们转换为 .docx 文件。 GcWord 示例浏览器 现在实现了一个带有完整源代码的新示例,用于将 Markdown .md 文件转换为 .docx 文件和 PDF。转换由 GcWordWeb.Samples.MarkdownToWordRenderer.WordRenderer 类完成,使用 Markdig 包(BSD 2-Clause license)解析 .md 文件,并使用 GcWord OM 从中创建 MS Word 文档。WordRenderer C# 源代码包含在示例中。MarkdownToWordRenderer 源位于示例 zip 的 Samples/Markdown/Renderer 子目录中。
3、GcWordLayout
PdfOutputSettings 现在包括 PdfOutputSettings.SecurityHandler属性,可在将 Word .docx 文件转换为 PDF 导出时 访问其他与安全相关的功能(例如,密码、限制复制等)。看看下面的演示。
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
1、替换/删除 PDF 文档中的文本
您现在不仅可以使用常见的搜索选项(如整个单词、区分大小写和正则表达式(之前已支持))在 PDF 文档中搜索文本,还可以使用新的 API 替换或删除找到的文本实例 - ITextMap.ReplaceText(... ) 或 ITextMap.DeleteText(...) 方法。这在有多个 PDF 文档需要更新的情况下很有用。它提供了以编程方式更新和替换每个文件中某些信息的能力,从而为用户和程序员节省了时间和精力。
新方法也适用于 RTL 和垂直文本。替换文本时,新文本可以具有相同或不同(指定)的字体/字体大小。
删除文本可以在两个 DeleteTextMode 选项中完成。
标准:在这种模式下,文本在删除后的位置会移动。
PreserveSpace:在该模式下,被删除文本的位置会保留一个空格,之后的文本不会移动。
以下代码使用标准选项在 PDF 文档中查找文本“湿地”并删除文本:
[code]
// delete word "wetlands" from the document
using (FileStream fs = new FileStream(@"Wetlands.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{
GcPdfDocument doc = new GcPdfDocument();
doc.Load(fs);
FindTextParams ftp = new FindTextParams("wetlands", true, false);
doc.DeleteText(ftp, DeleteTextMode.Standard);
doc.Save("wetlands_deleted_doc.pdf");
}
[/code]
GrapeCity Documents for Excel V5.0 Update1 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
1. ImportData 功能增强
ImportData 是 GcExcel V5.0 发布时加入的功能,此功能便于用户提取 Excel 文件中的数据。本次发布,GcExcel增加了 GetNames 接口,让用户从Excel中提取数据的效率更加高效。
使用方法:WorkBook.GetNames 返回工作表中所有的表格名称,便于用户选择导入数据的范围和位置,示例代码:
相对普通的文件打开方式,使用 ImportData可以减少一半时间。
2. 数据绑定模板支持 JSON 数据源
本次发布,GcExcel 的模板语法支持了 JSON 数据源,这样可以让 GcExcel 生成模板报表时直接使用其他接口传递过来的 JSON 格式数据。
如下方代码所示:
运行后的效果如下图所示:
3. CELL 函数支持
GcExcel V5.0 Update1 中增加了对 CELL 函数的支持。
该函数的应用场景是:通过查找特定单元格的单元格信息并在 Excel 文件中执行某些操作。信息可以是任何性质的数据,如单元格地址、颜色、内容、文件名、格式等。
使用方式:GcExcel 引入了语法“=CELL(info_type, [reference])”的 CELL 函数,通过提供所需的信息类型和引用类型,帮助您找到相关的单元格信息。
有关 CELL 函数的更多信息,推荐查看微软网站解释:CELL Function。
4. 转换表格(Table)到范围(Range)
Excel 除了被用于数据归档和样式保存外,还有一个重要作用就是公式计算。为了使用动态数组公式等函数,必须将表格转换为范围(Range)。对于 Excel 来说,Range 表示一个单元格、一行、一列、一个包含单个或若干连续单元格区域的选定单元格范围,或者一个三维区域。
想象一下,假如您有 1000 多个 Excel 文件,您想在其中使用表数据,但在将其转换为Range之前无法实现,手动执行将表格转换为 Range 的任务既繁琐又低效。因此,为了满足上述需求,GcExcel 提供了一个新的 API —— ITable.ConvertToRange() ,可以用编程的方式将表格转换为 Range。 请注意:将表格转换为范围(Range)后,表格功能在数据范围中不再可用,但样式和数据将保留,且工作表上公式中的表格引用将转换为单元格引用。
5. 数据透视表中支持 "ShowValueAs"
GcExcel 目前支持了 Excel 的“将值显示为”选项,这有助于在数据透视表中以不同方式显示值。
- IPivotField.Calculation 获取或设置一个值,该值表示由指定字段执行的计算类型。
- 使用 IPivotField.BaseField 获取或设置自定义计算的基本字段。 此属性仅对数据字段有效。
- 使用 IPivotField.BaseItem 获取或设置基本字段中的项目以进行自定义计算。 此属性仅对数据字段有效。
在以下示例中,GcExcel已在数据透视表的数据上设置了“总计百分比”选项:
6. 数据透视表支持计算字段
本次更新,GcExcel 添加了一个 ICalculatedFields 接口,您可以使用该接口在数据透视表中创建或删除计算字段。
此外,IPivotTable.CalculatedFields() 方法可以获取包含指定数据透视表中所有计算字段的 CalculatedFields 集合,而新的 IPivotField.Formula 可以获取或设置计算字段公式。
7. SpreadJS 兼容性增强
透视表中的视图:经过 GcExcel 的 JSON 导入导出,由 SpreadJS 设置的透视表视图会保留,如下图:
集算表:经过 GcExcel 的 JSON 导入导出,由 SpreadJS 设置的集算表会保留,如下图:
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
1. 支持 PAdES B-LT 和 B-LTA 级别的电子签名
GcPDF 引入了对签署 PDF 文档 PAdES 标准的支持 ,使电子签名的文档长期有效。
GcPDF 支持的 LTV 签名如下:
- 文档安全存储:根据 PDF 规范,验证 LTV 签名所需的所有信息都应该在 文档安全存储 ( DSS ) 中。它是文档目录中的PDF 词典 。GrapeCity.Documents.Pdf.Security.DocumentSecurityStore 类表示 GcPDF 中的 DSS ,并且可以通过 GcPdfDocument.SecurityStore 属性访问此类的实例。DocumentSecurityStore 类允许开发人员为签名添加验证信息。
- 文档时间戳签名:一种特殊类型的签名,在时间戳标记中指示的时间建立完整 PDF 文件的确切内容。GcPdfDocument.TimeStamp (...) 方法允许创建文档时间戳签名。
下图演示使用了 GcPDF API 生成并添加到 PDF 文档 的 PAdES B-LTA 级别签名:
2. PDF 图层增强功能
GcPDF 支持以编程方式向PDF文档添加图层,帮助排列 PDF 中相关的对象。
使用方式:使用 GcPdfDocument.OptionalContentProperties 类可将单独的内容层添加到单个 PDF 中。
3. 将文档保存为 SVG
与 JPEG 和 PNG 等光栅图像格式相比,SVG 是一种矢量格式,可以在不损失质量的情况下以任意大小进行渲染。这种格式让设计人员和开发人员可以更好地控制图像外观。它也是 Web 图形的标准化格式,旨在与其他 Web 约定 (如 HTML、CSS、JavaScript和文档对象模型)一起使用。由于 SVG 的许多优点, 在文档中使用 SVG 图像是必不可少的,例如 PDF 和图像。
本次发布,GcPDF 可以使用所有常见的图形操作来绘制新 GcSvgGraphics 类的实例,然后可以将其转换为 GcSvgDocument 并保存为 SVG 或 SVGZ 图像。
以下代码演示了将 PDF 页面(文档中的第二页)导出为 SVG/SVGZ 格式:
var pdfDoc = new GcPdfDocument();
using (var fs = new FileStream("slide-pages.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{
pdfDoc.Load(fs);
var page = pdfDoc.Pages[1];
// Render a PDF page to the .svg file page.SaveAsSvg("slide-pages.svg");
// Render a PDF page to the byte array with compressed data in SVGZ format
var svgzData = page.ToSvgz();
File.WriteAllBytes("slide-pages.svgz", svgzData); }
服务端 Word 组件 GrapeCity Documents for Word 更新说明
1. 增强的字体支持
GcWord 添加了在 DOCX 文档中嵌入字体的功能,以确保您的文档在其他系统中的显示或打印与它们在您系统上的显示相同。本次发布,可以使用 GrapeCity.Documents.Text 命名空间中的查找字体选项在添加新内容后修改/保存它们。
如果您的文档是用多语言字体脚本准备的, GcWord 还可以通过设置以获取不同语言文化的主题字体。
例如,对于 Settings.LocaleNameFarEast = "ja-JP," GcWord在Supplemental map 中从 Theme Font Collection的MinorFont 和 MajorFont 中找到 "Jpan" 字体脚本 ,然后将映射的字体定义为该文档的“使用中”。如果未指定字体 ,则 GcWord 将来自 MinorFont 和 MajorFont 主题字体的 Latin.Name 字体名称定义为本文档的“正在使用”或使用默认主题字体。
GcWord 的新 API:
- 扩展 FontInfoCollection 类以从 GrapeCity.Documents.Text 命名空间添加字体。
- 扩展 Settings 类以支持 SaveOptions 类。定义本地属性以查找与语言文化相关的字体。
2. 字体效果
除了上述增强之外,GcWord 还向 Font 类添加了额外的 Fill 和 Line 属性。这项功能有助于将字体效果添加到您的文档中,例如 Line-Solid、Gradient 或 No Fill。
3. 段落块行为
GcWord 现在允许使用名为“ pbb” 或“段落块行为” 的新模板格式化程序在表格单元格中定义值列表(多行) 。 此格式化程序将帮助在单个表格单元格中添加一个范围作为单独的段落,而不是像默认范围行为那样为每个项目生成一个新的表格行。
如下图,如果 未定义“pbb” ,则 Oceans 下的海洋名称都出现在单独的表格行中。如果使用数据源绑定定义了“pbb”,则 seas name 的所有名称一起出现在一个单元格中。
以下代码显示了如何为上面的示例设置“pbb” 格式化程序:
table[1, 0].GetRange().Paragraphs.First.GetRange().Runs.Add("{{#ds.seas}:pbb()}{{ds.seas.name}}{{/ds.seas}}");
4. 运行块行为
GcWord 现在还支持添加' rbb'或 run-block-behavior 格式化程序以将列表的数据项打印为同一段落的运行,而不是作为默认范围行为的单独段落。
如下图,如果添加的海洋名称不带“rbb”,则海洋名称将打印在单独的行上,海洋名称重复。但是如果在 #ds.seas 中添加'rbb',它将用冒号分隔每个海洋名称:
以下代码演示了如何为上面的示例添加 'rbb' 格式化程序:
doc.Body.Paragraphs.First.GetRange().Runs.Add("{{#ds.seas}:rbb()}{{ds.seas.name}}; {{/ds.seas}}");
GrapeCity Documents for Excel V5.0 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
1. 数据导入(Import Data)
使用数据导入(ImportData)接口,当您需要从 Excel 文件中提取数据时,不再需要加载整个 Excel 文件。借助此功能可以更快、更有效地同时从多个Excel文件中导入数据。
2. 动态数组公式接口(Dynamic Array Formula)
Microsoft Excel 在 2018 年推出了动态数组公式的概念:可基于一个公式将多个结果返回到一个单元格区域中,为此动态数组公式也被称为溢出范围功能。动态数组公式通过删除重复项、对列表进行排序、输出筛选的数据范围等来创建唯一值的列表,以确保现有函数可以利用相同的溢出范围功能。
GcExcel 在本次更新中也增加了动态数组公式接口(可通过 IRange.Formula2 属性设置,如下图所示)。
3. 上下文批注(Threaded Comments)
在 Excel 中,上下文批注被广泛应用于组内讨论和响应,该功能支持回复内联、嵌套注释,以及将多个批注串联在一起的对话样式,该功能在 GcExcel V5.0 中被正式引入。
GcExcel 添加了 IWorksheet.CommentsThreaded 集合以处理 Excel 文档中的上下文批注,特别是添加回复、删除批注、导航批注等。新的 IRange.AddCommentThreaded 方法将帮助向范围添加上下文批注,而 IRange.ClearCommentsThreaded 将帮助清除范围中的上下文批注。
假设两个或多个用户对多个 Excel 文件有一个共同的上下文批注(如下面的示例所示)。新的 API 将帮助以编程方式添加上下文批注,以涵盖多个 Excel 文档。
4. 区域快照(Linked Picture)
借助区域快照,可将不同大小的图表、数据表、条件格式等全部组合在一个工作表中,不仅可以适应大小,而且当数据更改时,区域快照中的数据也会更改。
GcExcel也支持了区域快照功能(IShapes.AddCameraPicture),该功能支持如下属性:
- IPictureFormat.TransparentBackground { get; set; }: 设置指定的区域快照格式是否使用透明背景
- IPictureFormat.Reference { get; set; }: 设置当前区域快照的引用
使用代码添加一系列数据的区域快照示例:
5. 工作簿视图(Workbook Views)
标准的 Microsoft Excel 视图可以根据要分析的内容进行更改。例如,"页面布局"视图可帮助您可视化文档在打印时的外观,而"分页符"视图则显示分页符的显示位置。
如果打开多个文档时需要显示公共视图,GcExcel 允许以编程方式对其进行控制(借助IWorksheetView.ViewType 属性来定义三个预定义视图:"普通"、"页面布局"和"分页预览")。
除了内置视图外,在 Excel 中,用户还可以自定义视图。使用自定义视图,您可以建立显示和打印设置,例如无网格线或标题、特定边距和特定工作簿视图等,并将其应用于其他电子表格中。为了适应 Excel 的这一功能,GcExcel 也引入了新的 ICustomView 界面和集合 IWorkbook.CustomViews,以将自定义视图添加到工作表中。
如下所示,将工作表的默认视图类型设置为 "分页预览":
6. GETPIVOTDATA 函数
虽然数据透视表可以显示大量数据,但用户可能只想根据数据透视表检索特定的数据结构,而非单元格引用,这就可以利用 GETPIVOTDATA 函数来完成。
只要引用的字段仍然存在,GETPIVOTDATA 函数即使在数据透视表更改时也能正常工作。GcExcel 支持 GETPIVOTDATA(...)函数和新的IRange.GenerateGetPivotDataFunction(IRange destination = null)方法,来为不同的工作表生成 GETPIVOTDATA 函数。
7. 与 SpreadJS 兼容相关:支持表格 expandBoundRows 接口
GcExcel 支持 SpreadJS 的 API 来扩展表中的绑定行(ITable.ExpandBoundRows 属性)。
如果将该属性设置为 true,则在更改数据时将添加或删除整行以调整行计数。如果设置为 false,则应用 Microsoft Excel 策略,即不允许在数据源发生更改时添加或删除行计数。
8. 直连打印机打印(仅针对 .NET)
到目前为止,在 .NET 标准应用中工作的跨平台 API 在使用"打印"命令时都面临着挑战。这一挑战主要是由于打印 API 可用性带来的限制。在当前版本中,GcExcel 添加了一个新的打印 API,可以实现将 Excel 文档直接打印到 Windows 平台的物理打印机上。
GcExcel 的新接口 IWorkbook.PrintOut 和 IWorksheet.PrintOut 可以调用物理打印机来打印工作簿或工作表,不仅支持打印,还可以提前设置其他选项。
请注意:GcExcel 使用了 GcPDF 将工作簿输出到打印机,要在 Windows 上使用 GcPDF 的打印功能,需要引用软件包 GrapeCity.Documents.Imaging.Windows。
代码如下所示:
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
1. 支持 SVG 矢量图
与 JPEG、PNG 等经典位图图像格式相比,SVG 格式的矢量图像可以以任何尺寸渲染而不会降低质量,因此,该格式使设计人员和开发人员能够对图像外观进行大量修改。
SVG 是 Web 图形的标准化格式,可与其他 Web 约定(如 HTML、CSS、JavaScript 和文档对象模型)配合使用。由于 SVG 的许多优点,在文档(如 PDF 和图像)中使用 SVG 图像至关重要。
在 GcPDF V5.0 中,引入了一个新的 GcSvgDocument 类,该类可以创建、加载、检查和修改 SVG 图像的内部结构。您还可以从文件、流或字节数组中获取图像,并使用 GcGraphics.DrawSvg 方法将 SVG 图像绘制到 GcPdfDocument、GcBitmap 或 GcWicBitmap 类。
所有 SVG 功能(包括访问 SVG DOM)在 GcPDF 都完全可用。
示例代码:
2. 创建 SVG 图像并渲染为 PDF 文档
3. 可访问 SVG DOM
GcPDF 提供了对 SVG 文档对象模型的完全访问权限,目前已支持以下元素:svg、g、defs、样式、用法、符号、图像、路径、圆形、椭圆、线、多边形、折线、矩形、剪辑路径、线性渐变、停止、标题、元数据、desc 等。
4. 在 Windows 上打印 PDF 文档
用户在使用 GcPDF 的 API 处理 PDF 文档时可以打印数字文档,借助 GcPrintManager 属性,可以编程方式使用 Direct2D 在 Windows 平台上打印 PDF。
示例代码:
5. 线性化现有 PDF 文档
线性化("快速 Web 视图")PDF 用于 Web 应用程序,可以加快打开大型文档的速度。GcPDF 支持在 .NET 应用程序中对新的 PDF 文档进行线性化,同样支持使用枚举类型为"Linearized"的新"SaveMode"枚举来线性化任何现有的 PDF 文档。
6. 新的保存模式枚举
GcPDF 现在支持三种不同的模式,在这些模式下,可以使用新的"保存模式"枚举来保存 PDF 文档:
- 默认值:保存的文档不会线性化或通过增量更新进行保存
- 线性化:PDF 文档以线性化形式保存,针对 Web 视图进行了优化
- 增量:在 PDF 文档中执行的所有更改都将添加到现有文档中。向已签名的 PDF 文档添加签名时,通常使用此模式
新的重载已添加到 GcPdfDocument.Save 和 GcPdfDocument.Sign 方法中。这些重载现在将采用 SaveMode 枚举值来线性化或不线性化文档,同时保存方法。
服务端 Word 组件 GrapeCity Documents for Word 更新说明
1. 支持基元类型和字符串的数组作为报表模板的数据源
2. 自定义和嵌入字体
使用 GcWord 可以在 MS Word 文档中定义和嵌入字体,即使系统上缺少字体也会正常显示。使用新的字体 API,将享受如下功能:
- 允许用户在文档中定义和嵌入任何字体,因此即使本地系统中缺少字体,Microsoft Word 也会正确呈现文档
- 允许用户读取和使用字体数据进行 Word 文档呈现
- 允许用户从 Word 文档中查找和删除嵌入字体
- 获取有关 Word 文档中使用的 ThemeFont 类属性的详细信息
以下新增功能已添加到 GcWord 支持的字体 API 中。
具有新属性的扩展主题字体类:
- 添加新的 FontInfo 类
- 添加表示 FontInfo 集合的新 FontInfoCollection 类
- 添加新的 FontSignature 类以支持 FontInfo.Signature 属性
- 添加新的 EmbeddedFont 类以支持 FontInfo.Embedded 属性
- 添加表示 EmbeddedFont 集合的新 EmbeddedFontCollection
- 将 Fonts 属性添加到 DocumentBase 类以访问 FontInfoCollection
- 用户可以管理 GcWordDocument 和 GlossaryDocument 类中的字体
下面的代码将 Times New Roman 字体嵌入到 DOCX 中,自定义名称为"我的字体 1":
GrapeCity Documents for Excel V4.0 Update2 更新内容
服务端表格组件 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 for Excel V4.0 Update1 更新内容
服务端表格组件 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 for Excel V4.0 更新内容
服务端表格组件 GrapeCity Documents for Excel 更新说明
PDF表单生成器
在 OA 系统自动化的流程中,在线填报的功能和性能至关重要,最为理想的情况是:系统在线收集用户信息,实时校验这些字段以确保信息的准确度,并且,完成上述操作不会因整个表单的填报而延迟。
为了实现上述操作,GcExcel 的模板功能(templete)提供了新的语法来定义 HTML5 输入类型,以确保在 PDF、Excel 等填报项中对其进行实时校验设置。 经过 GcExcel 的模板(templete)处理后,处理结果会被导出成 PDF 文件。该 PDF 可在基于 JavaScript 的 GrapeCity Documents PDF Viewer (简称 GcPdfViewer) 中查看。
借助这项功能,您将获得:
-
添加超越标准 PDF 规范的 PDF 表单填报项的能力
本次更新,GcExcel 通过向 PDF 表单提供新的 HTML5 输入类型来扩展填报功能,因此,PDF 表单在 GcPdfViewer 的应用程序中可以用来收集用户的高级输入,如以下输入类型:文本、日期、时间、电话号码、电子邮件地址、URL、密码、月份、星期、数量、范围等。
基于这些输入类型,您可以指定以下设置,如:自动填充(Autocomplete)、自动获得焦点(Autofocus)、必填项(Required)、拼写检查(Spell check)、限制最大/最小长度(Min/max length)、限制数字/字符串输入字段的模式(patterns)、设置默认值等。
-
通过简单的模板语法定义 PDF 填报项
GcExcel 的模板功能提供简单的语法来定义新的 PDF 表单填报项,并用模板功能设置 PDF 表单填报项中显示的验证消息。这一功能只需在模板上配置相关属性,就可实现。
(通过模板语法设计具有定制输入的 PDF 填报表格)
(PDF通过 GcPdfViewer 的预览视图,即可在线填报) -
满足在 PDF Viewer 设计定制表单的需求
本次更新,GcPdfViewer 中也加入了对 PDF 表单填充的支持,该功能允许定制填报项标签、微调输入控制的行为以及创建额外的输入验证(即使 PDF 没有内联验证或域标签信息)。
借助这一功能,用户可以在桌面、移动设备或任何设备上,使用高级输入类型和下拉列表轻松填写 PDF 表单。
支持数据透视图
本次更新,GcExcel 增加了对数据透视图(Pivot Chart)的支持。
借助这一功能,您可以直接通过 Excel 文件中的代码添加数据透视图,以便从透视表中更直观地分析数据,也可通过代码在现有 Excel 文档中增加、修改或删除透视图。
此外,还可以使用 GcExcel 的 API 自定义透视图的各种主题元素,也可将图表的数据源设置为数据透视表。
支持二维码/条形码
条形码是世界各地几乎无处不在的数据显示和捕获形式。快递单、装运标签等文件中包含的条形码信息可以使数据输入和共享更准确、更省事。为了将条形码添加到文档中,GcExcel 提供了一个完整的 API 支持,可用于在 Excel 中设置具有 11 种不同类型的条形码(及其相关属性),并将其导出为任何文档格式,如 PDF、HTML 或图像文件等。
该 API 还可以从具有条形码数据的SpreadJS视图中读取 JSON 文件,以修改设置并导出成 JSON 保存,支持的条形码类型包括:QRCode、EAN-13、EAN-8、Codabar、Code39、Code93、Code128、GS1-128、Code49、PDF417、DataMatrix 等。
只需按以下方式,即可将条形码公式添加到单元格区域:
=BC_<Barcode name>(comma separated Barcode specific settings)
举例,您可以通过以下方式设置 DataMatrix 条形码设置:
API:
=BC_DataMatrix(value, color, backgroundColor, eccMode, ecc200SymbolSize, ecc200EndcodingMode, ecc00_140Symbole, structureAppend, structureNumber, fileIdentifier, quietZoneRight, quietZoneTop, quietZoneBottom)
代码:
//set formula
for (int i = 4; i < 8; i++)
{
String value = "CONCAT(B" + i + ",\":\",C" + i + ")";
worksheet.getRange("D" + i).setFormula("=BC_DataMatrix" + "(" + value + ")");
worksheet.getRange("E" + i).setFormula("=BC_DataMatrix" + "(" + value + ", , ,\"ECC000\")");
worksheet.getRange("F" + i).setFormula("=BC_DataMatrix" + "(" + value + ", , ,\"ECC200\")");
}
下图显示了将各种紧急号码添加到 Excel 文件中并导出为 PDF 的数据矩阵条形码示例。
跨工作簿公式引用
在大型 Excel 文件中,通常会引用外部工作簿的单元格和公式,在 GcExcel 中也可以。使用 GcExcel 的这一功能,只需引用外部工作簿中的单元格或公式,无需手动打开外部工作簿,就可直接复制、使用、更新其他 Excel 工作簿中的数据。
跨工作簿公式引用的好处?假设有一场景:有一个 Excel 中的不同工作簿存储了多个不同的城市中心数据,且这些中心都有一个集中的行政办公室,如果需要对这些数据进行整体分析。与其复制这些工作簿或复制部分数据,不如直接引用每个工作簿中的数据或单元格,这样就可以更快速、高效地完成分析计算,且无需重复的复制粘贴。
GcExcel 跨工作簿引用的方法:IWorkbook.GetExcelLinkSources(),当数据发生外部更改时,更新当前工作簿的方法:IWorkbook.UpdateExcelLinks()。
支持 Excel 中的迭代计算(循环引用)
迭代计算,指通过一个递推公式反复校正设定的初始近似值,直至达到预定精度要求为止。
使用 GcExcel 启用迭代计算选项:
- 使用 IWorkbook.Options.Formulas.EnableIterativeCalculation 以获取/设置是否启用迭代计算。
- 使用 IWorkbook.Options.Formulas.MaximumIterations 获取/设置迭代计算的最大迭代次数。
- 使用 IWorkbook.Options.Formulas.MaximumChange 获取/设置迭代计算的最大变化。
Excel中相关设置:
GcExcel 相关代码:
支持在模板中设置默认值
有时数据源中没有数据或空数据,处理模板后不需要在 Excel 文件中显示空单元格。
在这种情况下,只需使用 GcExcel 的 defaultValue 属性设置单元格的默认值即可。
获取单元格的公式表达式
本次更新,GcExcel 无需编写代码,即可直接访问一个单元格的地址,可获取一个表示绝对引用的字符串表达式,也可以选择通 过IRange.getAddress() 方法获取一行或列的绝对或相对引用,引用字符串表达式的表现形式表示为 A1 或 R1C1。
//create a new workbook
Workbook workbook = new Workbook();
IRange mc = workbook.getWorksheets().get("Sheet1").getCells().get(0, 0);
System.out.println(mc.getAddress()); // $A$1
System.out.println(mc.getAddress(false, true)); // $A1
System.out.println(mc.getAddress(true, true, ReferenceStyle.R1C1)); // R1C1
System.out.println(
mc.getAddress(false, false, ReferenceStyle.R1C1, workbook.getWorksheets().get(0).getCells().get(2, 2))); // R[-2]C[-2]
PDF 导出过程监听
在做日常 PDF 导出操作时,往往不需要将整个 Excel 文档转换为 PDF,或在转换为 PDF 时仅需要指定某些页面。
为此,可以使用 GcExcel 的 PagePrinting 和 PagePrinted 事件跟踪 Excel 文档转换为 PDF 的进度。您可以捕捉这些事件以跟踪导出进度,也可以通过 HasMorePages 和 SkipThisPage 属性,实现在导出时跳过当前页或仅在完成当前页之后退出导出。
PdfSaveOptions options = new PdfSaveOptions();
options.getPagePrintingEvent().addListener((sender, e) -> {
if (e.getPageNumber() == 2) {
e.setSkipThisPage(true);
}
});
工作簿多选操作
某些 Excel 文件可能包含多个工作表,一旦需要对这些工作表的一个子集执行操作,例如通过一个打印命令打印多个工作表,或将所有工作表添加一个公共内容时,会显得有些不便。
为此,GcExcel 提供了对应 API 用于选择多个工作表或工作簿。
按特殊类别查找单元格
和 Excel 类似,GcExcel 中单元格的数据可以有很多不同的表现形式,例如:注释、公式、错误、数据验证、条件格式等,使 用Irange.specialCells 方法可以按照类型或者值来查找单元格。
当您需要高亮某些单元格,或者按照错误去查找并修复某些单元格的时候,可以通过上述接口来定位单元格的位置。
如下图,将具有固定值的单元格背景色设置为深灰色,将具有公式的单元格设置为浅灰色。
数据透视表按时间/日期分组
在使用数据透视表时,经常遇到对日期/时间进行分析的需求。
为此,GcExcel 的数据透视表默认会将添加到行列下拉列表中的字段自动分组, 功能设置效果与下图Excel中的设置相同。虽然这使得不同日期/时间跨度的分析数据变得容易,但有时无需将这些域组合在一起。通过 IWorkbook.Options.Data.AutomaticGroupDateTimeInPivotTable 属性设置,可决定是否自动分组数据透视表中的日期/时间。
加强与 SpreadJS 的功能集成
本次更新,GcExcel 强化了与纯前端表格控件 SpreadJS 的功能集成,如下:
- 支持单元格的内边距和标签
- 支持单元格类型 Radio Button List 和checkbox list
- 支持区域模板(Range Template)
- 支持背景图片设置
- 支持单元格按钮设置(Cell buttons)
- 支持单元格下拉选项(Cell dropdown)
- 支持格式字符串(Format string)
- 支持二维码(Barcodes)
- 支持单元格省略号(Show Ellipsis)
- 支持数据验证样式设置(Validation style)
- 支持 JSON 导入导出参数设置(Json options)
服务端 PDF 组件 GrapeCity Documents for PDF 更新说明
支持生成具有特殊输入类型和验证的在线 PDF 表单
本次更新,支持将 HTML5 数据类型添加到 PDF 表单中。
该功能允许定制填报项标签、微调输入控制的行为以及创建额外的输入验证(即使PDF没有内联验证或域标签信息)。
使用此功能,用户可以在桌面、移动设备或任何设备上使用高级输入类型和下拉列表轻松填写 PDF 表单。
在协作模式下共享和编辑 PDF 文档
本次更新,可以在协作模式下共享和编辑 PDF 文档了。
这样您就可以节省客户的时间和精力,他们可以同时在第一时间填写表单!您可以控制谁查看和编辑文档,并让多个用户同时协作,上述操作都可以通过 GrapeCity Documents for PDF 的 API 进行设置。
从 PDF 文档中提取表格数据
GrapeCity Documents for PDF 的新版本可以通过 API 获取 PDF 中的表格数据,结合 GcExcel 可以实现将 PDF 的表格数据在 Excel 中进行展现。
服务端 Word 组件 GrapeCity Documents for Word 更新说明
提供设置模板功能,自动化绑定数据到 Word
通过使用 GrapeCity Documents for Word 的 API 可以定义具有综合语法能力的数据模板,实现利用同一模板自动化生成具有不同数据的 word 文档。
GrapeCity Documents for Excel V3.0 Update2 更新内容
一、为生成的 Excel 模板增加更多功能选项
GcExcel 已经支持了基于 Excel 的文档对象模型,可生成更为复杂的 Excel 报告。
本次更新,GcExcel 为生成的 Excel 模板增加了更多功能选项,如可通过使用表单域及相关性能的新模板语法在 MS Excel 中设计 PDF 表单。
1. 从 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");
2. 在 JavaScript PDF Viewer 中查看、编辑、填写和提交 PDF 表单
3. 为 PDF 表单绑定数据
GcExcel 除了生成可填写的空白 PDF 表单外,还可以设计与数据库值绑定的PDF表单。只需在 Excel 文件的数据库字段声明中定义 Form 属性即可:
{
{ ds.Name (form = {
“ type”:“ textbox”,
“ name”:“ name”,
“ font ”:{“ color”:
“#000000”,“ bold”:true}})}}
}
经过 GcExcel 处理后,模板将使用数据库中的数据进行扩展。因此,在 PDF 中显示的每个字段都是“文本框字段”,您可以随时编辑并保存。
4. 使用字体文件控制 PDF 表单大小
当您需要在 PDF 表单中使用某些字体,但是计算机/浏览器可能没有这些字体时,可以在模板文件中使用 TemplateOptions.EmbedFontForFormFields 的全局选项,将由 Form 字段使用的 Font 字体文件嵌入到生成的 PDF 文档中。
- 如果设置为 True,则表单字段中使用的字体文件将嵌入到 PDF 文件中。这将帮助您正确输入任意字符,即使您的机器/浏览器没有安装相应的字体。但是,请注意,这可能会增加 PDF 文件的大小,尤其是在使用东亚字符的 PDF 表单中。
- 如果设置为 False,则不会嵌入字体文件。因此生成的 PDF 文档的大小将很小,但是如果在表单中输入字符,视觉输出可能无法正确显示。
5. 使用迷你图扩展模板
在具有大量数据的 Excel 文件中,您必须手动为每行添加迷你图,或将其复制到其他行。但是,如果数据范围发生变化,则必须再次手动检查工作表并修改每行迷你图的数据范围。
使用 GcExcel 生成的 Excel 模板,只需定义一次 Template 范围,Sparklines 将始终随着数据库中数据的更新而扩展,从而使 Excel 文件数据始终保持最新。
6. 使用 Excel 的表格扩展模板
您可以将数据放入 Excel 并对其进行排序和过滤,但是当您拥有不同类型的数据时(例如,特定于客户信息的数据或清单等),您可能需要将数据放在单独的表中维护。
因此,在 Excel 中,表格是处理大量数据的最佳手段。
出于这个原因,GcExcel 使用了模板来支持 Excel 表格。在数据扩展后,GcExcel 的模板功能(格式、排序、过滤等)将自动应用于表格。使用 GcExcel,只需在表格区域内定义模板单元格,模板就会随着内置表格的格式和功能自动更新和扩充。
7. 为 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 工作簿。以下是具体功能:
- 添加、剪切、复制、删除签名行
- 在签名行上签名
- 在已签名的工作簿中添加签名行
- 修改签名的工作簿内容并签名
- 从已签名的工作簿中删除不可见的签名
- 从签名行中删除签名
- 将签名的工作簿导出为PDF
- 列出签名行
- 移动签名行
- 添加隐形签名
- 验证签名
GcExcel的 API 库完全基于 MS Office Digital 签名支持,并提供了类似于 Excel 的强类型 API,供用户在 Excel 电子表格中实现 Diital Signature UI 或服务。
四、数据透视表增强功能
1. 从一个 PivotField 创建多个数据字段
GcExcel 可以从单个数据透视表字段中添加一个或多个字段,并对该字段应用多个计算,从而使其在数据透视表中多次出现。
在下面的示例中,“求和”和“计数”功能两次应用于单个“数量”数据透视字段,该字段可能出现在“数据透视表”的不同列下。
2. 延迟布局更新
每当添加、删除数据透视表的数据字段或将其移动到其他位置时,都会重新计算整个数据透视表,这影响了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");
3. 支持数据透视表的布局和格式选项
GcExcel 当前已支持各种数据透视表布局和格式选项,以更好地呈现数据,其支持的选项包括:
- 可合并具有外行项目、列项目、小计标签和总计标签的单元格:IPivotTable.MergeLabels
- 启用紧凑行布局窗体时,自动缩进数据透视表项:IPivotTable.CompactRowIndent
- 可对数据透视表字段进行排序(DownThenOver 或OverThenDown ):IPivotTable.PageFieldOrder
- 可检索或设置“数据透视表”中每个列或行的字段数:IPivotTable.PageFieldWrapCount
- 可在包含错误的单元格中获取或设置字符串:IPivotTable.ErrorString
- 可获取或设置包含空值的单元格字符串:IPivotTable.NullString
4. 排序(Sorting)
GcExcel 可使用IPivotField.AutoSort对数据透视表中的数据进行排序。
此外,GcExcel 还可以通过 AutoSortField 属性,检索指定数据透视表中用于排序的数据字段名称,并通过使用 Auto SortOrder 属性来检索其排序顺序,使用 IPivotItem 接口的 Position 属性来设置或检索其字段中的位置。
5. 访问表的详细范围
如果只是访问数据透视表的对象,将很难获取其详细范围,您需要编写更多代码才能访问此类范围并应用格式,例如:
- 在不同范围内,应用单独的条件格式,如用溢出值而不是小计区域标记数据区域。
- 在小计范围内,应用特定的文本格式。
- 在合并小计范围或总计范围内,获取标题单元格。
通过使用 GcExcel ,可以很方便的解决上述问题。GcExcel 可直接在数据透视表中访问详细范围,并根据需要格式化数据或单元格:
- PivotRowAxis:访问数据透视表的左下角。
- PivotColumnAxis:访问数据透视表的右上角。
- PivotLine:访问RowAxis或ColumnAxis 。
- PivotLineCell:访问数据透视表中的单元格。
- PivotValueCell:访问值区域中Pivot单元的包装。
在以下示例中,通过使用 PivotLineType 检测小计线类型,可以很容易地给 PivotLine 单元格设置背景色。
6. 支持各种数据透视表字段布局设置
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 中不支持。
1. 分别显示/隐藏水平或垂直网格线
在 Excel 中,仅可同时设置“水平”和“垂直”网格线为 true 或 false,不能单独设置。但使用 GcExcel,可以分别将这些网格线设置为 true 或 false。
使用 DisplayHorizontalGridlines 和 IWorksheetView.DisplayVerticalGridlines ,可分别将 Horizontal 或 Vertical 网格线设置为 true 或 false。
如下所示,垂直网格线被设置为关闭状态。
2. 自定义冻结线颜色
在 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;
3. 冻结尾部的行/列
在 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);
GrapeCity Documents for Excel V3.0 更新内容
一、使用模板,创建 Excel 报表更加简单
借助模板,开发人员无需从零设计复杂的 Excel 报表,并可直接绑定来自其他数据源的数据。GcExcel 的模板引入了完整的语法、数据扩展符、Excel 公式支持和 API,可用于生成具备交互式分析,以及数据绑定的类 Excel 报表。
通过 GcExcel 的 API 可以直接将设计好的报表文件保存为 .xlsx 格式或 PDF。
在模板的任何位置,都可以使用动态字段替换需要显示的信息,如使用 Workbook.AddDatasource()方法在工作簿中绑定数据源,结合 Workbook.ProcessTemplate()方法,自动匹配数据库字段,并替换为实际数据。
基于 Visual Studio Tools for Office(VSTO)的 Excel API 和模板支持,您可以生成更加完整且专业的 Excel 报表,用来分析数据和分发。
GcExcel 的模板功能可在任何平台上正常运行:Windows、Linux 或 macOS。
GcExcel 可用于设计以下报表类型:
- 行报表(Line reports)
- 邮件合并报表(Mail-merge reports)
- 交叉表(Cross-table reports)
- 主子表(Multiple reports in one report)
- 矩表(Tablix reports)
- 收据(Receipt reports)
- 销售报告(Sales reports)
- 采购订单(Purchase order reports)
- 发票(Invoice reports)
- ……
为了合理的控制项目预算,采购订单的应用场景十分常见,它可以清楚地传达待采购项目、协议、价格和数量。采购订单通常以 Excel 电子表格或 PDF 的形式发送。
由于采购订单每天都会产生,因此一个自动化的管理流程尤为重要,许多公司都会采用从数据库中动态获取供应商和发货信息的方式,生成不同的采购订单。
(生成采购订单的Excel电子表格)
使用以下代码,数据字段将自动绑定以生成最终采购订单。
Workbook reportBook=new Workbook(); reportBook.Open("template.xlsx"); /*Code to add the data table*/ reportBook.AddDataSource("exp", dt); reportBook.ProcessTemplate(); reportBook.Save("PurchaseOrder.xlsx"); reportBook.Save("PurchaseOrder.pdf");
GcExcel 模板支持多种高级功能,可以创建从简单到复杂、满足不同业务场景的报表:
- 支持简单的语法
- 可定义数据扩展方向
- 可定义用于数据扩展的上下文
- 可定义数据范围
- 支持从多个数据源中添加数据
- 支持分组数据
- 支持大纲组
- 可指定嵌套的数据字段
- 可定义公式函数
- 可定义排序表达式
- 可定义表达式字段
- 自定义样式
- 支持在一个工作表中插入多个报表
- 支持添加分页符
- 可设置内联字段
- 可在工作表的名称中添加模板字段以生成多张工作表
二、支持将具有图表的 Excel 电子表格转换为 PDF
图表是 Excel 电子表格中的重要功能之一。财务、销售、市场营销和医疗保健等的大多数 Excel 文档都会使用 Excel 图表分析、提取和汇总数据。
GcExcel 可以将包含柱形图、折线图、饼图、条形图、面积图、XYScatter 图、股票图、雷达图和组合图等图表的 Excel 文档转换为 PDF。
注意:目前,此功能仅支持在 GcExcel 的 .NET Edition 中使用。
三、支持将具有切片器的 Excel 电子表格转换为 PDF
Slicers(切片器)是一种快速有效的数据过滤方法,通过易于使用的可视化过滤器,用户可以快速过滤表格和数据透视表中的数据。在GcExcel 中,支持将具有切片器的 Excel 电子表格转换为PDF。
四、新的 Excel 2016 图表类型
在 GcExcel 最新版本中,支持将 Excel 2016 的图表类型添加到 Excel 文件的功能。使用这项功能,可有效提升 Excel 的数据可视化效果,比传统图表更容易展现并分析数据结构。
GcExcel 为这些图表增加了很多个性化功能,带来了比传统的 MS Excel 图表更专业的分析方式。
如需使用新的图表类型,请将 ChartType 属性设置为所需的图表,配置图表属性,数据将在首选图表中进行展示。
树状图
对于分层数据来说,树形图是最理想的数据可视化选择。
树状图将层次信息显示为大小和颜色不同的矩形簇,而其大小和颜色取决于它们的数据值。其中,每个类别都被分配了一个矩形区域,其子类别矩形嵌套在父类别中。
下面的图表是使用 GcExcel 创建的,在这个示例中,每个销售人员的月销售额一目了然。如果将鼠标悬停在任何矩形上,将显示每个销售员的具体销售额。
旭日图
与树形图类似,旭日图也同样用来显示数据的层次结构,以及比较数据相对大小。此外,树形图还可显示父组和子组之间的链接。层次结构的每个级别由一个圆环或一个圆圈表示,越里面的圆圈表示数据的层级越高。
使用
GcExcel,您可以创建如下图所示的图表。该图表的数据源与上面的“树形图”图表相同,但以环形排列,最里面的环形显示“四分之一”,下一个环形显示月份,外环显示销售人员的姓名。如果将鼠标悬停在外圈的切片上,则显示每个销售人员的销售量。
直方图和帕累托图
直方图通过以图形的方式汇总不同时间间隔的大型数据集,有助于快速决策。直方图是显示频率数据的柱状图,每列表示一定范围内元素的频率。
帕累托或排序后的直方图图表包含以降序排序的列和代表累计总百分比的行。使用 GcExcel 中的直方图图表类型,您可以创建直方图和帕累托图。
下面的示例显示班级学生身高的频率分布。
箱形图
箱形图又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况的统计图,突出显示均值和离群值,其中垂直延伸的线,又称为“须”。
这些线表示上四分位数和下四分位数之外的可变性,这些线或须之外的任何点都被视为离群值。
使用 GcExcel,您可以通过 Axis 和 Series 属性来设置箱形图图表,例如 ShowInnerPoints,ShowOutlierPoints,ShowMeanMarkers,ShowMeanLine 和 QuartileCalculationInclusiveMedian。
瀑布图
瀑布图也被称为 Excel 桥梁图,可用于分析数据差异。
使用瀑布图可以评估公司的利润或收益,或者分析公司的销售或库存数据,因为它显示了初始值受到负值或正值的影响。列采用颜色编码,可以快速看到正值和负值之间的差异性。
以下是使用 GcExcel 创建的瀑布图图表,显示了公司的利润分析。如果将堆积柱形图图表模板应用于这些特定值,则不会获得与瀑布图相似的结果。
漏斗图
漏斗图使用户可以快速可视化线性过程中的阶段变化。
漏斗图用于显示销售过程时,可以迅速定位潜在的问题区域。漏斗由称为头部(或底部)的较高部分组成,而下部称为颈部,显示的值按比例递减,总计为100%。
下图显示了公司一年中的订单履行评估。
五、保存为 PDF 时,支持安全选项
安全选项在 PDF 文档中的使用情况十分普遍,而这也是 PDF 格式受欢迎的原因之一。
通过设置安全选项,保证敏感信息无法共享或修改。现在,用户可以通过调用 PdfSaveOptions.SecurityOptions 方法设置这些选项,然后使用 GCExcel 将文档转换为 PDF。
安全选项包含:
- 所有者密码
- 用户密码
- 印刷许可
- 填写表格权限
六、保存为 PDF 时,支持文档属性
长期归档文档时,会为 PDF 文件定义某些文档属性(例如,创建者、标题、作者、创建日期等)。这些属性提供了有关文档的其他描述,在搜索文档时特别有用。
在 GCExcel 中,将 Excel 电子表格保存为 PDF 时,可以通过 PdfSaveOptions.DocumentProperties 方法插入文档属性,包含:
- PDF 版本
- EmbedStandardWindowsFonts
- 标题
- 作者
- 学科
- 关键词
- 创作者
- 制片人
- 创立日期
- 修改日期
七、保护工作簿
此功能可以保护工作簿免于使用 IWorkbook.Protect()方法进行修改。
GCExcel 提供的保护操作有:
- 查看隐藏的工作表
- 添加、移动、删除、隐藏或重命名工作表
- 调整或关闭工作簿窗口的大小以及隐藏/取消隐藏窗口
八、图表表单
有时,当您将所有数据和图表容纳在一张纸上时,您的空间可能不足,通过使用 GCExcel 的图表工作表选项,您可以将图表移动到自己的工作表中。此选项可帮助用户添加仅包含图表的工作表,这一点在打印时也很有用,可以用来更改页面方向,以便更详细的阅读图表内容。
GCExcel 的图表表单支持以下功能:
- 添加带有主图表的图表
- 可为主图表添加自定义形状,包括形状样式、图表、图片、连接器
- 为主图表或自定义形状创建副本
- 从图表中删除主图表,或从主图表中删除自定义形状
- 复制并移动图表
九、更多形状特性:插入超链接、分组/取消分组形状
除了将形状添加到 Excel 文件之外,使用 GCExcel 还可以向形状添加不同的功能,如下所示:
- 将超链接添加到形状:形状上插入超链接对于将形状链接到网页、外部文件以及文档或电子邮件时非常有用。使用 GcExcel,您可以将超链接插入到形状、图表、连接器、图片和组合形状中。
- 支持分组、取消分组形状:分组形状是 Excel 的一项标准功能,主要应用于流程图中。形状分组有助于一次将形状属性应用于整个组。您可以使用 GcExcel 的 API 对特定范围内的形状、图片或任何其他对象进行分组/取消分组操作。
十、计算大纲小计
GcExcel 的 API 添加了类似 MS Excel 的功能:计算大纲小计。此功能有助于避免手动处理组和小计的值。
您可以通过定义简单的参数自动将重复数据分组并计算小计。通常来说,用户习惯于优先创建组功能,然后通过代码在特定位置添加小计字段。使用 GcExcel,当出现带有排序列的平面数据时,便会自动创建组,并在排序列上计算小计,以添加到工作表的单元格中。
使用单个 IRange.Subtotal 方法并传入一些简单的参数即可完成上述操作。例如,指定按字段分组、小计功能、在小计方法中应用小计的字段列表等。
此外,您还可以通过编程的方式替换现有的小计结果,在每个小计之后添加分页符以控制 Excel 电子表格的布局,并在小计字段下方指定汇总位置行。
用户还可以控制从现有的工作表中删除小计。
下面的示例是使用图片中的选项,来创建范围“ A1:C9”的小计:
_worksheet.Range["$A$1:$C$9"].Subtotal(2, ConsolidationFunction.Count, new[] { 2 });
该代码的运行结果为:
十一、获取公式单元格的引用和依存关系
GcExcel 的公式可以应用于特定的单元格,或引用某个单元格范围。以下两个新的 API 可以帮助用户检索单元格引用范围和其影响的单元格公式。
- 使用IRange.GetPrecedents(),获取当前区域的左上角单元格所依赖的所有内容
- 使用IRange.GetDependents(),获取依赖于当前区域的左上角单元格的所有内容
十二、形状调整
可以使用 GcExcel 的 IShape.Adjustments API 来调整形状,可以针对整个形状进行统一更改。
十三、支持将表的背景图像转换为 PDF
在背景图像的支持下,您可以将公司徽标、水印或其他任何与工作表数据相关的背景图像插入到工作表中。
现在,用户可以选择将 Excel 电子表格转换为 PDF 时是否包含背景图像,通过简单的布尔属性 PdfSaveOptions.PrintBackgroundPicture 即可实现。
十四、将具有多个图像的 Excel 文件导出为更小尺寸的 PDF
引入此功能的目的是使 GcExcel 在处理带有多张图片的 Excel 文件时更加高效。
如果在 Excel 文件中多次使用某张图片,则 GcExcel 在导出 PDF 时将只保留该图片的一个副本,以减小文件大小。
十五、支持纯前端表格控件 SpreadJS 的功能
为了更好地与纯前端表格控件 SpreadJS 产品集成,本次更新,在 GcExcel API 中添加了如下属性。
现在,您可以创建 Excel 文档并直接应用这些属性,当然,执行导入/导出 SSJSON 时,也支持这些功能。
添加单元格标签
Tag 属性可以附加到电子表格的单元格/行/列/工作表中,其中包含特定种类的数据,以及与该数据相关的选项和建议。您还可以实现从 SSJSON 导入/导出时,带有简单数据标签。
添加单元格类型
单元格类型定义了单元格中数据的类型、显示方式以及如何与用户交互。
Excel 具备了多种单元格类型:数字、复选框(三种状态)、按钮、组合框和超链接等。
在 GcExcel 中,也同样支持如下单元格类型:复选框、按钮、超链接和组合框,它们可以设置为某一单元格或区域范围,还可以使用 IRange.CellType API 来检索这些单元格或范围的类型。
将 Excel 文件导出为 PDF 时,支持最佳拟合列/行的 API
如果文本的宽度或高度太长而无法容纳在单元格内,则在将 Excel 电子表格导出为 PDF 时,可以通过 IPageSetup.BestFitColumns 或 IPageSetup.BestFitRows API 帮助调整列宽或行高。
GrapeCity Documents for PDF V3.0 更新内容
将 HTML 内容转换为 PDF 文档
将 HTML 内容转换为 PDF 的好处是,如果用户要将网页内容保存至本地(或尝试直接打印),可能会受到以下限制:
- 页面的CSS样式无法得到呈现
- 背景图像会丢失
- 打印时页面的布局和流向不可控制
什么时候需要将 HTML 转换为 PDF?
场景之一:电子商务网站在网页购物车中显示客户的发票信息,并在订单中执行打印。如果直接将客户的订单信息以 HTML 的格式,传递给打印机或与客户共享,客户的隐私信息则很可能遭受篡改和泄露。此外,HTML 的格式不利于在离线方式下查看,因为它不支持离线布局和样式。
因此,PDF 格式是查看和文档共享的首选。
PDF 格式可以以最安全可靠的方式查看离线 Web 内容,且无论在何种平台或设备下,文档格式都会被保留。
开发人员使用 GcPDF 开发此类应用程序时,将受益于 HTML 内容转换为 PDF 的 API。
使用 GcPDF 组件,完成从 HTML 到 PDF 的转换
现在,您可以使用 GcPDF 中的 HTML 组件,将 HTML 内容转换为 PDF。它是一个独立于平台的文档 API 组件,可让您将 HTML 内容转换为 PDF 的文档或图像(PNG 或 JPEG)。
GcPDF 提供了一组用来绘制或测量 HTML 内容的方法:DrawHtml()和 MeasureHtml(),它允许将 HTML 片段与其他内容一起插入 PDF 文档中。
注:GrapeCity.Documents.Html 包含了GcHtmlRenderer 类,该类可以在 PDF Pages 中呈现 HTML 内容。
GcPDF 根据系统的不同,内置了三种 HTML 引擎程序包:
- GrapeCity.Documents.Html.Windows.X64
- GrapeCity.Documents.Html.Mac.X64
- GrapeCity.Documents.Html.Linux.X64
您需要在程序运行时引用该包,以便其自动选择正确的系统相关引擎包。您可以同时将这三个平台的程序包一起添加到您的项目引用中,或者仅针对一个或两个平台,添加所需要的相关程序包即可。
GcPDF 中 HTML 组件的主要特性
多平台软件包,可在 Windows、macOS 或 Linux 上呈现 HTML 内容;
将页面/ URI 源中的 HTML 内容或 HTML 字符串呈现为 PDF;
可转换的属性包含:
- 图片
- 超链接
- CSS样式表
- JavaScript脚本
- HTML5
- 分页符
- SVG
- HTML 表格
支持的 PDF 设置包含:
- 默认背景
- 无背景
- 页面高度
- 页面宽度
- 忽略 CSSPageSize
- 缩放
- 页面美化
- 指定要在输出的PDF文件中呈现哪些页面的页面范围
- DisplayHeaderFooter(页眉页脚)
- 定义页眉/页脚模板
可将长 HTML 内容拆分为多个页面;
可指定页边距。
如何将用户提交的表格数据导入 PDF 中
GcPDF 添加了新的 GcPdfDocument.ImportFormDataFromCollection() 方法。使用此方法,可以轻松地获取用户提交表单时,发送的字段名称和值列表,并将其导入到与之结构相似的 PDF 表单中,完成这一步,几乎不需要任何代码。
GrapeCity Documents for Word V3.0 更新内容
复制、移动和保护 Word 文档内容
合并、拆分来自多个不同格式的 Word 文档内容,是十分具有挑战性的,不仅要考虑各个文档之间的兼容样式,还要考虑合并后的文档大小,如果文档内容过多,用户则很难从中找到有用的信息。
此外,如果我们只希望某些人打开或编辑带有敏感信息的 Word 文档,则需要为该文档中增加保护属性。
GcWord 提供的 API 可以帮助开发人员拆分、合并 Word 文档,并如 Microsoft Word 系统那样,新增了带有 DocumentProtection、EditProtection 类等多个选项来保护 Word 文档。
GcWord V3.0 新增的功能:
为 Word 文档添加了编辑限制,以防止错误编辑;
在 Word 文档中添加密码和密码属性,用来加密 Word 文档,如果没有正确的密码,任何人都无法访问;
将 Word 文档标记为“最终版”,用以推断自上次保存以来该文档是否被更改;
将只读模式应用于 Word 文档;
应用文档编辑模式以限制可以编辑的内容,这些模式包含:
- No Protection(未保护模式)
- AllowOnlyReading(只读模式)
- AllowOnlyComments(可评论模式)
- AllowOnlyRevisions(可修订模式)
- AllowOnlyFormFields(索引模式)
指定在编辑 Word 文档时是否可以修改文档样式;
检查限制是否已应用并处于激活状态。
V2.0 Update2
将带有形状的电子表格导出为 PDF
使用 GrapeCity Documents for Excel,您可以将带有形状的电子表格导出为 PDF,这些形状包括箭头、线条、图片和一般默认形状(包括 MS Excel 的内置形状)。利用这一特性,开发人员可以创建更为有趣且丰富的 Excel 工作表。
导出的 PDF 中支持的形状属性包括:
- 填充样式
- 线条样式
- 形状与文本
- 形状与图片
- 旋转的形状
- 翻转的形状
- 分组的形状
(将带有形状的电子表格导出为 PDF)
控制分页和电子表格输出的内容
GrapeCity Documents for Excel 通过引入一个名为 PrintManager 的类来控制分页、导出 PDF
和控制电子表格输出的内容,该功能通过在 PageInfo 对象中提供用于分页结果的用户信息,以及通过 PrintManager.Paginate
方法从 Excel 文件生成的页面列表中,实现将 Excel 的特定部分导出到 PDF 文档中。该功能可执行以下操作:
- 添加、删除、修改页面
- 更改页码、页数、页面内容和页面设置
该功能的实现步骤包括:
(实现步骤)
通过 GrapeCity Documents for Excel 提供的这项功能,可有效解决将 Excel 文件转换为 PDF 时的分页、页面布局、页面设置等问题。
.NET 平台帮助文档| .NET 平台示例| Java 平台帮助文档| Java 平台示例在 PDF 中渲染 Excel 报表
一份完整的报表通常是由文本描述、数字和图表组合而成。以财务报表举例,完整的财务报表可视为公司业务活动和财务业绩的混合体,为保证其数据的准确性、不可编辑性与安全性,通常会以 PDF 文档的格式分发给客户,尽可能地保留原始文档的质量和数据。
该功能的实现步骤包括:
(在 PDF 中渲染 Excel 报表)
此报表用 Excel 的方式展示了公司现金流、净收入等数据。Excel 方式的最大特点就是以表格的形式显示数据,为了进行二次分发并保证此报表数据的真实性,可通过 GrapeCity Documents for Excel 文档API 来将 Excel 数据转换成 PDF,也可提取 Excel 表中某一工作簿的位置在 PDF 文件中进行渲染。
通过使用 GrapeCity Documents for Excel 的 PrintManager 类从 Excel 中提取数据,并通过 GrapeCity Documents for PDF 的 API 导出到 PDF 中。
注意:要使用此功能,您需要同时获得 GrapeCity Documents for PDF 和 GrapeCity Documents for Excel (.NET版本)的许可授权。
.NET 平台帮助文档| .NET 平台示例| Java 平台帮助文档将 Excel 电子表格的指定页面内容打印为 PDF
有时,我们不需要打印所有页面,只需要从 Excel 文件中打印指定的页面信息。例如以下场景,贵公司有一份年度产品和销售清单,并通过数据透视表进行分析。您可以根据需要查看特定客户的销售额和产品总销售额,但只需将数据透视表的数据分析结果打印为 PDF,以便分发给利益相关者。这时,就会用到将 Excel 电子表格的指定页面内容打印为 PDF 功能。
在下面的文件中,公司希望打印 Page 5、Page 6 和 Page 7 部分,并且在打印结果中,以连续页码 1、2、3 呈现。
(将 Excel 电子表格的指定页面打印为 PDF)
您可以从 PageInfo 对象中选择特定的页面内容,然后使用 PrintManager.UpdatePageNumberAndPageSettings(..)方法设置连续页码。
.NET 平台帮助文档| .NET 平台示例| Java 平台帮助文档| Java 平台示例打印时将同一张表的数据保持在一张纸上
有时,表数据需要在同一张纸上打印,而不是单独打印在一个新的页面上。特别是,当合并单元格时,用户不希望合并的行数据在打印时被分割在不同的页面上。使用 KeepTogetherRanges 类可以帮助您设置,打印时将同一张表的数据保持在一张纸上。
(打印时将同一张表的数据保持在一张纸上)
在 PDF 中将多个工作表打印到同一页
Excel 工作簿中可能同时包含多个工作表的数据。例如,在公司的每月预算的详细信息中,每月摘要位于第一个工作表上,而每月预算详细信息则位于单独的工作表中。在这种情况下,能够将单页数据分发给公司股东是最佳情况。
因此,将多个工作表内容打印到 PDF 中的单个页面将非常有用,通过 GrapeCity Documents for Excel 的 PrintManager 类与 GrapeCity Documents for PDF 的 API 相结合可以顺利完成该任务。PageInfo PrintManager 的对象能够获取 Excel 文档的所有页面,通过 PrintManager.Draw(..)可以查看页面在 GrapeCity Documents for PDF 中的呈现方式,如 n 行 n 列的布局。
(获取 Excel 工作表内容)
(获取 Excel 工作表内容)
(在 PDF 中将多个工作表打印到同一页)
管理不同页面上的标题
打印 PDF 时,如果工作表中有多个表,则可能需要在所有页面上重复表标题。用户可以指定当各个表溢出到其他页面时重复当前表的标题。
(管理不同页面上的标题)
(管理不同页面上的标题)
将不同的 Excel 工作簿导出为一个 PDF
在任何行业中,都难免生成数百个 Excel 报告来分析数据。为了分发这些数据给客户,公司更喜欢 PDF 格式,因为它无法编辑,可以保留原始文档的质量和格式。
如果多个报告属于单个项目,您一定不希望向客户提供多个 PDF 文件。GrapeCity Documents for Excel 为您提供了将不同的 Excel 工作簿导出为一个 PDF 的功能,仅需简单的代码即可实现。调用 PrintManager 类可以在不同的工作簿中直接保存为一个 PDF 文件。
在 PDF 的右侧、底部等位置重复行与列
在许多情况下,在 PDF 的底部或右侧重复行、列是有帮助的。例如,贵公司可能需要在每个打印页面的底部重复免责声明或注释:
(世卫组织报告的例子)
我们以世界卫生组织的报告为例。它收集区域卫生技术信息,作为国家卫生计划的一部分,或仅有一个不属于国家卫生计划的卫生技术中心的地区。我们使用 Yes1 和 Yes2 的值作为图例,在每页的底部重复。
您可能需要对数据透视表的不同区域进行不同的格式化,以强调哪些数据属于哪里,比如:组织的月度预算报告。该报告将以 3 页打印,每页都会在最后重复该消息。Microsoft Excel 没有直接在底部或右侧重复行或列的方法,它只能选择在顶部或左侧重复行或列。要在 Microsoft Excel 的底部重复行,一般只能使用“页脚”,但它对于大型文本的作用是有限的。
通过 GrapeCity Documents for Excel 的 PageSetup API ,可以在导出到 PDF 时在右侧重复行或列。通过 IPageSetup.PrintTailRows / PrintTailColumns 可在 PDF 导出期间重复行或列。
.NET 平台帮助文档(在底部重复行)| .NET 平台帮助文档(右侧重复列)| .NET 平台示例(在底部重复行)| .NET 平台示例(右侧重复列)Java 平台帮助文档(在底部重复行)| Java 平台帮助文档(右侧重复列)| Java 平台示例(在底部重复行)| Java 平台示例(右侧重复列)
条件格式化数据透视表的样式和字段
数据透视表是一种数据分析摘要工具,其中复杂的数据被分组并按行和列进行排序。您可能需要在数据透视表的不同区域以不同的格式强调数据归属,特别是以下区域中:
- 行/列标题
- 备用行/列
- 总计列式
- 小计行/列样式
- Pivot Fields 数字格式
例如,在下面的销售报告中,使用了数据透视表对产品 ID 进行分组,从而显示每季度的销售数据。此表使用了不同的背景色突出显示每个行标题和子行标题内容。
GrapeCity Documents for Excel 提供的数据透视表功能支持条件格式化。通过设置,数据透视表的标题、小计和总计中重复的行/列将具有相同的样式(如 API 中所定义的那样),您不需要单独设置每一行/列的样式,并且在格式化数据透视表时,可以将具有样式和数字格式的数据透视表导出为 PDF,而不会丢失任何样式。
.NET 平台帮助文档| .NET 平台示例| Java 平台帮助文档| Java 平台示例导入/导出 .CSV 文件时自定义行/列/值分隔符
表格数据的逗号分隔值文件(.csv)通常用于管理 Excel 文件中的信息,例如,产品、库存、客户信息和其他数据,用户可以轻松地向 .CSV 文件录入信息,如直接录入或通过第三方导入。
在通过第三方导入时,不必仅使用逗号进行分隔数据,任何字符串或字符都可用于分隔 Excel 文件的行、列或单元格。
GrapeCity Documents for Excel 不仅支持列分隔符、自定义分隔符,还支持使用任何行、单元格、列分隔符导入和导出 .csv 文件。
varopenOption=
newCsvOpenOptions(); openOption.ColumnSeparator=
","; openOption.RowSeparator=
"\r\n"; openOption.CellSeparator=
'"'; workbook.Open(
@"D:\test.csv", openOption);
varsaveOption=
newCsvSaveOptions(); saveOption.ColumnSeparator=
"-"; saveOption.RowSeparator=
"\n"; saveOption.CellSeparator=
'\''; workbook.Save(
@"D:\test_out.csv", saveOption);
支持粘贴选项
Excel 文件以格式化数据和公式而闻名。用户在创建复杂的工作表后,往往需要在其他工作表上复制内容。根据不同的需要,复制的内容也有所不同。您可能只想复制文本内容、目标主题、公式,或仅复制格式。例如,在每月预算报告中,计算公式都保持不变;但是,格式可能会被修改。
下图即可反映出如何通过 GrapeCity Documents for Excel 仅复制公式的操作。
(支持粘贴选项:仅复制公式)
(支持粘贴选项:仅复制公式)
GrapeCity Documents for Excel 除了提供可复制范围内的所有数据(不包括列宽/行高以外的设置),还包含各种 PasteType 选项,通过这些选项,用户可以通过 Excel 文件覆盖复制、粘贴内容中涉及的多个方案,例如:
- 粘贴公式和格式
- 仅粘贴值
- 仅粘贴公式
- 仅粘贴数字格式
- 仅粘贴列宽
- 仅粘贴行高
- 粘贴值和数字格式的组合
- 粘贴公式和数字格式的组合
举例,使用以下代码仅复制公式:
varworkbook=newWorkbook();
varworksheet=workbook.ActiveSheet;
worksheet.Range["A1"].Value="2019/3/08";
worksheet.Range["A1"].Font.Size=20;
worksheet.Range["A1"].Copy(worksheet.Range["D1"], PasteType.Formulas);
插入、删除行/列时自动调整分页符
GrapeCity Documents for Excel 在 Excel 工作表中插入行/列时,分页符可以通过添加数据来调整。例如,公司将其销售记录从 Excel 导出到 PDF 时,为保证每个区域都可以单独显示在一个新的页面上,GrapeCity Documents for Excel 会自动执行插入分页符操作。
(插入、删除行/列时控制页面的分页)
(插入、删除行/列时控制页面的分页)
使用 GrapeCity Documents for Excel 的 FixedPageBreaks 属性来控制分页符的调整方式(在对行/列执行插入、删除操作时),这样做的目的,是为了保证每个区域都会单独占据一张新页面。
注意:要在行/列插入、删除时自动调整分页符,请将 FixedPageBreaks 设置为 false。如果您不希望自动调整分页符,请将 FixedPageBreak 设置为 true。
复制和移动工作表
在处理大量的 Excel 工作表和模板时,我们经常会使用复制和移动工作表的功能。例如,公司的预算工作表包含复杂的数据和需要按季度填写的公式,这些公式基本每年都会重复,每个部门在创建新的预算工作表时仅需复制主模板的内容和结构即可快速生成,而在 GrapeCity Documents for Excel 中这项工作将变得更为简单。
GrapeCity Documents for Excel 通过编程的方式复制和移动工作表,worksheet.Copy 方法用以在不同的位置复制和移动工作表。
Workbook workbook=newWorkbook();
varworksheet=workbook.ActiveSheet;
varworksheet_copy_sameWorkbook=worksheet.Copy();
varnewWorkbook=newWorkbook();
varworksheet_copy_otherWorkbook=worksheet.Copy(newWorkbook);
跨工作簿剪切和复制数据
GrapeCity Documents for Excel 支持跨工作簿剪切和复制数据,这项功能使得在任何范围内剪切、复制数据都将变得更加容易,尤其是需要在数百个工作簿中使用相同数据的时候。
(插入、删除行/列时控制页面的分页)
跨工作簿剪切和复制数据的示例代码:
Workbook workbook=newWorkbook();
varworksheet=workbook.ActiveSheet;
varnewWorkbook=newWorkbook();
//Copy range to another workbook worksheet.Range["B2:F21"].Copy(newWorkbook.ActiveSheet.Range["D5"]);
查找和替换文本
当需要把 Excel 数据更新到多个电子表格时,能够快速找到所需信息至关重要。在常规手段下,扫描数百个行和列非常耗时,但您可以使用 GrapeCity Documents for Excel 在几秒钟内完成此项任务。
例如,公司希望更新年度预算报表,该报表是按照月度预算进行分类的,现在需要在每月费用中新增一行数据,该数据具备特定的计算公式。此时,就需要在每个工作表中找到这个特定的公式,并执行公式运算结果。使用 Excel 完成这项工作将是非常耗时的,但通过 GrapeCity Documents for Excel 提供的查找和替换 API 即可快速完成。
以下代码显示了如何在工作表中查找和替换公式:
FindOptions fd=newFindOptions();
fd.LookIn=FindLookIn.OnlyFormulas;
foreach(var worksheet in workbook.Worksheets) {
IRange range=null;
do {
range=worksheet.UsedRange.Find("X", range, fd);
if(range !=null) {
range.Formula=range.Formula.Replace("X", "Y");
}
}
while(range !=null);
}
在 Cell 范围内支持 FormulaArrayR1C1
GrapeCity Documents for Excel 现在支持 IRange.FormulaArrayR1C1(),该函数可以为任何单元格范围引用 R1C1 样式公式。
例:
worksheet.Cells["A11"].R1C1Formula=
"=SUM(R[-10]C[0]:R[-7]C[0])";
导出为 PDF 时支持缩小文本内容以适应边框大小
GrapeCity Documents for Excel 允许导出为 PDF 时缩小文本内容以适应边框大小。
(导出为 PDF 时支持缩小文本内容以适应边框大小)
(导出为 PDF 时支持缩小文本内容以适应边框大小)
在 Microsoft Excel 中,单元格内的文本内容默认禁用“缩小到适合”的设置。因此,将此文档导出为 PDF 时,该单元格的文本内容可能会由于字号过大而显示不完整。
GrapeCity Documents for Excel 通过引入一个新的 API - PdfSaveOptions,为用户提供 ShrinkToFitSettings,使用这些设置,用户可以调整现有行高、列宽并缩小单元格中的文本字号,在导出为 PDF 时,用户还可以设置最小字体大小或省略号字符串以显示更长的文本。该方法支持单元格级别的缩小方式。
支持导入 XlsxOpenOptions 的标志
GrapeCity Documents for Excel 在导入 Excel 电子表格时支持 NoFlag、Data、Formulas Import 和更多类型的标志,如:
- 表
- MergeArea
- 样式
- 条件格式
- 资料验证
- 数据透视表
- 形状
提供自动调整行高、列宽的 API
GrapeCity Documents for Excel 引入了自动调整工作簿任何范围内行高和列宽的选项,并可根据数据进行调整,该 API 非常易于使用,只需在工作簿范围内,执行“AutoFit()”方法即可。
对于数据太长 而无法放入 Excel 单元格内的,通过使用 GrapeCity Documents for Excel ,即可自动调整行高、列宽,以实现跨越单元格的样式。想象一下,当你有成千上万行不同长度的文字,必须扫描整个工作簿以检查行高和列宽,才可确保数据完全可见,但通过 GrapeCity Documents for Excel ,仅用少量的代码即可快速完成这一步操作。
(在AutoFit之前)
(在AutoFit之后)
在 Excel I / O 时保留 OLEObjects
您现在可以通过 GrapeCity Documents for Excel 使用 OLEObjects 方式加载、修改和保存 Excel 电子表格。与此同时,在 Excel I / O 操作期间将保留这些对象。
(在 Excel I / O 时保留 OLEObjects)
保留日本的 Ruby 角色
使用 GrapeCity Documents for Excel 在 Excel I / O 中保留日语 ruby 字符。即使在某些 API 操作之后,日语 Ruby 字符也会被保留,例如:插入、删除、复制、剪切、合并、清除、排序等。
(保留日本的 Ruby 角色)