How to replace all OLE objects with text in a Word document?
Syncfusion® Essential® DocIO is a .NET Core Word Library used to create, read, edit, and convert Word documents programmatically without Microsoft Word or interop dependencies. Using this library, you can replace all OLE objects with text in a Word document using C#.
Steps to replace all OLE objects with text in Word document using C#
- Create a new C# Console application project.
- Install the Syncfusion.DocIO.Net.Core NuGet package as a reference to your project from Nuget.org.
Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, include a license key in your projects. Refer to the link to learn about generating and registering a Syncfusion® license key in your application to use the components without trail message.
- Include the following namespace in the Program.cs file.
C#
using Syncfusion.DocIO;
using Syncfusion.DocIO.DLS;
- Use the following code snippet to replace an OLE object with text in a Word document.
C#
//Open the file as a Stream.
using (FileStream docStream = new FileStream("../../../Input.docx", FileMode.Open, FileAccess.Read))
{
//Load the file stream into a Word document.
using (WordDocument document = new WordDocument(docStream, FormatType.Docx))
{
//Find all OLE object by EntityType in Word document.
List<Entity> oleObjects = document.FindAllItemsByProperty(EntityType.OleObject, null, null);
//Remove the OLE objects and endnotes.
for (int i = 0; i < oleObjects.Count; i++)
{
WOleObject ole = oleObjects[i] as WOleObject;
//Replaces the OLE object with a alternate text.
ReplaceOLEObjectsWithPlaceHolder(ole, "Embedded file was here");
}
//Save a Word document to the MemoryStream.
FileStream outputStream = new FileStream(@"../../../Output.docx", FileMode.OpenOrCreate);
document.Save(outputStream, FormatType.Docx);
//Closes the Word document
document.Close();
outputStream.Close();
}
}
- Use the following method to replace an OLE object with a text.
C#
private void ReplaceOLEObjectsWithPlaceHolder(WOleObject ole, string replacingText)
{
WParagraph ownerPara = ole.OwnerParagraph;
int index = ownerPara.ChildEntities.IndexOf(ole);
//Removes the ole object.
RemoveOLEObject(ownerPara, index);
//Insert the alternate text.
InsertTextrange(ownerPara, index, replacingText);
}
-
Use the following method to remove an existing OLE object from a Word document.
The structure of an OLE object in Syncfusion Word Library (DocIO) DOM is as follows:- WOleObject: Represents the OLE object.
- ParagraphItem: Represents the Field code.
- WFieldMark: Represents the Field separator.
- WPicture: Represents the OLE picture.
- WFieldMark: Represents the end of a Field.
Therefore, when removing an OLE object from a Word document, all five items must be removed from DOM.
C#
private void RemoveOLEObject(WParagraph ownerPara, int index)
{
//Iterate from FieldEnd to OLE object
for (int i = index + 4; i >= index; i--)
{
//Remove the OLE object based on the structure
ownerPara.ChildEntities.RemoveAt(i);
}
}
- Use the following method to insert a text range in a particular index.
C#
private void InsertTextrange(WParagraph ownerPara, int index, string replacingText)
{
//Create a new textrange
WTextRange textRange = new WTextRange(ownerPara.Document);
//Add the text
textRange.Text = replacingText;
//Insert the textrange in the particular index
ownerPara.ChildEntities.Insert(index, textRange);
}
You can download a complete working sample from GitHub.
By executing the program, you will get the Word document as follows.
Take a moment to peruse the [documentation](https where you can find basic Word document processing options along with the features like mail merge, merge, split, and compare documents, find and replace text in the Word document, protect the Word documents, and most importantly, the PDF and Image conversions with code examples.
Conclusion
I hope you enjoyed learning about how to replace an OLE object with a text in a Word document using .NET Core Word Library.
You can refer to our ASP.NET Core DocIO feature tour page to know about its other groundbreaking feature representations and documentation, and how to quickly get started for configuration specifications. You can also explore our ASP.NET Core DocIO example to understand how to create and manipulate data.
For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion®, you can try our 30-day free trial to check out our other controls.
If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!