I use this code to get a String array of headings used in a MS Word 2007 document (.docx):
dynamic arr = Document.GetCrossReferenceItems(WdReferenceType.wdRefTypeHeading);
Using the debugger, I see that arr
is dynamically assigned a String array with titles of all my headings in the document (about 40 entries). So far so good.
Then, I want to access the strings, but no matter how I do it, I get the following exception:
InvalidCastException:
Unable to cast object of type 'System.String[*]' to type 'System.String[]'.
I have tried different ways of accessing the strings:
By index:
String arr_elem = arr[1];
By casting to an IEnumerable:
IEnumerable list = (IEnumerable)arr;
By using a simple foreach loop:
foreach (String str in arr)
{
Console.WriteLine(str);
}
However, no matter what I try, I always end up with the same exception as shown above.
Can anyone explain what I am missing here / what I am doing wrong? And especially String[*]
- what does it mean?
Using a template with your Word Automation client has two significant advantages over building a document from nothing: You can have greater control over the formatting and placement of objects throughout your documents. You can build your documents with less code.
Go to File > Options > Proofing, and select AutoCorrect Options. On the AutoCorrect tab, select the Replace text as you type check box, if it's not already checked. Under Replace, type the characters that you want to trigger the automatic text. The text that you selected in your document should appear under With.
Using Selenium, C#, and Visual Studio together provides a unique opportunity to create a robust, scalable, and flexible automation framework.
Go to Insert tab, Text section, click Object button (it's on the right) Choose OpenDocument Text which will open a new embedded word document. Copy and paste your code from Visual Studio / Eclipse inside this embedded word page.
string[]
is a vector - a 1-d, 0-based array. string[*]
, however, is a regular array that just happens to have one dimension. Basically, you are going to have to handle it as Array
, and either copy the data out, or use the Array
API rather than the string[]
API.
This is the same as the difference between typeof(string).MakeArrayType()
(the vector) and typeof(string).MakeArrayType(1)
(a 1-d non-vector).
try
object arr_r = Document.GetCrossReferenceItems(WdReferenceType.wdRefTypeHeading);
Array arr = ((Array) (arr_r));
string myHeading = (string) arr.GetValue(1);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With