Office.Interop Word 2010 FormFields Iteration

Using these directions...

http://office.microsoft.com/en-us/word-help/create-forms-that-users-complete-in-word-HA010030746.aspx

I have a Word 2010 docx form I created using the developer tab in Word. I added a textbox, buildingblock control, DropDown List Control. I saved the document.


using Word = Microsoft.Office.Interop.Word;
            var wordApp = new Word.Application();
            wordApp.Visible = true;
            Word.Documents docs = wordApp.Documents;
            Word.Document doc = docs.Open(@"c:\temp\test3.docx", Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            Word.Range range = doc.Range(0, 0);


            Word.FormFields fields = doc.FormFields;
            foreach (Word.FormField field in fields)
                MessageBox.Show(field.Name + " " + field.Result + "\n");


            doc.Close(Type.Missing, Type.Missing, Type.Missing);
            wordApp.Quit(Type.Missing, Type.Missing, Type.Missing);


The issue is that the C# loop doesn't hit any fields. I don't understand why not. I have tried
references:
Microsoft.Office.Interop.Word Version 12.0.0.0
Microsoft.Office.Interop.Word Version 14.0.0.0

Can you see my mistake?

I am using Windows 7 Ultimate x64.

Thanks,

Geoff
test3.docx
gswitzAsked:
Who is Participating?
 
GrahamSkanConnect With a Mentor RetiredCommented:
Oops. I missed the fact that there are Content controls. This is how to list them in VB. Sorry I don't have C#.


Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
    MsgBox cc.Range.Text
Next cc

Open in new window

0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
Try it.......

object fname = @"c:\temp\test3.docx";
Word.Document doc = docs.Open(ref fname, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

follow:
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_26629764.html
0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
object fname = @"c:\temp\test3.docx";
            object missing = System.Reflection.Missing.Value;
            object ReadOnly = true;

            Word.Document doc = docs.Open(ref fname, ref missing,
                                          ref ReadOnly, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing);
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
gswitzAuthor Commented:
I copied this in verbatim and my
foreach (Word.FormField field in fields)
loop still didn't find any fields.
0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
See the code. This may help you to proceed.
var wordApp = new Word.Application();
            wordApp.Visible = true;
            Word.Documents docs = wordApp.Documents;
            object fname = @"c:\temp\test3.docx";
            object missing = System.Reflection.Missing.Value;
            object ReadOnly = true;
           // object isVisible = true;
            Word.Document doc = null;
            try
            {
                
     
           
                doc = docs.Open(ref fname, ref missing,
                                              ref ReadOnly, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing, ref missing,
                                              ref missing, ref missing);          


                //doc.Activate();

                Console.WriteLine("No Of tables=" + doc.Tables.Count);
                Word.Range rng;
                foreach (Word.Table tbl in doc.Tables)
                {
                    int cl = tbl.Columns.Count;
                    int rows = tbl.Rows.Count;
                    Console.WriteLine("No of cols = " + cl + " Rows = " + rows);
                    for (int i = 1; i <= rows; ++i)
                    {
                        for (int c = 1; c <= cl; c++)
                        {

                            rng = tbl.Cell(1, 1).Range;
                            rng.SetRange(tbl.Rows[i].Cells[c].Range.Start,
                                tbl.Rows[i].Cells[c].Range.End - 1);
                            Console.Write(rng.Text); Console.Write(" ");
                        }
                        Console.WriteLine();

                    }

                }

         
                

            }
            catch (Exception ee)
            {
                Console.WriteLine("Error!" + ee.Message);
            }

            finally
            {
                if(doc != null)
                    doc.Close(ref missing, ref missing, ref missing);
                if (wordApp != null)
                wordApp.Quit(ref missing, ref missing, ref missing);
            }

Open in new window

0
 
GrahamSkanConnect With a Mentor RetiredCommented:
There are no form fields in your document. There is only a two-column, four-row table with text in each cell.
0
 
gswitzAuthor Commented:
Great, Graham! This gets me  very close. Could you show me how to change the value in the Gender control to Female?

Thanks!
0
All Courses

From novice to tech pro — start learning today.