This project has moved. For the latest updates, please go here.

Need help with optional parameters

Nov 26, 2013 at 7:53 AM
Edited Nov 26, 2013 at 7:56 AM
Hi beautiful people - great effort with the library, Sebastian!!

I have a simple question - how do i omit the optional parameters that are not declared as optional in the API methods?

I want to use the WordApi.ContentControl.SetPlaceholderText() method that is defined as follows (http://msdn.microsoft.com/en-us/library/office/bb256831(v=office.12).aspx)

expression.SetPlaceholderText(BuildingBlock, Range, Text)
Only one of the parameters is used when specifying placeholder text. If more than one parameter is used, Microsoft Office Word uses the text specified in the first parameter. If all parameters are omitted, the placeholder text is blank.

Naturally I want to pass the Text (String) parameter from within my VB.NET code. How do I do that?

SetPlaceholderText has 4 Overloads in the WordApi:
SetPlaceholderText()
SetPlaceholderText(BuildingBlock)
SetPlaceholderText(BuildingBlock, Range)
SetPlaceholderText(BuildingBlock, Range, Text)

with the last one being the only one giving me access to the Text parameter.

I cannot omit the other parameters as they are not declared optional.
I have tried any combination of Type.Missing and Missing.Value (leads to InvalidCastException within Word) as well as creating and passing empty stub objects or simply "Nothing" for BuildingBlock and Range (leads to very confusing COMExceptions "DISP_E_TYPEMISMATCH" within Word).

How do I use this? I have tried to research this, but no success.

Thanks a bunch!

Christoph
Coordinator
Nov 26, 2013 at 1:23 PM
SetPlaceHolderText contains a bug in the default arguments. you have to set the 3 arguments at hand.
here you can find an old msdn discussion post from me with more details for the bug.

http://social.msdn.microsoft.com/Forums/office/en-US/0c03837b-aca1-4cb6-81b7-f4fac8f36a04/possible-bug-in-wordcontentcontrol?forum=worddev

*Sebastian
May 8, 2014 at 9:35 PM
Edited May 8, 2014 at 9:45 PM
Sorry for reviving this old topic, but I came around to try this again and i am Stuck at the same place.
I don't fully understand the discussion you linked but in a nutshell - does this mean there is no way to set the placeholder text from .Net?

"NetOffice unterstützt derzeit keine optionalen/benannten Parameter da es in C# geschrieben ist und auch mit früheren .NET Versionen kompatibel sein will wo C# diese Fähigkeit noch nicht hatte. Ausserdem würde das Konzept der Attribute und Quellcodekommentare mit Hinweisen zur Versionsunterstützung dann nicht mehr funktionieren. Deswegen stellt NO für Methoden/Properties mit optionalen Parametern die entsprechende Anzahl an Überladungen bereit.

Sebastian" (sorry, only found the german quote ;))

I don't understand this... SetPlaceholderText() has 4 overloads:

        public void SetPlaceholderText();

        public void SetPlaceholderText(BuildingBlock buildingBlock);

        public void SetPlaceholderText(BuildingBlock buildingBlock, Range range);

        public void SetPlaceholderText(BuildingBlock buildingBlock, Range range, string text);
How can I use this if i wanted to pass only the "text" argument... I am very confused again to the point where I will lose interest in finishing my application :)
Coordinator
May 8, 2014 at 10:07 PM
It looks like you a german native speaker:
I want answer in german. if it doesnt, please let me know.

Ja hey kein Problem, ich bin mir noch nicht sicher was deine Frage ist aber ich antworte zuerst mal auf das typische Problem zu dieser Methode.

Da hast du die eine Methode in Word gefunden die Microsoft leider gründlich versaut hat.
Ich habe mich wegen der Methode schon mal vor einem Jahr im Microsoft Support gestritten:
Das ist der Link dazu(Ich bin Alfred Tetzlaf):
http://social.msdn.microsoft.com/Forums/office/en-US/0c03837b-aca1-4cb6-81b7-f4fac8f36a04/possible-bug-in-wordcontentcontrol

Die Zusammenfassung: Du musst die ersten beiden Parameter immer angeben, obwohl sie eigentlich optional sind. Die von Microsoft definierten Default Values für diese Parameter sind nämlich schlichtweg Bullshit und führen zu einem Fehler. Danach hats in meinen Tests immer funktioniert.

*Sebastian
May 9, 2014 at 8:27 AM
Hi und danke für die Antwort :)

ich hab' halt einfach keine Ahnung was ich für die ersten beiden Parameter angeben soll, geschweige denn was sie bringen, auch nach studieren der msdn (BuildingBlock - ist das nicht ein Textbaustein?)
Wenn ich zwei stub-Objekte mit new erzeuge, erhalte ich immer noch einen Fehler in Word - ich hab schon soviel Trial & Error hinter mir das ich fast den Verstand verliere.

Kurz: hast Du ein Beispiel im Kopf, das einfach angibt, wie ich die Methode aufrufen soll? Ich mach ja nur diese beiden Zeilen:

NetOffice.WordApi.ContentControl cc = currentDocument.ContentControls.Add(NetOffice.WordApi.Enums.WdContentControlType.wdContentControlText, MyApplication.Selection.Range);
cc.Title = currentValue;

Und würde nun gern den bekloppten Platzhalter-Text ersetzen.

Vielen Dank! :)




Am 9. Mai 2014 00:07 schrieb SebastianDotNet <[email removed]>:

From: SebastianDotNet

It looks like you a german native speaker:
I want answer in german. if it doesnt, please let me know.

Ja hey kein Problem, ich bin mir noch nicht sicher was deine Frage ist aber ich antworte zuerst mal auf das typische Problem zu dieser Methode.

Da hast du die eine Methode in Word gefunden die Microsoft leider gründlich versaut hat.
Ich habe mich wegen der Methode schon mal vor einem Jahr im Microsoft Support gestritten:
Das ist der Link dazu(Ich bin Alfred Tetzlaf):
http://social.msdn.microsoft.com/Forums/office/en-US/0c03837b-aca1-4cb6-81b7-f4fac8f36a04/possible-bug-in-wordcontentcontrol

Die Zusammenfassung: Du musst die ersten beiden Parameter immer angeben, obwohl sie eigentlich optional sind. Die von Microsoft definierten Default Values für diese Parameter sind nämlich schlichtweg Bullshit und führen zu einem Fehler. Danach hats in meinen Tests immer funktioniert.

*Sebastian

Read the full discussion online.

To add a post to this discussion, reply to this email ([email removed])

To start a new discussion for this project, email [email removed]

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe on CodePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at CodePlex.com




--

Mit freundlichen Grüßen

Christoph Grün -Entwicklung und Design

--

Firma: Dresen und Grün GbR
Geschäftsführende Gesellschafter:
Markus Dresen, Christoph Grün

Anschrift: Weilandstr. 1A, 66359 Bous
Telefon: 06898 / 39 04 998
Steuernummer:090/152/00070

Dec 9, 2014 at 3:23 PM
Hello, has this issue been resolved? Or is it not possible to use "SetPlaceholderText(BuildingBlock buildingBlock, Range range, string text)" and only pass a "text" argument from NetOffice code due the bug?

Using the standard Microsoft.Office.Interop.Word API I can do this:

contentControl.SetPlaceholderText(null, null, "Placeholder text");

I am now wanting to do the same thing from NetOffice. Please advise. Thank you!
Coordinator
Dec 9, 2014 at 4:53 PM
Please keep in your mind: This is a MS-Office bug and not a NetOffice bug. Currently you have set [all] valid arguments at hand.
The good news(but not for today): NO 1.8 want spend an empty COM reference argument to handle this. (the problem here is the (MS) defined default arguments in late-binding are not valid)


*Sebastian
Dec 9, 2014 at 5:05 PM
Hi Sebastian, yes, I am aware that this is a MS Office bug, not NetOffice.

I wasn't sure if a workaround was implemented in NetOffice yet or not.

Thank you for the update and I look forward to NO 1.8.