DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
DevExpress WinForms控件v25.1日前已经全新发布,新版本的电子表格组件、富文档编辑器功能得到了全面升级等,欢迎下载最新版体验!
DevExpress技术交流群12:1028386091 欢迎一起进群讨论
Spreadsheet(电子表格)控件
OLE对象
DevExpress WinForms Spreadsheet(电子表格)控件现在支持OLE对象,OLE(对象链接和嵌入)允许您链接外部文件并将数据(电子表格,PDF,邮件消息,PPT等)嵌入到Excel文档中。
有了OLE Object的支持,您可以执行以下操作:
- 创建OLE对象来存储指向外部文件的链接或将这些文件中的数据嵌入到文档中;
- 获取OLE对象属性;
- 从文档中提取OLE对象数据;
- 从文档中删除OLE对象;
- 打印和导出带有OLE对象图标的文档为PDF和图像格式;
- 加载和保存包含OLE对象的文档而不会丢失内容。
OLE对象由OleObject接口表示,文档作为一个独特的形状,OLE对象继承基础形状接口的所有设置。形状设置定义OLE对象图标的外观、位置和内部对象属性(包括名称、图标大小、图标在工作表中的位置、所有文本等)。
要访问工作表中的OLE对象,请使用Worksheet.OleObjects集合,它们也可以通过baseWorksheet.Shapes集合获得,OleObjectCollection.AddLinkedOleObject 和OleObjectCollection.AddEmbeddedOleObject方法允许您在工作表中创建新的链接或嵌入OLE对象。
C#
Worksheet worksheet = spreadsheetControl.ActiveWorksheet; CellRange oleIconRange = worksheet.Range["B4:D6"]; SpreadsheetImageSource oleIcon = SpreadsheetImageSource.FromFile("oleIcon.png"); // Create linked OLE object. OleObject oleObjectLinked = worksheet.OleObjects.AddLinkedOleObject( oleIconRange, "package.pdf", OleObjectType.Package, oleIcon); // Create embedded OLE object from byte array. byte[] sourceData = File.ReadAllBytes("package.pdf"); OleObject oleObjectEmbedded1 = worksheet.OleObjects.AddEmbeddedOleObject( oleIconRange, sourceData, OleObjectType.Package, oleIcon); // Create embedded OLE object from file stream. using (var stream = File.OpenRead("package.pdf")) { OleObject oleObjectEmbedded2 = worksheet.OleObjects.AddEmbeddedOleObject( oleIconRange, stream, OleObjectType.Package, oleIcon); }
您还可以提取和分析链接的和嵌入的数据。使用OleObject.InsertType属性来确定OLE对象类型(链接的或嵌入的),OleObject.AsLinkedContent和OleObject.AsEmbeddedContent方法允许您根据OLE对象类型提取附加信息。对于链接的对象,您可以使用OleObjectLinkedContent.FileName属性获得链接的文件名。对于嵌入对象,您可以使用OleObjectEmbeddedContent.GetRawData方法获取原始二进制内容,或者使用OleObjectEmbeddedContent.SaveAs方法将嵌入内容保存到文件中。
C#
Worksheet worksheet = spreadsheetControl.ActiveWorksheet OleObject oleObject = worksheet.OleObjects[0]; if(oleObject.InsertType == OleObjectInsertType.Linked) { OleObjectLinkedContent linkedContent = oleObject.AsLinkedContent(); string linkedFileName = linkedContent.FileName; } if(oleObject.InsertType == OleObjectInsertType.Embedded) { OleObjectEmbeddedContent embeddedContent = oleObject.AsEmbeddedContent(); byte[] oleRawData = embeddedContent.GetRawData(); if (oleObject.Type == OleObjectType.AdobeAcrobatDocument) using (FileStream stream = new FileStream("embedded_document.pdf", FileMode.Create, FileAccess.Write)) embeddedContent.SaveAs(stream); }
您还可以从电子表格中删除OLE对象,使用OleObject.Delete、OleObjectCollection.Remove或OleObjectCollection.RemoveAt方法删除单个OLE对象,或使用OleObjectCollectionClear方法从工作表中删除所有OLE对象。
C#
OleObject oleObject = worksheet.OleObjects[0]; // Remove the current OLE object. oleObject.Delete(); // or worksheet.OleObjects.Remove(oleObject); // Remove all OLE objects in the collection. worksheet.OleObjects.Clear();
注意:OLE对象支持仅在基于OpenXML的文件格式(XLSX、XLSM、XLTX和XLTM)中可用。
富文本编辑器
Right-to-Left(RTL)引擎增强
v25.1增强了Right-to-Left文本呈现引擎(改进了段落、页眉和页脚、编号列表、表格和形状中的文本顺序,双向文本包括从右到左和从左到右混合文本块)。
当您通过用户界面或代码生成PDF文件、图像或打印输出时可用。
CJK(中文、日文和韩文)文本换行
v25.1增加了CJK文本换行和断行规则支持,在以前的版本中,富文本编辑器将拉丁文本换行规则(依赖于空格字符和标点符号)应用于中文、日文和韩文文本。
新的换行规则正确地在文档段落、页眉和页脚、表格和形状中的单个字符之间应用换行,使用CJK文本换行规则的文档现在可以打印/导出为具有适当文本布局的PDF和图像格式。

PDF导出 - 将Word内容控件转换为PDF AcroForm字段
v25.1扩展了Word文档到PDF的导出引擎,内置了Word内容控件到PDF AcroForm字段的转换。
DevExpress文字处理工具自动转换以下内容控件类型:
- 纯文本
- 富文本
- 图片
- 复选框
- 组合框
- 下拉列表
- 日期选择器
注意:
构建块和重复部分控件导出为常规文本。
由于PDF格式的限制,从富文本内容控件生成的PDF文本字段使用原始富文本内容控件的第一个单词的格式。
分割页面或包含复杂对象(如表)的富文本内容控件被导出为常规文本。
要启用此功能,您必须:
- 用内容控件加载Word文件或使用DevExpress WinForms富文本编辑器在文档中生成内容控件。
- 创建PdfExportOptions实例。
- 启用PdfExportOptions.ExportEditingFieldsToAcroForms属性。
- 使用这个PdfExportOptions对象作为参数调用ExportToPdf方法。
您也可以使用Print Preview -> PDF Export Options对话框从用户界面激活此功能。
C#
using DevExpress.XtraPrinting; using DevExpress.XtraRichEdit; richEditControl.LoadDocument("input_content_controls.docx"); PdfExportOptions options = new PdfExportOptions(); options.ExportEditingFieldsToAcroForms = true; richEditControl.ExportToPdf("output_with_acroform.pdf", options);

比较Word文档
现在可以通过编程方式比较两个Word文档,新的CompareDocumentExtensions.Compare扩展方法允许您执行以下操作:
- 识别两个文档版本之间的更改,并生成带有修订的Word输出。
- 比较文档文本和格式(包括区分大小写)。
- 比较文档页眉、页脚和文本框中的内容。
- 设置输出修订的作者/日期。
- 在单词或字符级别比较内容。
- 将带有修订的文档作为新的Document实例返回,以便进一步处理(或自动将输入文档替换为修改后的内容)。
注意:输入文档不得包含文档修订,否则Compare方法将抛出异常。
C#
richEditControl.LoadDocument("FirstLook_original.docx"); Document originalDocument = richEditControl.Document; RichEditDocumentServer wordProcessor = new RichEditDocumentServer(); wordProcessor.LoadDocument("FirstLook_revised.docx"); Document revisedDocument = wordProcessor.Document; // Setup compare options, compare two documents, // and add revisions to the RichEditControl document. Document docWithRevisions = originalDocument.Compare(revisedDocument, new CompareDocumentOptions() { Author = "Jane Doe", DateTime = DateTime.Now, ComparisonLevel = ComparisonLevel.Word, CompareCaseChanges = false, CompareFormatting = true, CompareHeadersAndFooters = true, CompareTextBoxes = true }, ComparisonTargetType.Original);
注意:CompareDocumentExtensionsCompare扩展方法是在DevExpress.Docs.v25.1.dll程序集中定义的,将这个程序集添加到您的项目中,或者从离线包源中安装DevExpress.Document.Processor NuGet包,以使用CompareDocumentExtensions.Compare方法。
重要提示:您需要一个激活的DevExpress Office File API Subscription或DevExpress Universal Subscription才能在生产代码中使用这个类。
XtraMessageBox
显示在Windows任务栏和自定义开始位置
有了新的功能,您可以:
- 在Windows任务栏中显示DevExpress消息框,确保用户可以轻松访问。
- 定义消息框在屏幕上的起始位置。
C#
void messageButton_Click(object sender, EventArgs e) { XtraMessageBoxArgs args = new XtraMessageBoxArgs() { Caption = "Tip", Text = "Hello DevExpress!", Buttons = new DialogResult[] { DialogResult.OK }, }; args.ImageOptions.SvgImage = svgImageCollection1["info"]; args.ImageOptions.SvgImageSize = new Size(32, 32); args.Showing += Args_Showing; XtraMessageBox.Show(args); } void Args_Showing(object sender, XtraMessageShowingArgs e) { // Get the screen working area. Rectangle workingArea = Screen.PrimaryScreen.WorkingArea; // Calculate bottom-right position. int x = workingArea.Right - e.MessageBoxForm.Width; int y = workingArea.Bottom - e.MessageBoxForm.Height; // Define message box start position. e.MessageBoxForm.StartPosition = FormStartPosition.Manual; e.MessageBoxForm.Location = new Point(x, y); // Display the message box in the Windows taskbar. e.MessageBoxForm.ShowInTaskbar = true; }
更多DevExpress线上公开课、中文教程资讯请上中文网获取
关于慧都科技
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表板)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5510.html
相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,