Solved

How can I programmatically remove Custom Document Properties from Word Documents?

Posted on 2008-09-29
6
5,655 Views
Last Modified: 2008-10-05
I have been working on a project that requires me to be able to add and remove custom document properties from Word documents.  It was fairly easy to find demonstrations on how to add/view Custom Document properties, but I have been unable to remove them.  How can I do this? I've included examples I found of how to add/view.
public void ReadCustom()

{

	object oDocCustomProps = _document.CustomDocumentProperties;

	Type typeDocCustomProps = oDocCustomProps.GetType();
 

	string strIndex = "Knowledge Base Article";

	string strValue;

	try

	{

		object oKBProp = typeDocCustomProps.InvokeMember("Item",

															 BindingFlags.Default |

															 BindingFlags.GetProperty,

															 null, oDocCustomProps,

															 new object[] { strIndex });

		Type typeKBProp = oKBProp.GetType();

		strValue = typeKBProp.InvokeMember("Value",

															 BindingFlags.Default |

															 BindingFlags.GetProperty,

															 null, oKBProp,

															 new object[] { }).ToString();

		MessageBox.Show("The KB is: " + strValue, "KB");

	}

	catch (TargetInvocationException ex)

	{

		MessageBox.Show(strIndex + " does not exist");

	}

}
 

public void DeleteCustom()

{

	object oDocCustomProps = _document.CustomDocumentProperties;

	Type typeDocCustomProps = oDocCustomProps.GetType();
 

	string strIndex = "Knowledge Base Article";

	string strValue;

	object oKBProp = typeDocCustomProps.InvokeMember("Remove",

														 BindingFlags.Default |

														 BindingFlags.GetProperty,

														 null, oDocCustomProps,

														 new object[] { strIndex });

	

}

Open in new window

0
Comment
Question by:guxiyou
  • 4
6 Comments
 
LVL 8

Assisted Solution

by:Bradley Haynes
Bradley Haynes earned 200 total points
ID: 22601689
I found this at:  http://www.aspose.com/community/forums/142488/custom-document-properties-yes-no-field/showthread.aspx

This may be what you need:
Document doc = new Document(@"Test064\in.doc");

doc.CustomDocumentProperties["test"].Value = false;

doc.Range.UpdateFields();

doc.Save(@"Test064\out.doc");
0
 
LVL 76

Assisted Solution

by:GrahamSkan
GrahamSkan earned 200 total points
ID: 22603869
This is a tested Word macro to do that.
Sub ClearDocProperties(wdDoc As Word.Document)

    Dim wdProp As Office.DocumentProperty

    

    For Each wdProp In wdDoc.CustomDocumentProperties

        wdProp.Delete

    Next wdProp

End Sub

Open in new window

0
 

Author Comment

by:guxiyou
ID: 22606490
Graham Skan:

I've see this example in several bogs/help sites, but it doesn't appear to work in C#. Whenever I try it I get errors, specifically I get:

"Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Core.DocumentProperties'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
public void DeleteCustom()

{

	DocumentProperties properties = (DocumentProperties) _document.CustomDocumentProperties;

	foreach (DocumentProperty wdProp in properties)

	{

		wdProp.Delete();

	}

}

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:guxiyou
ID: 22606567
b_haynes:

I tried the solution that you proposed, and it wouldn't compile, I got a, "Cannot apply indexing with [ ] to an expression of type 'object'. I'm tried casting it, but no matter how I cast it I still get problems.
0
 

Author Comment

by:guxiyou
ID: 22608087
Thanks for both your help.  Here I found a solution that seems to work:
public void DeleteCustom()

{

	object oDocCustomProps = _document.CustomDocumentProperties;

	Type typeDocCustomProps = oDocCustomProps.GetType();
 

	string strIndex = "PropertyName";

	try

	{

		object oKBProp = typeDocCustomProps.InvokeMember("Item",

															 BindingFlags.Default |

															 BindingFlags.GetProperty,

															 null, oDocCustomProps,

															 new object[] { strIndex });

		Type typeKBProp = oKBProp.GetType();

		typeKBProp.InvokeMember("Delete", BindingFlags.Default | BindingFlags.InvokeMethod, null, oKBProp, null);

	}

	catch { }

}

Open in new window

0
 

Accepted Solution

by:
guxiyou earned 0 total points
ID: 22608164
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

It is often necessary in this forum and others to illustrate Word fields as text with the field delimiters replaced with the curly brackets that the delimiters resemble when field codes are being displayed on the document. This means that the text c…
Introduction This tutorial provides instructions on how to properly format your Word document using the inbuilt tools provided. The benefits of using these tools means your documents are more accessible and easily portable to other applications an…
This video walks the viewer through the process of creating Hyperlinks for the web and other documents. Select the "Insert" tab: Click "Hyperlink":  Type "http://" followed by a web address to reference a website or navigate to a document to ref…
This Micro Tutorial well show you how to find and replace special characters in Microsoft Word. This is similar to carriage returns to convert columns of values from Microsoft Excel into comma separated lists.

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now